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> 34354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao#include <string.h> /* memset */ 35354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao#include <stdlib.h> /* rand */ 36cc2e55555ae520d1851cd9198daa41845e1c7c82alaffin#include "databin.h" 37b973f2b91343554586da3c952c63c2369acd879whr 38b973f2b91343554586da3c952c63c2369acd879whr#if UNIT_TEST 39d3bbf20f5d7102343bd25710ace10b91c95e2d53Garrett Cooper#include <stdlib.h> 40b973f2b91343554586da3c952c63c2369acd879whr#endif 41b973f2b91343554586da3c952c63c2369acd879whr 42b973f2b91343554586da3c952c63c2369acd879whrstatic char Errmsg[80]; 43b973f2b91343554586da3c952c63c2369acd879whr 44365a3c18f024b18b35e5c4548518b8196173835cWanlong Gaovoid databingen(int mode, char *buffer, int bsize, int offset) 45b973f2b91343554586da3c952c63c2369acd879whr{ 46354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int ind; 47354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 48354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao switch (mode) { 49354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao default: 50354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao case 'a': /* alternating bit pattern */ 51354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao memset(buffer, 0x55, bsize); 52354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao break; 53354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 54354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao case 'c': /* checkerboard pattern */ 55354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao memset(buffer, 0xf0, bsize); 56354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao break; 57354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 58354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao case 'C': /* */ 59365a3c18f024b18b35e5c4548518b8196173835cWanlong Gao for (ind = 0; ind < bsize; ind++) 60354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao buffer[ind] = ((offset + ind) % 8 & 0177); 61365a3c18f024b18b35e5c4548518b8196173835cWanlong Gao 62b973f2b91343554586da3c952c63c2369acd879whr break; 63b973f2b91343554586da3c952c63c2369acd879whr 64b973f2b91343554586da3c952c63c2369acd879whr case 'o': 65354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao memset(buffer, 0xff, bsize); 66b973f2b91343554586da3c952c63c2369acd879whr break; 67b973f2b91343554586da3c952c63c2369acd879whr 68b973f2b91343554586da3c952c63c2369acd879whr case 'z': 69354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao memset(buffer, 0x0, bsize); 70b973f2b91343554586da3c952c63c2369acd879whr break; 71b973f2b91343554586da3c952c63c2369acd879whr 72354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao case 'r': /* random */ 73365a3c18f024b18b35e5c4548518b8196173835cWanlong Gao for (ind = 0; ind < bsize; ind++) 74354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao buffer[ind] = (rand() & 0177) | 0100; 75354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 76b973f2b91343554586da3c952c63c2369acd879whr} 77b973f2b91343554586da3c952c63c2369acd879whr 78365a3c18f024b18b35e5c4548518b8196173835cWanlong Gao/* 79b973f2b91343554586da3c952c63c2369acd879whr * return values: 80b973f2b91343554586da3c952c63c2369acd879whr * >= 0 : error at byte offset into the file, offset+buffer[0-(bsize-1)] 81b973f2b91343554586da3c952c63c2369acd879whr * < 0 : no error 82365a3c18f024b18b35e5c4548518b8196173835cWanlong Gao */ 83365a3c18f024b18b35e5c4548518b8196173835cWanlong Gaoint databinchk(int mode, char *buffer, int bsize, int offset, char **errmsg) 84b973f2b91343554586da3c952c63c2369acd879whr{ 85354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int cnt; 86354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao unsigned char *chr; 87354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao long expbits; 88354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao long actbits; 89b973f2b91343554586da3c952c63c2369acd879whr 90354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao chr = (unsigned char *)buffer; 91b973f2b91343554586da3c952c63c2369acd879whr 92365a3c18f024b18b35e5c4548518b8196173835cWanlong Gao if (errmsg != NULL) 93354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao *errmsg = Errmsg; 9445a8ba0302fa0632410b2f100f92701651dd7a0fvapier 95354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao switch (mode) { 96354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao default: 97354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao case 'a': /* alternating bit pattern */ 98354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao expbits = 0x55; 99354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao break; 100b973f2b91343554586da3c952c63c2369acd879whr 101354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao case 'c': /* checkerboard pattern */ 102354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao expbits = 0xf0; 103354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao break; 104b973f2b91343554586da3c952c63c2369acd879whr 105354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao case 'C': /* counting pattern */ 106354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (cnt = 0; cnt < bsize; cnt++) { 107354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao expbits = ((offset + cnt) % 8 & 0177); 108b973f2b91343554586da3c952c63c2369acd879whr 109354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (buffer[cnt] != expbits) { 110354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao sprintf(Errmsg, 111354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "data mismatch at offset %d, exp:%#lo, act:%#o", 112354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao offset + cnt, expbits, buffer[cnt]); 113354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao return offset + cnt; 114354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 115b973f2b91343554586da3c952c63c2369acd879whr } 116b973f2b91343554586da3c952c63c2369acd879whr sprintf(Errmsg, "all %d bytes match desired pattern", bsize); 117b973f2b91343554586da3c952c63c2369acd879whr return -1; 118b973f2b91343554586da3c952c63c2369acd879whr 119b973f2b91343554586da3c952c63c2369acd879whr case 'o': 120354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao expbits = 0xff; 121b973f2b91343554586da3c952c63c2369acd879whr break; 122b973f2b91343554586da3c952c63c2369acd879whr 123b973f2b91343554586da3c952c63c2369acd879whr case 'z': 124354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao expbits = 0; 125b973f2b91343554586da3c952c63c2369acd879whr break; 126b973f2b91343554586da3c952c63c2369acd879whr 127354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao case 'r': 128b973f2b91343554586da3c952c63c2369acd879whr return -1; /* no check can be done for random */ 129354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 130b973f2b91343554586da3c952c63c2369acd879whr 131354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (cnt = 0; cnt < bsize; chr++, cnt++) { 132354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao actbits = (long)*chr; 133b973f2b91343554586da3c952c63c2369acd879whr 134354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (actbits != expbits) { 135354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao sprintf(Errmsg, 136354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "data mismatch at offset %d, exp:%#lo, act:%#lo", 137354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao offset + cnt, expbits, actbits); 138354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao return offset + cnt; 139354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 140b973f2b91343554586da3c952c63c2369acd879whr } 141b973f2b91343554586da3c952c63c2369acd879whr 142b973f2b91343554586da3c952c63c2369acd879whr sprintf(Errmsg, "all %d bytes match desired pattern", bsize); 143365a3c18f024b18b35e5c4548518b8196173835cWanlong Gao return -1; 144b973f2b91343554586da3c952c63c2369acd879whr} 145b973f2b91343554586da3c952c63c2369acd879whr 146b973f2b91343554586da3c952c63c2369acd879whr#if UNIT_TEST 147b973f2b91343554586da3c952c63c2369acd879whr 148365a3c18f024b18b35e5c4548518b8196173835cWanlong Gaoint main(int ac, char **ag) 149b973f2b91343554586da3c952c63c2369acd879whr{ 150354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int size = 1023; 151354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int offset; 152354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int number; 153354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao unsigned char *buffer; 154354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int ret; 155354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao char *errmsg; 156354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 157365a3c18f024b18b35e5c4548518b8196173835cWanlong Gao buffer = malloc(size); 158365a3c18f024b18b35e5c4548518b8196173835cWanlong Gao if (buffer == NULL) { 159354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao perror("malloc"); 160354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao exit(2); 161354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 162354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 163354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("***** for a ****************************\n"); 164354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao databingen('a', buffer, size, 0); 165354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("databingen('a', buffer, %d, 0)\n", size); 166354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 167354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = databinchk('a', buffer, size, 0, &errmsg); 168354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("databinchk('a', buffer, %d, 0, &errmsg) returned %d: %s\n", 169354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao size, ret, errmsg); 170354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (ret == -1) 171354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tPASS return value of -1 as expected\n"); 172354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao else 173354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tFAIL return value %d, expected -1\n", ret); 174354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 175354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao offset = 232400; 176354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = databinchk('a', &buffer[1], size - 1, offset, &errmsg); 177354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("databinchk('a', &buffer[1], %d, %d, &errmsg) returned %d: %s\n", 178354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao size, offset, ret, errmsg); 179354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (ret == -1) 180354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tPASS return value of -1 as expected\n"); 181354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao else 182354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tFAIL return value %d, expected -1\n", ret); 183354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 184354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao buffer[15] = 0x0; 185354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("changing char 15 (offset (%d+15) = %d) to 0x0\n", offset, 186354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao offset + 15); 187354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao number = offset + 15; 188354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 189354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = databinchk('a', &buffer[1], size - 1, offset + 1, &errmsg); 190354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("databinchk('a', &buffer[1], %d, %d, &errmsg) returned %d: %s\n", 191354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao size - 1, offset + 1, ret, errmsg); 192354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (ret == number) 193354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tPASS return value of %d as expected\n", number); 194354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao else 195354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tFAIL return value %d, expected %d\n", ret, number); 196354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 197354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("***** for c ****************************\n"); 198354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao databingen('c', buffer, size, 0); 199354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("databingen('c', buffer, %d, 0)\n", size); 200354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 201354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = databinchk('c', buffer, size, 0, &errmsg); 202354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("databinchk('c', buffer, %d, 0, &errmsg) returned %d: %s\n", 203354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao size, ret, errmsg); 204354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (ret == -1) 205354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tPASS return value of -1 as expected\n"); 206354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao else 207354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tFAIL return value %d, expected -1\n", ret); 208354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 209354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao offset = 232400; 210354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = databinchk('c', &buffer[1], size - 1, offset, &errmsg); 211354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("databinchk('c', &buffer[1], %d, %d, &errmsg) returned %d: %s\n", 212354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao size, offset, ret, errmsg); 213354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (ret == -1) 214354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tPASS return value of -1 as expected\n"); 215354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao else 216354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tFAIL return value %d, expected -1\n", ret); 217354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 218354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao buffer[15] = 0x0; 219354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("changing char 15 (offset (%d+15) = %d) to 0x0\n", offset, 220354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao offset + 15); 221354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao number = offset + 15; 222354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 223354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = databinchk('c', &buffer[1], size - 1, offset + 1, &errmsg); 224354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("databinchk('c', &buffer[1], %d, %d, &errmsg) returned %d: %s\n", 225354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao size - 1, offset + 1, ret, errmsg); 226354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (ret == number) 227354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tPASS return value of %d as expected\n", number); 228354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao else 229354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tFAIL return value %d, expected %d\n", ret, number); 230354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 231354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("***** for C ****************************\n"); 232354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 233354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao databingen('C', buffer, size, 0); 234354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("databingen('C', buffer, %d, 0)\n", size); 235354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 236354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = databinchk('C', buffer, size, 0, &errmsg); 237354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("databinchk('C', buffer, %d, 0, &errmsg) returned %d: %s\n", 238354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao size, ret, errmsg); 239354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (ret == -1) 240354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tPASS return value of -1 as expected\n"); 241354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao else 242354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tFAIL return value %d, expected -1\n", ret); 243354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 244354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao offset = 18; 245354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = databinchk('C', &buffer[18], size - 18, 18, &errmsg); 246354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf 247354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ("databinchk('C', &buffer[18], %d, 18, &errmsg) returned %d: %s\n", 248354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao size - 18, ret, errmsg); 249354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (ret == -1) 250354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tPASS return value of -1 as expected\n"); 251354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao else 252354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tFAIL return value %d, expected -1\n", ret); 253354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 254354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao buffer[20] = 0x0; 255354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao buffer[21] = 0x0; 256354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("changing char 20 and 21 to 0x0 (offset %d and %d)\n", 20, 21); 257354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 258354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ret = databinchk('C', &buffer[18], size - 18, 18, &errmsg); 259365a3c18f024b18b35e5c4548518b8196173835cWanlong Gao printf("databinchk('C', &buffer[18], %d, 18, &errmsg) returned %d: %s\n", 260365a3c18f024b18b35e5c4548518b8196173835cWanlong Gao size - 18, ret, errmsg); 261354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 262354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (ret == 20 || ret == 21) 263354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tPASS return value of %d or %d as expected\n", 20, 21); 264354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao else 265354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao printf("\tFAIL return value %d, expected %d or %d\n", ret, 266354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 20, 21); 267354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 268354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao exit(0); 269b973f2b91343554586da3c952c63c2369acd879whr 270b973f2b91343554586da3c952c63c2369acd879whr} 271b973f2b91343554586da3c952c63c2369acd879whr 272b973f2b91343554586da3c952c63c2369acd879whr#endif 273