databin.c revision 45a8ba0302fa0632410b2f100f92701651dd7a0f
1b973f2b91343554586da3c952c63c2369acd879whr/* 2b973f2b91343554586da3c952c63c2369acd879whr * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. 345a8ba0302fa0632410b2f100f92701651dd7a0fvapier * 4b973f2b91343554586da3c952c63c2369acd879whr * This program is free software; you can redistribute it and/or modify it 5b973f2b91343554586da3c952c63c2369acd879whr * under the terms of version 2 of the GNU General Public License as 6b973f2b91343554586da3c952c63c2369acd879whr * published by the Free Software Foundation. 745a8ba0302fa0632410b2f100f92701651dd7a0fvapier * 8b973f2b91343554586da3c952c63c2369acd879whr * This program is distributed in the hope that it would be useful, but 9b973f2b91343554586da3c952c63c2369acd879whr * WITHOUT ANY WARRANTY; without even the implied warranty of 10b973f2b91343554586da3c952c63c2369acd879whr * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 1145a8ba0302fa0632410b2f100f92701651dd7a0fvapier * 12b973f2b91343554586da3c952c63c2369acd879whr * Further, this software is distributed without any warranty that it is 13b973f2b91343554586da3c952c63c2369acd879whr * free of the rightful claim of any third person regarding infringement 14b973f2b91343554586da3c952c63c2369acd879whr * or the like. Any license provided herein, whether implied or 15b973f2b91343554586da3c952c63c2369acd879whr * otherwise, applies only to this software file. Patent licenses, if 16b973f2b91343554586da3c952c63c2369acd879whr * any, provided herein do not apply to combinations of this program with 17b973f2b91343554586da3c952c63c2369acd879whr * other software, or any other product whatsoever. 1845a8ba0302fa0632410b2f100f92701651dd7a0fvapier * 19b973f2b91343554586da3c952c63c2369acd879whr * You should have received a copy of the GNU General Public License along 20b973f2b91343554586da3c952c63c2369acd879whr * with this program; if not, write the Free Software Foundation, Inc., 59 21b973f2b91343554586da3c952c63c2369acd879whr * Temple Place - Suite 330, Boston MA 02111-1307, USA. 2245a8ba0302fa0632410b2f100f92701651dd7a0fvapier * 23b973f2b91343554586da3c952c63c2369acd879whr * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, 24b973f2b91343554586da3c952c63c2369acd879whr * Mountain View, CA 94043, or: 2545a8ba0302fa0632410b2f100f92701651dd7a0fvapier * 2645a8ba0302fa0632410b2f100f92701651dd7a0fvapier * http://www.sgi.com 2745a8ba0302fa0632410b2f100f92701651dd7a0fvapier * 2845a8ba0302fa0632410b2f100f92701651dd7a0fvapier * For further information regarding this notice, see: 2945a8ba0302fa0632410b2f100f92701651dd7a0fvapier * 30b973f2b91343554586da3c952c63c2369acd879whr * http://oss.sgi.com/projects/GenInfo/NoticeExplan/ 31b973f2b91343554586da3c952c63c2369acd879whr */ 32b973f2b91343554586da3c952c63c2369acd879whr#include <stdio.h> 33b973f2b91343554586da3c952c63c2369acd879whr#include <sys/param.h> 34b973f2b91343554586da3c952c63c2369acd879whr#include <string.h> /* memset */ 35b973f2b91343554586da3c952c63c2369acd879whr#include <stdlib.h> /* rand */ 36cc2e55555ae520d1851cd9198daa41845e1c7c82alaffin#include "databin.h" 37b973f2b91343554586da3c952c63c2369acd879whr 38b973f2b91343554586da3c952c63c2369acd879whr#if UNIT_TEST 39b973f2b91343554586da3c952c63c2369acd879whr#include <malloc.h> 40b973f2b91343554586da3c952c63c2369acd879whr#endif 41b973f2b91343554586da3c952c63c2369acd879whr 42b973f2b91343554586da3c952c63c2369acd879whrstatic char Errmsg[80]; 43b973f2b91343554586da3c952c63c2369acd879whr 44b973f2b91343554586da3c952c63c2369acd879whrvoid 45b973f2b91343554586da3c952c63c2369acd879whrdatabingen (mode, buffer, bsize, offset) 46b973f2b91343554586da3c952c63c2369acd879whrint mode; /* either a, c, r, o, z or C */ 47b15aafd4f07a07e790ac504343cf8d9bd77963afsubrata_modakchar *buffer; /* buffer pointer */ 48b973f2b91343554586da3c952c63c2369acd879whrint bsize; /* size of buffer */ 49b973f2b91343554586da3c952c63c2369acd879whrint offset; /* offset into the file where buffer starts */ 50b973f2b91343554586da3c952c63c2369acd879whr{ 51b973f2b91343554586da3c952c63c2369acd879whrint ind; 52b973f2b91343554586da3c952c63c2369acd879whr 53b973f2b91343554586da3c952c63c2369acd879whr switch (mode) 54b973f2b91343554586da3c952c63c2369acd879whr { 55b973f2b91343554586da3c952c63c2369acd879whr default: 56b973f2b91343554586da3c952c63c2369acd879whr case 'a': /* alternating bit pattern */ 57b973f2b91343554586da3c952c63c2369acd879whr memset(buffer,0x55,bsize); 58b973f2b91343554586da3c952c63c2369acd879whr break; 59b973f2b91343554586da3c952c63c2369acd879whr 60b973f2b91343554586da3c952c63c2369acd879whr case 'c': /* checkerboard pattern */ 61b973f2b91343554586da3c952c63c2369acd879whr memset(buffer,0xf0,bsize); 62b973f2b91343554586da3c952c63c2369acd879whr break; 63b973f2b91343554586da3c952c63c2369acd879whr 64b973f2b91343554586da3c952c63c2369acd879whr case 'C': /* */ 65b973f2b91343554586da3c952c63c2369acd879whr for (ind=0;ind< bsize;ind++) { 66b973f2b91343554586da3c952c63c2369acd879whr buffer[ind] = ((offset+ind)%8 & 0177); 67b973f2b91343554586da3c952c63c2369acd879whr } 68b973f2b91343554586da3c952c63c2369acd879whr break; 69b973f2b91343554586da3c952c63c2369acd879whr 70b973f2b91343554586da3c952c63c2369acd879whr case 'o': 71b973f2b91343554586da3c952c63c2369acd879whr memset(buffer,0xff,bsize); 72b973f2b91343554586da3c952c63c2369acd879whr break; 73b973f2b91343554586da3c952c63c2369acd879whr 74b973f2b91343554586da3c952c63c2369acd879whr case 'z': 75b973f2b91343554586da3c952c63c2369acd879whr memset(buffer,0x0,bsize); 76b973f2b91343554586da3c952c63c2369acd879whr break; 77b973f2b91343554586da3c952c63c2369acd879whr 78b973f2b91343554586da3c952c63c2369acd879whr case 'r': /* random */ 79b973f2b91343554586da3c952c63c2369acd879whr for (ind=0;ind< bsize;ind++) { 80b973f2b91343554586da3c952c63c2369acd879whr buffer[ind] = (rand () & 0177) | 0100; 81b973f2b91343554586da3c952c63c2369acd879whr } 82b973f2b91343554586da3c952c63c2369acd879whr } 83b973f2b91343554586da3c952c63c2369acd879whr} 84b973f2b91343554586da3c952c63c2369acd879whr 85b973f2b91343554586da3c952c63c2369acd879whr/*********************************************************************** 86b973f2b91343554586da3c952c63c2369acd879whr * 87b973f2b91343554586da3c952c63c2369acd879whr * return values: 88b973f2b91343554586da3c952c63c2369acd879whr * >= 0 : error at byte offset into the file, offset+buffer[0-(bsize-1)] 89b973f2b91343554586da3c952c63c2369acd879whr * < 0 : no error 90b973f2b91343554586da3c952c63c2369acd879whr ***********************************************************************/ 91b973f2b91343554586da3c952c63c2369acd879whrint 92b973f2b91343554586da3c952c63c2369acd879whrdatabinchk(mode, buffer, bsize, offset, errmsg) 93b973f2b91343554586da3c952c63c2369acd879whrint mode; /* either a, c, r, z, o, or C */ 94b973f2b91343554586da3c952c63c2369acd879whrunsigned char *buffer; /* buffer pointer */ 95b973f2b91343554586da3c952c63c2369acd879whrint bsize; /* size of buffer */ 96b973f2b91343554586da3c952c63c2369acd879whrint offset; /* offset into the file where buffer starts */ 97b973f2b91343554586da3c952c63c2369acd879whrchar **errmsg; 98b973f2b91343554586da3c952c63c2369acd879whr{ 99b973f2b91343554586da3c952c63c2369acd879whr int cnt; 100b973f2b91343554586da3c952c63c2369acd879whr unsigned char *chr; 101b973f2b91343554586da3c952c63c2369acd879whr int total; 102b973f2b91343554586da3c952c63c2369acd879whr long expbits; 103b973f2b91343554586da3c952c63c2369acd879whr long actbits; 104b973f2b91343554586da3c952c63c2369acd879whr 105b973f2b91343554586da3c952c63c2369acd879whr chr=buffer; 106b973f2b91343554586da3c952c63c2369acd879whr total=bsize; 107b973f2b91343554586da3c952c63c2369acd879whr 108b973f2b91343554586da3c952c63c2369acd879whr if ( errmsg != NULL ) { 109b973f2b91343554586da3c952c63c2369acd879whr *errmsg = Errmsg; 110b973f2b91343554586da3c952c63c2369acd879whr } 11145a8ba0302fa0632410b2f100f92701651dd7a0fvapier 112b973f2b91343554586da3c952c63c2369acd879whr switch (mode) 113b973f2b91343554586da3c952c63c2369acd879whr { 114b973f2b91343554586da3c952c63c2369acd879whr default: 115b973f2b91343554586da3c952c63c2369acd879whr case 'a': /* alternating bit pattern */ 116b973f2b91343554586da3c952c63c2369acd879whr expbits=0x55; 117b973f2b91343554586da3c952c63c2369acd879whr break; 118b973f2b91343554586da3c952c63c2369acd879whr 119b973f2b91343554586da3c952c63c2369acd879whr case 'c': /* checkerboard pattern */ 120b973f2b91343554586da3c952c63c2369acd879whr expbits=0xf0; 121b973f2b91343554586da3c952c63c2369acd879whr break; 122b973f2b91343554586da3c952c63c2369acd879whr 123b973f2b91343554586da3c952c63c2369acd879whr case 'C': /* counting pattern */ 124b973f2b91343554586da3c952c63c2369acd879whr for (cnt=0;cnt< bsize;cnt++) { 125b973f2b91343554586da3c952c63c2369acd879whr expbits = ((offset+cnt)%8 & 0177); 126b973f2b91343554586da3c952c63c2369acd879whr 127b973f2b91343554586da3c952c63c2369acd879whr if ( buffer[cnt] != expbits ) { 128b973f2b91343554586da3c952c63c2369acd879whr sprintf(Errmsg, 129b973f2b91343554586da3c952c63c2369acd879whr "data mismatch at offset %d, exp:%#lo, act:%#o", 130b973f2b91343554586da3c952c63c2369acd879whr offset+cnt, expbits, buffer[cnt]); 131b973f2b91343554586da3c952c63c2369acd879whr return offset+cnt; 132b973f2b91343554586da3c952c63c2369acd879whr } 133b973f2b91343554586da3c952c63c2369acd879whr } 134b973f2b91343554586da3c952c63c2369acd879whr sprintf(Errmsg, "all %d bytes match desired pattern", bsize); 135b973f2b91343554586da3c952c63c2369acd879whr return -1; 136b973f2b91343554586da3c952c63c2369acd879whr 137b973f2b91343554586da3c952c63c2369acd879whr case 'o': 138b973f2b91343554586da3c952c63c2369acd879whr expbits=0xff; 139b973f2b91343554586da3c952c63c2369acd879whr break; 140b973f2b91343554586da3c952c63c2369acd879whr 141b973f2b91343554586da3c952c63c2369acd879whr case 'z': 142b973f2b91343554586da3c952c63c2369acd879whr expbits=0; 143b973f2b91343554586da3c952c63c2369acd879whr break; 144b973f2b91343554586da3c952c63c2369acd879whr 145b973f2b91343554586da3c952c63c2369acd879whr case 'r': 146b973f2b91343554586da3c952c63c2369acd879whr return -1; /* no check can be done for random */ 147b973f2b91343554586da3c952c63c2369acd879whr } 148b973f2b91343554586da3c952c63c2369acd879whr 149b973f2b91343554586da3c952c63c2369acd879whr for (cnt=0; cnt<bsize; chr++, cnt++) { 150b973f2b91343554586da3c952c63c2369acd879whr actbits = (long)*chr; 151b973f2b91343554586da3c952c63c2369acd879whr 152b973f2b91343554586da3c952c63c2369acd879whr if ( actbits != expbits ) { 153b973f2b91343554586da3c952c63c2369acd879whr sprintf(Errmsg, "data mismatch at offset %d, exp:%#lo, act:%#lo", 154b973f2b91343554586da3c952c63c2369acd879whr offset+cnt, expbits, actbits); 155b973f2b91343554586da3c952c63c2369acd879whr return offset+cnt; 156b973f2b91343554586da3c952c63c2369acd879whr } 157b973f2b91343554586da3c952c63c2369acd879whr } 158b973f2b91343554586da3c952c63c2369acd879whr 159b973f2b91343554586da3c952c63c2369acd879whr sprintf(Errmsg, "all %d bytes match desired pattern", bsize); 160b973f2b91343554586da3c952c63c2369acd879whr return -1; /* all ok */ 161b973f2b91343554586da3c952c63c2369acd879whr} 162b973f2b91343554586da3c952c63c2369acd879whr 163b973f2b91343554586da3c952c63c2369acd879whr#if UNIT_TEST 164b973f2b91343554586da3c952c63c2369acd879whr 165b973f2b91343554586da3c952c63c2369acd879whr/*********************************************************************** 166b973f2b91343554586da3c952c63c2369acd879whr * main for doing unit testing 167b973f2b91343554586da3c952c63c2369acd879whr ***********************************************************************/ 168b973f2b91343554586da3c952c63c2369acd879whrint 169b973f2b91343554586da3c952c63c2369acd879whrmain(ac, ag) 170b973f2b91343554586da3c952c63c2369acd879whrint ac; 171b973f2b91343554586da3c952c63c2369acd879whrchar **ag; 172b973f2b91343554586da3c952c63c2369acd879whr{ 173b973f2b91343554586da3c952c63c2369acd879whr 174b973f2b91343554586da3c952c63c2369acd879whr int size=1023; 175b973f2b91343554586da3c952c63c2369acd879whr int offset; 176b973f2b91343554586da3c952c63c2369acd879whr int number; 177b973f2b91343554586da3c952c63c2369acd879whr unsigned char *buffer; 178b973f2b91343554586da3c952c63c2369acd879whr int ret; 179b973f2b91343554586da3c952c63c2369acd879whr char *errmsg; 180b973f2b91343554586da3c952c63c2369acd879whr 181b973f2b91343554586da3c952c63c2369acd879whr if ((buffer=(unsigned char *)malloc(size)) == NULL ) { 182b973f2b91343554586da3c952c63c2369acd879whr perror("malloc"); 183b973f2b91343554586da3c952c63c2369acd879whr exit(2); 184b973f2b91343554586da3c952c63c2369acd879whr } 185b973f2b91343554586da3c952c63c2369acd879whr 186b973f2b91343554586da3c952c63c2369acd879whr 187b973f2b91343554586da3c952c63c2369acd879whrprintf("***** for a ****************************\n"); 188b973f2b91343554586da3c952c63c2369acd879whr databingen('a', buffer, size, 0); 189b973f2b91343554586da3c952c63c2369acd879whr printf("databingen('a', buffer, %d, 0)\n", size); 190b973f2b91343554586da3c952c63c2369acd879whr 191b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('a', buffer, size, 0, &errmsg); 192b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('a', buffer, %d, 0, &errmsg) returned %d: %s\n", 193b973f2b91343554586da3c952c63c2369acd879whr size, ret, errmsg); 194b973f2b91343554586da3c952c63c2369acd879whr if ( ret == -1 ) 195b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of -1 as expected\n"); 196b973f2b91343554586da3c952c63c2369acd879whr else 197b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected -1\n", ret); 198b973f2b91343554586da3c952c63c2369acd879whr 199b973f2b91343554586da3c952c63c2369acd879whr offset=232400; 200b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('a', &buffer[1], size-1, offset, &errmsg); 201b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('a', &buffer[1], %d, %d, &errmsg) returned %d: %s\n", 202b973f2b91343554586da3c952c63c2369acd879whr size, offset, ret, errmsg); 203b973f2b91343554586da3c952c63c2369acd879whr if ( ret == -1 ) 204b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of -1 as expected\n"); 205b973f2b91343554586da3c952c63c2369acd879whr else 206b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected -1\n", ret); 207b973f2b91343554586da3c952c63c2369acd879whr 208b973f2b91343554586da3c952c63c2369acd879whr buffer[15]= 0x0; 209b973f2b91343554586da3c952c63c2369acd879whr printf("changing char 15 (offset (%d+15) = %d) to 0x0\n", offset, offset+15); 210b973f2b91343554586da3c952c63c2369acd879whr number=offset+15; 211b973f2b91343554586da3c952c63c2369acd879whr 212b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('a', &buffer[1], size-1, offset+1, &errmsg); 213b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('a', &buffer[1], %d, %d, &errmsg) returned %d: %s\n", 214b973f2b91343554586da3c952c63c2369acd879whr size-1, offset+1, ret, errmsg); 215b973f2b91343554586da3c952c63c2369acd879whr if ( ret == number ) 216b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of %d as expected\n", number); 217b973f2b91343554586da3c952c63c2369acd879whr else 218b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected %d\n", ret, number); 219b973f2b91343554586da3c952c63c2369acd879whr 220b973f2b91343554586da3c952c63c2369acd879whr 221b973f2b91343554586da3c952c63c2369acd879whr 222b973f2b91343554586da3c952c63c2369acd879whrprintf("***** for c ****************************\n"); 223b973f2b91343554586da3c952c63c2369acd879whr databingen('c', buffer, size, 0); 224b973f2b91343554586da3c952c63c2369acd879whr printf("databingen('c', buffer, %d, 0)\n", size); 225b973f2b91343554586da3c952c63c2369acd879whr 226b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('c', buffer, size, 0, &errmsg); 227b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('c', buffer, %d, 0, &errmsg) returned %d: %s\n", 228b973f2b91343554586da3c952c63c2369acd879whr size, ret, errmsg); 229b973f2b91343554586da3c952c63c2369acd879whr if ( ret == -1 ) 230b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of -1 as expected\n"); 231b973f2b91343554586da3c952c63c2369acd879whr else 232b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected -1\n", ret); 233b973f2b91343554586da3c952c63c2369acd879whr 234b973f2b91343554586da3c952c63c2369acd879whr offset=232400; 235b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('c', &buffer[1], size-1, offset, &errmsg); 236b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('c', &buffer[1], %d, %d, &errmsg) returned %d: %s\n", 237b973f2b91343554586da3c952c63c2369acd879whr size, offset, ret, errmsg); 238b973f2b91343554586da3c952c63c2369acd879whr if ( ret == -1 ) 239b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of -1 as expected\n"); 240b973f2b91343554586da3c952c63c2369acd879whr else 241b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected -1\n", ret); 242b973f2b91343554586da3c952c63c2369acd879whr 243b973f2b91343554586da3c952c63c2369acd879whr buffer[15]= 0x0; 244b973f2b91343554586da3c952c63c2369acd879whr printf("changing char 15 (offset (%d+15) = %d) to 0x0\n", offset, offset+15); 245b973f2b91343554586da3c952c63c2369acd879whr number=offset+15; 246b973f2b91343554586da3c952c63c2369acd879whr 247b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('c', &buffer[1], size-1, offset+1, &errmsg); 248b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('c', &buffer[1], %d, %d, &errmsg) returned %d: %s\n", 249b973f2b91343554586da3c952c63c2369acd879whr size-1, offset+1, ret, errmsg); 250b973f2b91343554586da3c952c63c2369acd879whr if ( ret == number ) 251b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of %d as expected\n", number); 252b973f2b91343554586da3c952c63c2369acd879whr else 253b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected %d\n", ret, number); 254b973f2b91343554586da3c952c63c2369acd879whr 255b973f2b91343554586da3c952c63c2369acd879whrprintf("***** for C ****************************\n"); 256b973f2b91343554586da3c952c63c2369acd879whr 257b973f2b91343554586da3c952c63c2369acd879whr databingen('C', buffer, size, 0); 258b973f2b91343554586da3c952c63c2369acd879whr printf("databingen('C', buffer, %d, 0)\n", size); 259b973f2b91343554586da3c952c63c2369acd879whr 260b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('C', buffer, size, 0, &errmsg); 261b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('C', buffer, %d, 0, &errmsg) returned %d: %s\n", 262b973f2b91343554586da3c952c63c2369acd879whr size, ret, errmsg); 263b973f2b91343554586da3c952c63c2369acd879whr if ( ret == -1 ) 264b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of -1 as expected\n"); 265b973f2b91343554586da3c952c63c2369acd879whr else 266b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected -1\n", ret); 267b973f2b91343554586da3c952c63c2369acd879whr 268b973f2b91343554586da3c952c63c2369acd879whr offset=18; 269b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('C', &buffer[18], size-18, 18, &errmsg); 270b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('C', &buffer[18], %d, 18, &errmsg) returned %d: %s\n", 271b973f2b91343554586da3c952c63c2369acd879whr size-18, ret, errmsg); 272b973f2b91343554586da3c952c63c2369acd879whr if ( ret == -1 ) 273b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of -1 as expected\n"); 274b973f2b91343554586da3c952c63c2369acd879whr else 275b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected -1\n", ret); 276b973f2b91343554586da3c952c63c2369acd879whr 277b973f2b91343554586da3c952c63c2369acd879whr buffer[20]= 0x0; 278b973f2b91343554586da3c952c63c2369acd879whr buffer[21]= 0x0; 279b973f2b91343554586da3c952c63c2369acd879whr printf("changing char 20 and 21 to 0x0 (offset %d and %d)\n", 20, 280b973f2b91343554586da3c952c63c2369acd879whr 21); 281b973f2b91343554586da3c952c63c2369acd879whr 282b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('C', &buffer[18], size-18, 18, &errmsg); 283b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('C', &buffer[18], %d, 18, &errmsg) returned %d: %s\n", 284b973f2b91343554586da3c952c63c2369acd879whr size-18, ret, errmsg); 285b973f2b91343554586da3c952c63c2369acd879whr 286b973f2b91343554586da3c952c63c2369acd879whr if ( ret == 20 || ret == 21 ) 287b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of %d or %d as expected\n", 288b973f2b91343554586da3c952c63c2369acd879whr 20, 21); 289b973f2b91343554586da3c952c63c2369acd879whr else 290b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected %d or %d\n", ret, 291b973f2b91343554586da3c952c63c2369acd879whr 20, 21 ); 292b973f2b91343554586da3c952c63c2369acd879whr 293b973f2b91343554586da3c952c63c2369acd879whr exit(0); 294b973f2b91343554586da3c952c63c2369acd879whr 295b973f2b91343554586da3c952c63c2369acd879whr} 296b973f2b91343554586da3c952c63c2369acd879whr 297b973f2b91343554586da3c952c63c2369acd879whr#endif 298b973f2b91343554586da3c952c63c2369acd879whr 299