databin.c revision fed9641096e27f79a0f2d9adfe9839dd8d11dc0f
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 20fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao * with this program; if not, write the Free Software Foundation, Inc., 21fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 */ 9486d0dba306b3314f7c39455f8643d638534aef35Alex Elderchar *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 long expbits; 102b973f2b91343554586da3c952c63c2369acd879whr long actbits; 103b973f2b91343554586da3c952c63c2369acd879whr 10486d0dba306b3314f7c39455f8643d638534aef35Alex Elder chr = (unsigned char *) buffer; 105b973f2b91343554586da3c952c63c2369acd879whr 106903910df985927e941076692964ab88d691c8ccbGarrett Cooper if (errmsg != NULL) { 107b973f2b91343554586da3c952c63c2369acd879whr *errmsg = Errmsg; 108b973f2b91343554586da3c952c63c2369acd879whr } 10945a8ba0302fa0632410b2f100f92701651dd7a0fvapier 110b973f2b91343554586da3c952c63c2369acd879whr switch (mode) 111b973f2b91343554586da3c952c63c2369acd879whr { 112b973f2b91343554586da3c952c63c2369acd879whr default: 113b973f2b91343554586da3c952c63c2369acd879whr case 'a': /* alternating bit pattern */ 114b973f2b91343554586da3c952c63c2369acd879whr expbits=0x55; 115b973f2b91343554586da3c952c63c2369acd879whr break; 116b973f2b91343554586da3c952c63c2369acd879whr 117b973f2b91343554586da3c952c63c2369acd879whr case 'c': /* checkerboard pattern */ 118b973f2b91343554586da3c952c63c2369acd879whr expbits=0xf0; 119b973f2b91343554586da3c952c63c2369acd879whr break; 120b973f2b91343554586da3c952c63c2369acd879whr 121b973f2b91343554586da3c952c63c2369acd879whr case 'C': /* counting pattern */ 122b973f2b91343554586da3c952c63c2369acd879whr for (cnt=0;cnt< bsize;cnt++) { 123b973f2b91343554586da3c952c63c2369acd879whr expbits = ((offset+cnt)%8 & 0177); 124b973f2b91343554586da3c952c63c2369acd879whr 125903910df985927e941076692964ab88d691c8ccbGarrett Cooper if (buffer[cnt] != expbits) { 126b973f2b91343554586da3c952c63c2369acd879whr sprintf(Errmsg, 127b973f2b91343554586da3c952c63c2369acd879whr "data mismatch at offset %d, exp:%#lo, act:%#o", 128b973f2b91343554586da3c952c63c2369acd879whr offset+cnt, expbits, buffer[cnt]); 129b973f2b91343554586da3c952c63c2369acd879whr return offset+cnt; 130b973f2b91343554586da3c952c63c2369acd879whr } 131b973f2b91343554586da3c952c63c2369acd879whr } 132b973f2b91343554586da3c952c63c2369acd879whr sprintf(Errmsg, "all %d bytes match desired pattern", bsize); 133b973f2b91343554586da3c952c63c2369acd879whr return -1; 134b973f2b91343554586da3c952c63c2369acd879whr 135b973f2b91343554586da3c952c63c2369acd879whr case 'o': 136b973f2b91343554586da3c952c63c2369acd879whr expbits=0xff; 137b973f2b91343554586da3c952c63c2369acd879whr break; 138b973f2b91343554586da3c952c63c2369acd879whr 139b973f2b91343554586da3c952c63c2369acd879whr case 'z': 140b973f2b91343554586da3c952c63c2369acd879whr expbits=0; 141b973f2b91343554586da3c952c63c2369acd879whr break; 142b973f2b91343554586da3c952c63c2369acd879whr 143b973f2b91343554586da3c952c63c2369acd879whr case 'r': 144b973f2b91343554586da3c952c63c2369acd879whr return -1; /* no check can be done for random */ 145b973f2b91343554586da3c952c63c2369acd879whr } 146b973f2b91343554586da3c952c63c2369acd879whr 147b973f2b91343554586da3c952c63c2369acd879whr for (cnt=0; cnt<bsize; chr++, cnt++) { 148b973f2b91343554586da3c952c63c2369acd879whr actbits = (long)*chr; 149b973f2b91343554586da3c952c63c2369acd879whr 150903910df985927e941076692964ab88d691c8ccbGarrett Cooper if (actbits != expbits) { 151b973f2b91343554586da3c952c63c2369acd879whr sprintf(Errmsg, "data mismatch at offset %d, exp:%#lo, act:%#lo", 152b973f2b91343554586da3c952c63c2369acd879whr offset+cnt, expbits, actbits); 153b973f2b91343554586da3c952c63c2369acd879whr return offset+cnt; 154b973f2b91343554586da3c952c63c2369acd879whr } 155b973f2b91343554586da3c952c63c2369acd879whr } 156b973f2b91343554586da3c952c63c2369acd879whr 157b973f2b91343554586da3c952c63c2369acd879whr sprintf(Errmsg, "all %d bytes match desired pattern", bsize); 158b973f2b91343554586da3c952c63c2369acd879whr return -1; /* all ok */ 159b973f2b91343554586da3c952c63c2369acd879whr} 160b973f2b91343554586da3c952c63c2369acd879whr 161b973f2b91343554586da3c952c63c2369acd879whr#if UNIT_TEST 162b973f2b91343554586da3c952c63c2369acd879whr 163b973f2b91343554586da3c952c63c2369acd879whr/*********************************************************************** 164b973f2b91343554586da3c952c63c2369acd879whr * main for doing unit testing 165b973f2b91343554586da3c952c63c2369acd879whr ***********************************************************************/ 166b973f2b91343554586da3c952c63c2369acd879whrint 167b973f2b91343554586da3c952c63c2369acd879whrmain(ac, ag) 168b973f2b91343554586da3c952c63c2369acd879whrint ac; 169b973f2b91343554586da3c952c63c2369acd879whrchar **ag; 170b973f2b91343554586da3c952c63c2369acd879whr{ 171b973f2b91343554586da3c952c63c2369acd879whr 172b973f2b91343554586da3c952c63c2369acd879whr int size=1023; 173b973f2b91343554586da3c952c63c2369acd879whr int offset; 174b973f2b91343554586da3c952c63c2369acd879whr int number; 175b973f2b91343554586da3c952c63c2369acd879whr unsigned char *buffer; 176b973f2b91343554586da3c952c63c2369acd879whr int ret; 177b973f2b91343554586da3c952c63c2369acd879whr char *errmsg; 178b973f2b91343554586da3c952c63c2369acd879whr 179903910df985927e941076692964ab88d691c8ccbGarrett Cooper if ((buffer=(unsigned char *)malloc(size)) == NULL) { 180b973f2b91343554586da3c952c63c2369acd879whr perror("malloc"); 181b973f2b91343554586da3c952c63c2369acd879whr exit(2); 182b973f2b91343554586da3c952c63c2369acd879whr } 183b973f2b91343554586da3c952c63c2369acd879whr 184b973f2b91343554586da3c952c63c2369acd879whr 185b973f2b91343554586da3c952c63c2369acd879whrprintf("***** for a ****************************\n"); 186b973f2b91343554586da3c952c63c2369acd879whr databingen('a', buffer, size, 0); 187b973f2b91343554586da3c952c63c2369acd879whr printf("databingen('a', buffer, %d, 0)\n", size); 188b973f2b91343554586da3c952c63c2369acd879whr 189b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('a', buffer, size, 0, &errmsg); 190b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('a', buffer, %d, 0, &errmsg) returned %d: %s\n", 191b973f2b91343554586da3c952c63c2369acd879whr size, ret, errmsg); 192903910df985927e941076692964ab88d691c8ccbGarrett Cooper if (ret == -1) 193b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of -1 as expected\n"); 194b973f2b91343554586da3c952c63c2369acd879whr else 195b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected -1\n", ret); 196b973f2b91343554586da3c952c63c2369acd879whr 197b973f2b91343554586da3c952c63c2369acd879whr offset=232400; 198b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('a', &buffer[1], size-1, offset, &errmsg); 199b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('a', &buffer[1], %d, %d, &errmsg) returned %d: %s\n", 200b973f2b91343554586da3c952c63c2369acd879whr size, offset, ret, errmsg); 201903910df985927e941076692964ab88d691c8ccbGarrett Cooper if (ret == -1) 202b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of -1 as expected\n"); 203b973f2b91343554586da3c952c63c2369acd879whr else 204b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected -1\n", ret); 205b973f2b91343554586da3c952c63c2369acd879whr 206b973f2b91343554586da3c952c63c2369acd879whr buffer[15]= 0x0; 207b973f2b91343554586da3c952c63c2369acd879whr printf("changing char 15 (offset (%d+15) = %d) to 0x0\n", offset, offset+15); 208b973f2b91343554586da3c952c63c2369acd879whr number=offset+15; 209b973f2b91343554586da3c952c63c2369acd879whr 210b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('a', &buffer[1], size-1, offset+1, &errmsg); 211b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('a', &buffer[1], %d, %d, &errmsg) returned %d: %s\n", 212b973f2b91343554586da3c952c63c2369acd879whr size-1, offset+1, ret, errmsg); 213903910df985927e941076692964ab88d691c8ccbGarrett Cooper if (ret == number) 214b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of %d as expected\n", number); 215b973f2b91343554586da3c952c63c2369acd879whr else 216b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected %d\n", ret, number); 217b973f2b91343554586da3c952c63c2369acd879whr 218b973f2b91343554586da3c952c63c2369acd879whr 219b973f2b91343554586da3c952c63c2369acd879whr 220b973f2b91343554586da3c952c63c2369acd879whrprintf("***** for c ****************************\n"); 221b973f2b91343554586da3c952c63c2369acd879whr databingen('c', buffer, size, 0); 222b973f2b91343554586da3c952c63c2369acd879whr printf("databingen('c', buffer, %d, 0)\n", size); 223b973f2b91343554586da3c952c63c2369acd879whr 224b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('c', buffer, size, 0, &errmsg); 225b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('c', buffer, %d, 0, &errmsg) returned %d: %s\n", 226b973f2b91343554586da3c952c63c2369acd879whr size, ret, errmsg); 227903910df985927e941076692964ab88d691c8ccbGarrett Cooper if (ret == -1) 228b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of -1 as expected\n"); 229b973f2b91343554586da3c952c63c2369acd879whr else 230b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected -1\n", ret); 231b973f2b91343554586da3c952c63c2369acd879whr 232b973f2b91343554586da3c952c63c2369acd879whr offset=232400; 233b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('c', &buffer[1], size-1, offset, &errmsg); 234b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('c', &buffer[1], %d, %d, &errmsg) returned %d: %s\n", 235b973f2b91343554586da3c952c63c2369acd879whr size, offset, ret, errmsg); 236903910df985927e941076692964ab88d691c8ccbGarrett Cooper if (ret == -1) 237b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of -1 as expected\n"); 238b973f2b91343554586da3c952c63c2369acd879whr else 239b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected -1\n", ret); 240b973f2b91343554586da3c952c63c2369acd879whr 241b973f2b91343554586da3c952c63c2369acd879whr buffer[15]= 0x0; 242b973f2b91343554586da3c952c63c2369acd879whr printf("changing char 15 (offset (%d+15) = %d) to 0x0\n", offset, offset+15); 243b973f2b91343554586da3c952c63c2369acd879whr number=offset+15; 244b973f2b91343554586da3c952c63c2369acd879whr 245b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('c', &buffer[1], size-1, offset+1, &errmsg); 246b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('c', &buffer[1], %d, %d, &errmsg) returned %d: %s\n", 247b973f2b91343554586da3c952c63c2369acd879whr size-1, offset+1, ret, errmsg); 248903910df985927e941076692964ab88d691c8ccbGarrett Cooper if (ret == number) 249b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of %d as expected\n", number); 250b973f2b91343554586da3c952c63c2369acd879whr else 251b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected %d\n", ret, number); 252b973f2b91343554586da3c952c63c2369acd879whr 253b973f2b91343554586da3c952c63c2369acd879whrprintf("***** for C ****************************\n"); 254b973f2b91343554586da3c952c63c2369acd879whr 255b973f2b91343554586da3c952c63c2369acd879whr databingen('C', buffer, size, 0); 256b973f2b91343554586da3c952c63c2369acd879whr printf("databingen('C', buffer, %d, 0)\n", size); 257b973f2b91343554586da3c952c63c2369acd879whr 258b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('C', buffer, size, 0, &errmsg); 259b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('C', buffer, %d, 0, &errmsg) returned %d: %s\n", 260b973f2b91343554586da3c952c63c2369acd879whr size, ret, errmsg); 261903910df985927e941076692964ab88d691c8ccbGarrett Cooper if (ret == -1) 262b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of -1 as expected\n"); 263b973f2b91343554586da3c952c63c2369acd879whr else 264b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected -1\n", ret); 265b973f2b91343554586da3c952c63c2369acd879whr 266b973f2b91343554586da3c952c63c2369acd879whr offset=18; 267b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('C', &buffer[18], size-18, 18, &errmsg); 268b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('C', &buffer[18], %d, 18, &errmsg) returned %d: %s\n", 269b973f2b91343554586da3c952c63c2369acd879whr size-18, ret, errmsg); 270903910df985927e941076692964ab88d691c8ccbGarrett Cooper if (ret == -1) 271b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of -1 as expected\n"); 272b973f2b91343554586da3c952c63c2369acd879whr else 273b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected -1\n", ret); 274b973f2b91343554586da3c952c63c2369acd879whr 275b973f2b91343554586da3c952c63c2369acd879whr buffer[20]= 0x0; 276b973f2b91343554586da3c952c63c2369acd879whr buffer[21]= 0x0; 277b973f2b91343554586da3c952c63c2369acd879whr printf("changing char 20 and 21 to 0x0 (offset %d and %d)\n", 20, 278b973f2b91343554586da3c952c63c2369acd879whr 21); 279b973f2b91343554586da3c952c63c2369acd879whr 280b973f2b91343554586da3c952c63c2369acd879whr ret=databinchk('C', &buffer[18], size-18, 18, &errmsg); 281b973f2b91343554586da3c952c63c2369acd879whr printf("databinchk('C', &buffer[18], %d, 18, &errmsg) returned %d: %s\n", 282b973f2b91343554586da3c952c63c2369acd879whr size-18, ret, errmsg); 283b973f2b91343554586da3c952c63c2369acd879whr 284903910df985927e941076692964ab88d691c8ccbGarrett Cooper if (ret == 20 || ret == 21) 285b973f2b91343554586da3c952c63c2369acd879whr printf("\tPASS return value of %d or %d as expected\n", 286b973f2b91343554586da3c952c63c2369acd879whr 20, 21); 287b973f2b91343554586da3c952c63c2369acd879whr else 288b973f2b91343554586da3c952c63c2369acd879whr printf("\tFAIL return value %d, expected %d or %d\n", ret, 289b973f2b91343554586da3c952c63c2369acd879whr 20, 21 ); 290b973f2b91343554586da3c952c63c2369acd879whr 291b973f2b91343554586da3c952c63c2369acd879whr exit(0); 292b973f2b91343554586da3c952c63c2369acd879whr 293b973f2b91343554586da3c952c63c2369acd879whr} 294b973f2b91343554586da3c952c63c2369acd879whr 295b973f2b91343554586da3c952c63c2369acd879whr#endif 296