databin.c revision cc2e55555ae520d1851cd9198daa41845e1c7c82
1b973f2b91343554586da3c952c63c2369acd879whr/*
2b973f2b91343554586da3c952c63c2369acd879whr * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
3b973f2b91343554586da3c952c63c2369acd879whr *
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.
7b973f2b91343554586da3c952c63c2369acd879whr *
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.
11b973f2b91343554586da3c952c63c2369acd879whr *
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.
18b973f2b91343554586da3c952c63c2369acd879whr *
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.
22b973f2b91343554586da3c952c63c2369acd879whr *
23b973f2b91343554586da3c952c63c2369acd879whr * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
24b973f2b91343554586da3c952c63c2369acd879whr * Mountain View, CA  94043, or:
25b973f2b91343554586da3c952c63c2369acd879whr *
26b973f2b91343554586da3c952c63c2369acd879whr * http://www.sgi.com
27b973f2b91343554586da3c952c63c2369acd879whr *
28b973f2b91343554586da3c952c63c2369acd879whr * For further information regarding this notice, see:
29b973f2b91343554586da3c952c63c2369acd879whr *
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 */
47b973f2b91343554586da3c952c63c2369acd879whrunsigned char *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	}
111b973f2b91343554586da3c952c63c2369acd879whr
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