1*49cdfc7eSAndroid Build Coastguard Worker /*
2*49cdfc7eSAndroid Build Coastguard Worker * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
3*49cdfc7eSAndroid Build Coastguard Worker *
4*49cdfc7eSAndroid Build Coastguard Worker * This program is free software; you can redistribute it and/or modify it
5*49cdfc7eSAndroid Build Coastguard Worker * under the terms of version 2 of the GNU General Public License as
6*49cdfc7eSAndroid Build Coastguard Worker * published by the Free Software Foundation.
7*49cdfc7eSAndroid Build Coastguard Worker *
8*49cdfc7eSAndroid Build Coastguard Worker * This program is distributed in the hope that it would be useful, but
9*49cdfc7eSAndroid Build Coastguard Worker * WITHOUT ANY WARRANTY; without even the implied warranty of
10*49cdfc7eSAndroid Build Coastguard Worker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11*49cdfc7eSAndroid Build Coastguard Worker *
12*49cdfc7eSAndroid Build Coastguard Worker * Further, this software is distributed without any warranty that it is
13*49cdfc7eSAndroid Build Coastguard Worker * free of the rightful claim of any third person regarding infringement
14*49cdfc7eSAndroid Build Coastguard Worker * or the like. Any license provided herein, whether implied or
15*49cdfc7eSAndroid Build Coastguard Worker * otherwise, applies only to this software file. Patent licenses, if
16*49cdfc7eSAndroid Build Coastguard Worker * any, provided herein do not apply to combinations of this program with
17*49cdfc7eSAndroid Build Coastguard Worker * other software, or any other product whatsoever.
18*49cdfc7eSAndroid Build Coastguard Worker *
19*49cdfc7eSAndroid Build Coastguard Worker * You should have received a copy of the GNU General Public License along
20*49cdfc7eSAndroid Build Coastguard Worker * with this program; if not, write the Free Software Foundation, Inc.,
21*49cdfc7eSAndroid Build Coastguard Worker * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22*49cdfc7eSAndroid Build Coastguard Worker *
23*49cdfc7eSAndroid Build Coastguard Worker * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
24*49cdfc7eSAndroid Build Coastguard Worker * Mountain View, CA 94043, or:
25*49cdfc7eSAndroid Build Coastguard Worker *
26*49cdfc7eSAndroid Build Coastguard Worker * http://www.sgi.com
27*49cdfc7eSAndroid Build Coastguard Worker *
28*49cdfc7eSAndroid Build Coastguard Worker * For further information regarding this notice, see:
29*49cdfc7eSAndroid Build Coastguard Worker *
30*49cdfc7eSAndroid Build Coastguard Worker * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
31*49cdfc7eSAndroid Build Coastguard Worker */
32*49cdfc7eSAndroid Build Coastguard Worker /************
33*49cdfc7eSAndroid Build Coastguard Worker
34*49cdfc7eSAndroid Build Coastguard Worker 64 bits in a Cray word
35*49cdfc7eSAndroid Build Coastguard Worker
36*49cdfc7eSAndroid Build Coastguard Worker 12345678901234567890123456789012
37*49cdfc7eSAndroid Build Coastguard Worker 1234567890123456789012345678901234567890123456789012345678901234
38*49cdfc7eSAndroid Build Coastguard Worker ________________________________________________________________
39*49cdfc7eSAndroid Build Coastguard Worker < pid >< word-offset in file (same #) >< pid >
40*49cdfc7eSAndroid Build Coastguard Worker
41*49cdfc7eSAndroid Build Coastguard Worker 1234567890123456789012345678901234567890123456789012345678901234
42*49cdfc7eSAndroid Build Coastguard Worker ________________________________________________________________
43*49cdfc7eSAndroid Build Coastguard Worker < pid >< offset in file of this word >< pid >
44*49cdfc7eSAndroid Build Coastguard Worker
45*49cdfc7eSAndroid Build Coastguard Worker 8 bits to a bytes == character
46*49cdfc7eSAndroid Build Coastguard Worker NBPW 8
47*49cdfc7eSAndroid Build Coastguard Worker ************/
48*49cdfc7eSAndroid Build Coastguard Worker
49*49cdfc7eSAndroid Build Coastguard Worker #include <stdio.h>
50*49cdfc7eSAndroid Build Coastguard Worker #include <sys/param.h>
51*49cdfc7eSAndroid Build Coastguard Worker #ifdef UNIT_TEST
52*49cdfc7eSAndroid Build Coastguard Worker #include <unistd.h>
53*49cdfc7eSAndroid Build Coastguard Worker #include <stdlib.h>
54*49cdfc7eSAndroid Build Coastguard Worker #endif
55*49cdfc7eSAndroid Build Coastguard Worker
56*49cdfc7eSAndroid Build Coastguard Worker static char Errmsg[80];
57*49cdfc7eSAndroid Build Coastguard Worker
58*49cdfc7eSAndroid Build Coastguard Worker #define LOWER16BITS(X) (X & 0177777)
59*49cdfc7eSAndroid Build Coastguard Worker #define LOWER32BITS(X) (X & 0xffffffff)
60*49cdfc7eSAndroid Build Coastguard Worker
61*49cdfc7eSAndroid Build Coastguard Worker /***
62*49cdfc7eSAndroid Build Coastguard Worker #define HIGHBITS(WRD, bits) ( (-1 << (64-bits)) & WRD)
63*49cdfc7eSAndroid Build Coastguard Worker #define LOWBITS(WRD, bits) ( (-1 >> (64-bits)) & WRD)
64*49cdfc7eSAndroid Build Coastguard Worker ****/
65*49cdfc7eSAndroid Build Coastguard Worker
66*49cdfc7eSAndroid Build Coastguard Worker #define NBPBYTE 8 /* number bits per byte */
67*49cdfc7eSAndroid Build Coastguard Worker
68*49cdfc7eSAndroid Build Coastguard Worker #ifndef DEBUG
69*49cdfc7eSAndroid Build Coastguard Worker #define DEBUG 0
70*49cdfc7eSAndroid Build Coastguard Worker #endif
71*49cdfc7eSAndroid Build Coastguard Worker
72*49cdfc7eSAndroid Build Coastguard Worker /***********************************************************************
73*49cdfc7eSAndroid Build Coastguard Worker *
74*49cdfc7eSAndroid Build Coastguard Worker *
75*49cdfc7eSAndroid Build Coastguard Worker * 1 2 3 4 5 6 7 8 9 10 11 12 13 14 14 15 bytes
76*49cdfc7eSAndroid Build Coastguard Worker * 1234567890123456789012345678901234567890123456789012345678901234 bits
77*49cdfc7eSAndroid Build Coastguard Worker * ________________________________________________________________ 1 word
78*49cdfc7eSAndroid Build Coastguard Worker * < pid >< offset in file of this word >< pid >
79*49cdfc7eSAndroid Build Coastguard Worker *
80*49cdfc7eSAndroid Build Coastguard Worker * the words are put together where offset zero is the start.
81*49cdfc7eSAndroid Build Coastguard Worker * thus, offset 16 is the start of the second full word
82*49cdfc7eSAndroid Build Coastguard Worker * Thus, offset 8 is in middle of word 1
83*49cdfc7eSAndroid Build Coastguard Worker ***********************************************************************/
datapidgen(int pid,char * buffer,int bsize,int offset)84*49cdfc7eSAndroid Build Coastguard Worker int datapidgen(int pid, char *buffer, int bsize, int offset)
85*49cdfc7eSAndroid Build Coastguard Worker {
86*49cdfc7eSAndroid Build Coastguard Worker #if CRAY
87*49cdfc7eSAndroid Build Coastguard Worker
88*49cdfc7eSAndroid Build Coastguard Worker int cnt;
89*49cdfc7eSAndroid Build Coastguard Worker int tmp;
90*49cdfc7eSAndroid Build Coastguard Worker char *chr;
91*49cdfc7eSAndroid Build Coastguard Worker long *wptr;
92*49cdfc7eSAndroid Build Coastguard Worker long word;
93*49cdfc7eSAndroid Build Coastguard Worker int woff; /* file offset for the word */
94*49cdfc7eSAndroid Build Coastguard Worker int boff; /* buffer offset or index */
95*49cdfc7eSAndroid Build Coastguard Worker int num_full_words;
96*49cdfc7eSAndroid Build Coastguard Worker
97*49cdfc7eSAndroid Build Coastguard Worker num_full_words = bsize / NBPW;
98*49cdfc7eSAndroid Build Coastguard Worker boff = 0;
99*49cdfc7eSAndroid Build Coastguard Worker
100*49cdfc7eSAndroid Build Coastguard Worker if (cnt = (offset % NBPW)) { /* partial word */
101*49cdfc7eSAndroid Build Coastguard Worker
102*49cdfc7eSAndroid Build Coastguard Worker woff = offset - cnt;
103*49cdfc7eSAndroid Build Coastguard Worker #if DEBUG
104*49cdfc7eSAndroid Build Coastguard Worker printf("partial at beginning, cnt = %d, woff = %d\n", cnt,
105*49cdfc7eSAndroid Build Coastguard Worker woff);
106*49cdfc7eSAndroid Build Coastguard Worker #endif
107*49cdfc7eSAndroid Build Coastguard Worker
108*49cdfc7eSAndroid Build Coastguard Worker word =
109*49cdfc7eSAndroid Build Coastguard Worker ((LOWER16BITS(pid) << 48) | (LOWER32BITS(woff) << 16) |
110*49cdfc7eSAndroid Build Coastguard Worker LOWER16BITS(pid));
111*49cdfc7eSAndroid Build Coastguard Worker
112*49cdfc7eSAndroid Build Coastguard Worker chr = (char *)&word;
113*49cdfc7eSAndroid Build Coastguard Worker
114*49cdfc7eSAndroid Build Coastguard Worker for (tmp = 0; tmp < cnt; tmp++) { /* skip unused bytes */
115*49cdfc7eSAndroid Build Coastguard Worker chr++;
116*49cdfc7eSAndroid Build Coastguard Worker }
117*49cdfc7eSAndroid Build Coastguard Worker
118*49cdfc7eSAndroid Build Coastguard Worker for (; boff < (NBPW - cnt) && boff < bsize; boff++, chr++) {
119*49cdfc7eSAndroid Build Coastguard Worker buffer[boff] = *chr;
120*49cdfc7eSAndroid Build Coastguard Worker }
121*49cdfc7eSAndroid Build Coastguard Worker }
122*49cdfc7eSAndroid Build Coastguard Worker
123*49cdfc7eSAndroid Build Coastguard Worker /*
124*49cdfc7eSAndroid Build Coastguard Worker * full words
125*49cdfc7eSAndroid Build Coastguard Worker */
126*49cdfc7eSAndroid Build Coastguard Worker
127*49cdfc7eSAndroid Build Coastguard Worker num_full_words = (bsize - boff) / NBPW;
128*49cdfc7eSAndroid Build Coastguard Worker
129*49cdfc7eSAndroid Build Coastguard Worker woff = offset + boff;
130*49cdfc7eSAndroid Build Coastguard Worker
131*49cdfc7eSAndroid Build Coastguard Worker for (cnt = 0; cnt < num_full_words; woff += NBPW, cnt++) {
132*49cdfc7eSAndroid Build Coastguard Worker
133*49cdfc7eSAndroid Build Coastguard Worker word =
134*49cdfc7eSAndroid Build Coastguard Worker ((LOWER16BITS(pid) << 48) | (LOWER32BITS(woff) << 16) |
135*49cdfc7eSAndroid Build Coastguard Worker LOWER16BITS(pid));
136*49cdfc7eSAndroid Build Coastguard Worker
137*49cdfc7eSAndroid Build Coastguard Worker chr = (char *)&word;
138*49cdfc7eSAndroid Build Coastguard Worker for (tmp = 0; tmp < NBPW; tmp++, chr++) {
139*49cdfc7eSAndroid Build Coastguard Worker buffer[boff++] = *chr;
140*49cdfc7eSAndroid Build Coastguard Worker }
141*49cdfc7eSAndroid Build Coastguard Worker /****** Only if wptr is a word ellined
142*49cdfc7eSAndroid Build Coastguard Worker wptr = (long *)&buffer[boff];
143*49cdfc7eSAndroid Build Coastguard Worker *wptr = word;
144*49cdfc7eSAndroid Build Coastguard Worker boff += NBPW;
145*49cdfc7eSAndroid Build Coastguard Worker *****/
146*49cdfc7eSAndroid Build Coastguard Worker
147*49cdfc7eSAndroid Build Coastguard Worker }
148*49cdfc7eSAndroid Build Coastguard Worker
149*49cdfc7eSAndroid Build Coastguard Worker /*
150*49cdfc7eSAndroid Build Coastguard Worker * partial word at end of buffer
151*49cdfc7eSAndroid Build Coastguard Worker */
152*49cdfc7eSAndroid Build Coastguard Worker
153*49cdfc7eSAndroid Build Coastguard Worker if (cnt = ((bsize - boff) % NBPW)) {
154*49cdfc7eSAndroid Build Coastguard Worker #if DEBUG
155*49cdfc7eSAndroid Build Coastguard Worker printf("partial at end\n");
156*49cdfc7eSAndroid Build Coastguard Worker #endif
157*49cdfc7eSAndroid Build Coastguard Worker word =
158*49cdfc7eSAndroid Build Coastguard Worker ((LOWER16BITS(pid) << 48) | (LOWER32BITS(woff) << 16) |
159*49cdfc7eSAndroid Build Coastguard Worker LOWER16BITS(pid));
160*49cdfc7eSAndroid Build Coastguard Worker
161*49cdfc7eSAndroid Build Coastguard Worker chr = (char *)&word;
162*49cdfc7eSAndroid Build Coastguard Worker
163*49cdfc7eSAndroid Build Coastguard Worker for (tmp = 0; tmp < cnt && boff < bsize; tmp++, chr++) {
164*49cdfc7eSAndroid Build Coastguard Worker buffer[boff++] = *chr;
165*49cdfc7eSAndroid Build Coastguard Worker }
166*49cdfc7eSAndroid Build Coastguard Worker }
167*49cdfc7eSAndroid Build Coastguard Worker
168*49cdfc7eSAndroid Build Coastguard Worker return bsize;
169*49cdfc7eSAndroid Build Coastguard Worker
170*49cdfc7eSAndroid Build Coastguard Worker #else
171*49cdfc7eSAndroid Build Coastguard Worker return -1; /* not support on non-64 bits word machines */
172*49cdfc7eSAndroid Build Coastguard Worker
173*49cdfc7eSAndroid Build Coastguard Worker #endif
174*49cdfc7eSAndroid Build Coastguard Worker
175*49cdfc7eSAndroid Build Coastguard Worker }
176*49cdfc7eSAndroid Build Coastguard Worker
177*49cdfc7eSAndroid Build Coastguard Worker /***********************************************************************
178*49cdfc7eSAndroid Build Coastguard Worker *
179*49cdfc7eSAndroid Build Coastguard Worker *
180*49cdfc7eSAndroid Build Coastguard Worker ***********************************************************************/
datapidchk(int pid,char * buffer,int bsize,int offset,char ** errmsg)181*49cdfc7eSAndroid Build Coastguard Worker int datapidchk(int pid, char *buffer, int bsize, int offset, char **errmsg)
182*49cdfc7eSAndroid Build Coastguard Worker {
183*49cdfc7eSAndroid Build Coastguard Worker #if CRAY
184*49cdfc7eSAndroid Build Coastguard Worker
185*49cdfc7eSAndroid Build Coastguard Worker int cnt;
186*49cdfc7eSAndroid Build Coastguard Worker int tmp;
187*49cdfc7eSAndroid Build Coastguard Worker char *chr;
188*49cdfc7eSAndroid Build Coastguard Worker long *wptr;
189*49cdfc7eSAndroid Build Coastguard Worker long word;
190*49cdfc7eSAndroid Build Coastguard Worker int woff; /* file offset for the word */
191*49cdfc7eSAndroid Build Coastguard Worker int boff; /* buffer offset or index */
192*49cdfc7eSAndroid Build Coastguard Worker int num_full_words;
193*49cdfc7eSAndroid Build Coastguard Worker
194*49cdfc7eSAndroid Build Coastguard Worker if (errmsg != NULL) {
195*49cdfc7eSAndroid Build Coastguard Worker *errmsg = Errmsg;
196*49cdfc7eSAndroid Build Coastguard Worker }
197*49cdfc7eSAndroid Build Coastguard Worker
198*49cdfc7eSAndroid Build Coastguard Worker num_full_words = bsize / NBPW;
199*49cdfc7eSAndroid Build Coastguard Worker boff = 0;
200*49cdfc7eSAndroid Build Coastguard Worker
201*49cdfc7eSAndroid Build Coastguard Worker if (cnt = (offset % NBPW)) { /* partial word */
202*49cdfc7eSAndroid Build Coastguard Worker woff = offset - cnt;
203*49cdfc7eSAndroid Build Coastguard Worker word =
204*49cdfc7eSAndroid Build Coastguard Worker ((LOWER16BITS(pid) << 48) | (LOWER32BITS(woff) << 16) |
205*49cdfc7eSAndroid Build Coastguard Worker LOWER16BITS(pid));
206*49cdfc7eSAndroid Build Coastguard Worker
207*49cdfc7eSAndroid Build Coastguard Worker chr = (char *)&word;
208*49cdfc7eSAndroid Build Coastguard Worker
209*49cdfc7eSAndroid Build Coastguard Worker for (tmp = 0; tmp < cnt; tmp++) { /* skip unused bytes */
210*49cdfc7eSAndroid Build Coastguard Worker chr++;
211*49cdfc7eSAndroid Build Coastguard Worker }
212*49cdfc7eSAndroid Build Coastguard Worker
213*49cdfc7eSAndroid Build Coastguard Worker for (; boff < (NBPW - cnt) && boff < bsize; boff++, chr++) {
214*49cdfc7eSAndroid Build Coastguard Worker if (buffer[boff] != *chr) {
215*49cdfc7eSAndroid Build Coastguard Worker sprintf(Errmsg,
216*49cdfc7eSAndroid Build Coastguard Worker "Data mismatch at offset %d, exp:%#o, act:%#o",
217*49cdfc7eSAndroid Build Coastguard Worker offset + boff, *chr, buffer[boff]);
218*49cdfc7eSAndroid Build Coastguard Worker return offset + boff;
219*49cdfc7eSAndroid Build Coastguard Worker }
220*49cdfc7eSAndroid Build Coastguard Worker }
221*49cdfc7eSAndroid Build Coastguard Worker }
222*49cdfc7eSAndroid Build Coastguard Worker
223*49cdfc7eSAndroid Build Coastguard Worker /*
224*49cdfc7eSAndroid Build Coastguard Worker * full words
225*49cdfc7eSAndroid Build Coastguard Worker */
226*49cdfc7eSAndroid Build Coastguard Worker
227*49cdfc7eSAndroid Build Coastguard Worker num_full_words = (bsize - boff) / NBPW;
228*49cdfc7eSAndroid Build Coastguard Worker
229*49cdfc7eSAndroid Build Coastguard Worker woff = offset + boff;
230*49cdfc7eSAndroid Build Coastguard Worker
231*49cdfc7eSAndroid Build Coastguard Worker for (cnt = 0; cnt < num_full_words; woff += NBPW, cnt++) {
232*49cdfc7eSAndroid Build Coastguard Worker word =
233*49cdfc7eSAndroid Build Coastguard Worker ((LOWER16BITS(pid) << 48) | (LOWER32BITS(woff) << 16) |
234*49cdfc7eSAndroid Build Coastguard Worker LOWER16BITS(pid));
235*49cdfc7eSAndroid Build Coastguard Worker
236*49cdfc7eSAndroid Build Coastguard Worker chr = (char *)&word;
237*49cdfc7eSAndroid Build Coastguard Worker for (tmp = 0; tmp < NBPW; tmp++, boff++, chr++) {
238*49cdfc7eSAndroid Build Coastguard Worker if (buffer[boff] != *chr) {
239*49cdfc7eSAndroid Build Coastguard Worker sprintf(Errmsg,
240*49cdfc7eSAndroid Build Coastguard Worker "Data mismatch at offset %d, exp:%#o, act:%#o",
241*49cdfc7eSAndroid Build Coastguard Worker woff, *chr, buffer[boff]);
242*49cdfc7eSAndroid Build Coastguard Worker return woff;
243*49cdfc7eSAndroid Build Coastguard Worker }
244*49cdfc7eSAndroid Build Coastguard Worker }
245*49cdfc7eSAndroid Build Coastguard Worker
246*49cdfc7eSAndroid Build Coastguard Worker /****** only if a word elined
247*49cdfc7eSAndroid Build Coastguard Worker wptr = (long *)&buffer[boff];
248*49cdfc7eSAndroid Build Coastguard Worker if (*wptr != word) {
249*49cdfc7eSAndroid Build Coastguard Worker sprintf(Errmsg, "Data mismatch at offset %d, exp:%#o, act:%#o",
250*49cdfc7eSAndroid Build Coastguard Worker woff, word, *wptr);
251*49cdfc7eSAndroid Build Coastguard Worker return woff;
252*49cdfc7eSAndroid Build Coastguard Worker }
253*49cdfc7eSAndroid Build Coastguard Worker boff += NBPW;
254*49cdfc7eSAndroid Build Coastguard Worker ******/
255*49cdfc7eSAndroid Build Coastguard Worker }
256*49cdfc7eSAndroid Build Coastguard Worker
257*49cdfc7eSAndroid Build Coastguard Worker /*
258*49cdfc7eSAndroid Build Coastguard Worker * partial word at end of buffer
259*49cdfc7eSAndroid Build Coastguard Worker */
260*49cdfc7eSAndroid Build Coastguard Worker
261*49cdfc7eSAndroid Build Coastguard Worker if (cnt = ((bsize - boff) % NBPW)) {
262*49cdfc7eSAndroid Build Coastguard Worker #if DEBUG
263*49cdfc7eSAndroid Build Coastguard Worker printf("partial at end\n");
264*49cdfc7eSAndroid Build Coastguard Worker #endif
265*49cdfc7eSAndroid Build Coastguard Worker word =
266*49cdfc7eSAndroid Build Coastguard Worker ((LOWER16BITS(pid) << 48) | (LOWER32BITS(woff) << 16) |
267*49cdfc7eSAndroid Build Coastguard Worker LOWER16BITS(pid));
268*49cdfc7eSAndroid Build Coastguard Worker
269*49cdfc7eSAndroid Build Coastguard Worker chr = (char *)&word;
270*49cdfc7eSAndroid Build Coastguard Worker
271*49cdfc7eSAndroid Build Coastguard Worker for (tmp = 0; tmp < cnt && boff < bsize; boff++, tmp++, chr++) {
272*49cdfc7eSAndroid Build Coastguard Worker if (buffer[boff] != *chr) {
273*49cdfc7eSAndroid Build Coastguard Worker sprintf(Errmsg,
274*49cdfc7eSAndroid Build Coastguard Worker "Data mismatch at offset %d, exp:%#o, act:%#o",
275*49cdfc7eSAndroid Build Coastguard Worker offset + boff, *chr, buffer[boff]);
276*49cdfc7eSAndroid Build Coastguard Worker return offset + boff;
277*49cdfc7eSAndroid Build Coastguard Worker }
278*49cdfc7eSAndroid Build Coastguard Worker }
279*49cdfc7eSAndroid Build Coastguard Worker }
280*49cdfc7eSAndroid Build Coastguard Worker
281*49cdfc7eSAndroid Build Coastguard Worker sprintf(Errmsg, "all %d bytes match desired pattern", bsize);
282*49cdfc7eSAndroid Build Coastguard Worker return -1; /* buffer is ok */
283*49cdfc7eSAndroid Build Coastguard Worker
284*49cdfc7eSAndroid Build Coastguard Worker #else
285*49cdfc7eSAndroid Build Coastguard Worker
286*49cdfc7eSAndroid Build Coastguard Worker if (errmsg != NULL) {
287*49cdfc7eSAndroid Build Coastguard Worker *errmsg = Errmsg;
288*49cdfc7eSAndroid Build Coastguard Worker }
289*49cdfc7eSAndroid Build Coastguard Worker sprintf(Errmsg, "Not supported on this OS.");
290*49cdfc7eSAndroid Build Coastguard Worker return 0;
291*49cdfc7eSAndroid Build Coastguard Worker
292*49cdfc7eSAndroid Build Coastguard Worker #endif
293*49cdfc7eSAndroid Build Coastguard Worker
294*49cdfc7eSAndroid Build Coastguard Worker } /* end of datapidchk */
295*49cdfc7eSAndroid Build Coastguard Worker
296*49cdfc7eSAndroid Build Coastguard Worker #if UNIT_TEST
297*49cdfc7eSAndroid Build Coastguard Worker
298*49cdfc7eSAndroid Build Coastguard Worker /***********************************************************************
299*49cdfc7eSAndroid Build Coastguard Worker * main for doing unit testing
300*49cdfc7eSAndroid Build Coastguard Worker ***********************************************************************/
main(ac,ag)301*49cdfc7eSAndroid Build Coastguard Worker int main(ac, ag)
302*49cdfc7eSAndroid Build Coastguard Worker int ac;
303*49cdfc7eSAndroid Build Coastguard Worker char **ag;
304*49cdfc7eSAndroid Build Coastguard Worker {
305*49cdfc7eSAndroid Build Coastguard Worker
306*49cdfc7eSAndroid Build Coastguard Worker int size = 1234;
307*49cdfc7eSAndroid Build Coastguard Worker char *buffer;
308*49cdfc7eSAndroid Build Coastguard Worker int ret;
309*49cdfc7eSAndroid Build Coastguard Worker char *errmsg;
310*49cdfc7eSAndroid Build Coastguard Worker
311*49cdfc7eSAndroid Build Coastguard Worker if ((buffer = (char *)malloc(size)) == NULL) {
312*49cdfc7eSAndroid Build Coastguard Worker perror("malloc");
313*49cdfc7eSAndroid Build Coastguard Worker exit(2);
314*49cdfc7eSAndroid Build Coastguard Worker }
315*49cdfc7eSAndroid Build Coastguard Worker
316*49cdfc7eSAndroid Build Coastguard Worker datapidgen(-1, buffer, size, 3);
317*49cdfc7eSAndroid Build Coastguard Worker
318*49cdfc7eSAndroid Build Coastguard Worker /***
319*49cdfc7eSAndroid Build Coastguard Worker fwrite(buffer, size, 1, stdout);
320*49cdfc7eSAndroid Build Coastguard Worker fwrite("\n", 1, 1, stdout);
321*49cdfc7eSAndroid Build Coastguard Worker ****/
322*49cdfc7eSAndroid Build Coastguard Worker
323*49cdfc7eSAndroid Build Coastguard Worker printf("datapidgen(-1, buffer, size, 3)\n");
324*49cdfc7eSAndroid Build Coastguard Worker
325*49cdfc7eSAndroid Build Coastguard Worker ret = datapidchk(-1, buffer, size, 3, &errmsg);
326*49cdfc7eSAndroid Build Coastguard Worker printf("datapidchk(-1, buffer, %d, 3, &errmsg) returned %d %s\n",
327*49cdfc7eSAndroid Build Coastguard Worker size, ret, errmsg);
328*49cdfc7eSAndroid Build Coastguard Worker ret = datapidchk(-1, &buffer[1], size - 1, 4, &errmsg);
329*49cdfc7eSAndroid Build Coastguard Worker printf("datapidchk(-1, &buffer[1], %d, 4, &errmsg) returned %d %s\n",
330*49cdfc7eSAndroid Build Coastguard Worker size - 1, ret, errmsg);
331*49cdfc7eSAndroid Build Coastguard Worker
332*49cdfc7eSAndroid Build Coastguard Worker buffer[25] = 0x0;
333*49cdfc7eSAndroid Build Coastguard Worker buffer[26] = 0x0;
334*49cdfc7eSAndroid Build Coastguard Worker buffer[27] = 0x0;
335*49cdfc7eSAndroid Build Coastguard Worker buffer[28] = 0x0;
336*49cdfc7eSAndroid Build Coastguard Worker printf("changing char 25-28\n");
337*49cdfc7eSAndroid Build Coastguard Worker
338*49cdfc7eSAndroid Build Coastguard Worker ret = datapidchk(-1, &buffer[1], size - 1, 4, &errmsg);
339*49cdfc7eSAndroid Build Coastguard Worker printf("datapidchk(-1, &buffer[1], %d, 4, &errmsg) returned %d %s\n",
340*49cdfc7eSAndroid Build Coastguard Worker size - 1, ret, errmsg);
341*49cdfc7eSAndroid Build Coastguard Worker
342*49cdfc7eSAndroid Build Coastguard Worker printf("------------------------------------------\n");
343*49cdfc7eSAndroid Build Coastguard Worker
344*49cdfc7eSAndroid Build Coastguard Worker datapidgen(getpid(), buffer, size, 5);
345*49cdfc7eSAndroid Build Coastguard Worker
346*49cdfc7eSAndroid Build Coastguard Worker /*******
347*49cdfc7eSAndroid Build Coastguard Worker fwrite(buffer, size, 1, stdout);
348*49cdfc7eSAndroid Build Coastguard Worker fwrite("\n", 1, 1, stdout);
349*49cdfc7eSAndroid Build Coastguard Worker ******/
350*49cdfc7eSAndroid Build Coastguard Worker
351*49cdfc7eSAndroid Build Coastguard Worker printf("\ndatapidgen(getpid(), buffer, size, 5)\n");
352*49cdfc7eSAndroid Build Coastguard Worker
353*49cdfc7eSAndroid Build Coastguard Worker ret = datapidchk(getpid(), buffer, size, 5, &errmsg);
354*49cdfc7eSAndroid Build Coastguard Worker printf("datapidchk(getpid(), buffer, %d, 5, &errmsg) returned %d %s\n",
355*49cdfc7eSAndroid Build Coastguard Worker size, ret, errmsg);
356*49cdfc7eSAndroid Build Coastguard Worker
357*49cdfc7eSAndroid Build Coastguard Worker ret = datapidchk(getpid(), &buffer[1], size - 1, 6, &errmsg);
358*49cdfc7eSAndroid Build Coastguard Worker printf
359*49cdfc7eSAndroid Build Coastguard Worker ("datapidchk(getpid(), &buffer[1], %d, 6, &errmsg) returned %d %s\n",
360*49cdfc7eSAndroid Build Coastguard Worker size - 1, ret, errmsg);
361*49cdfc7eSAndroid Build Coastguard Worker
362*49cdfc7eSAndroid Build Coastguard Worker buffer[25] = 0x0;
363*49cdfc7eSAndroid Build Coastguard Worker printf("changing char 25\n");
364*49cdfc7eSAndroid Build Coastguard Worker
365*49cdfc7eSAndroid Build Coastguard Worker ret = datapidchk(getpid(), &buffer[1], size - 1, 6, &errmsg);
366*49cdfc7eSAndroid Build Coastguard Worker printf
367*49cdfc7eSAndroid Build Coastguard Worker ("datapidchk(getpid(), &buffer[1], %d, 6, &errmsg) returned %d %s\n",
368*49cdfc7eSAndroid Build Coastguard Worker size - 1, ret, errmsg);
369*49cdfc7eSAndroid Build Coastguard Worker
370*49cdfc7eSAndroid Build Coastguard Worker exit(0);
371*49cdfc7eSAndroid Build Coastguard Worker }
372*49cdfc7eSAndroid Build Coastguard Worker
373*49cdfc7eSAndroid Build Coastguard Worker #endif
374