• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of version 2 of the GNU General Public License as
6  * published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it would be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  *
12  * Further, this software is distributed without any warranty that it is
13  * free of the rightful claim of any third person regarding infringement
14  * or the like.  Any license provided herein, whether implied or
15  * otherwise, applies only to this software file.  Patent licenses, if
16  * any, provided herein do not apply to combinations of this program with
17  * other software, or any other product whatsoever.
18  *
19  * You should have received a copy of the GNU General Public License along
20  * with this program; if not, write the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22  *
23  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
24  * Mountain View, CA  94043, or:
25  *
26  * http://www.sgi.com
27  *
28  * For further information regarding this notice, see:
29  *
30  * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
31  */
32 #include <stdio.h>
33 #include <string.h>
34 #include "dataascii.h"
35 
36 #define CHARS		"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghjiklmnopqrstuvwxyz\n"
37 #define CHARS_SIZE	sizeof(CHARS)
38 
39 #ifdef UNIT_TEST
40 #include <stdlib.h>
41 #endif
42 
43 static char Errmsg[80];
44 
dataasciigen(char * listofchars,char * buffer,int bsize,int offset)45 int dataasciigen(char *listofchars, char *buffer, int bsize, int offset)
46 {
47 	int cnt;
48 	int total;
49 	int ind;
50 	char *chr;
51 	int chars_size;
52 	char *charlist;
53 
54 	chr = buffer;
55 	total = offset + bsize;
56 
57 	if (listofchars == NULL) {
58 		charlist = CHARS;
59 		chars_size = CHARS_SIZE;
60 	} else {
61 		charlist = listofchars;
62 		chars_size = strlen(listofchars);
63 	}
64 
65 	for (cnt = offset; cnt < total; cnt++) {
66 		ind = cnt % chars_size;
67 		*chr++ = charlist[ind];
68 	}
69 
70 	return bsize;
71 }
72 
dataasciichk(char * listofchars,char * buffer,int bsize,int offset,char ** errmsg)73 int dataasciichk(char *listofchars, char *buffer, int bsize,
74 		 int offset, char **errmsg)
75 {
76 	int cnt;
77 	int total;
78 	int ind;
79 	char *chr;
80 	int chars_size;
81 	char *charlist;
82 
83 	chr = buffer;
84 	total = offset + bsize;
85 
86 	if (listofchars == NULL) {
87 		charlist = CHARS;
88 		chars_size = CHARS_SIZE;
89 	} else {
90 		charlist = listofchars;
91 		chars_size = strlen(listofchars);
92 	}
93 
94 	if (errmsg != NULL)
95 		*errmsg = Errmsg;
96 
97 	for (cnt = offset; cnt < total; chr++, cnt++) {
98 		ind = cnt % chars_size;
99 		if (*chr != charlist[ind]) {
100 			sprintf(Errmsg,
101 				"data mismatch at offset %d, exp:%#o, act:%#o",
102 				cnt, charlist[ind], *chr);
103 			return cnt;
104 		}
105 	}
106 
107 	sprintf(Errmsg, "all %d bytes match desired pattern", bsize);
108 	return -1;
109 }
110 
111 #if UNIT_TEST
112 
main(int ac,char ** ag)113 int main(int ac, char **ag)
114 {
115 
116 	int size = 1023;
117 	char *buffer;
118 	int ret;
119 	char *errmsg;
120 
121 	buffer = malloc(size);
122 	if (buffer == NULL) {
123 		perror("malloc");
124 		exit(2);
125 	}
126 
127 	dataasciigen(NULL, buffer, size, 0);
128 	printf("dataasciigen(NULL, buffer, %d, 0)\n", size);
129 
130 	ret = dataasciichk(NULL, buffer, size, 0, &errmsg);
131 	printf("dataasciichk(NULL, buffer, %d, 0, &errmsg) returned %d %s\n",
132 	       size, ret, errmsg);
133 
134 	if (ret == -1)
135 		printf("\tPASS return value is -1 as expected\n");
136 	else
137 		printf("\tFAIL return value is %d, expected -1\n", ret);
138 
139 	ret = dataasciichk(NULL, &buffer[1], size - 1, 1, &errmsg);
140 	printf("dataasciichk(NULL, &buffer[1], %d, 1, &errmsg) returned %d %s\n",
141 		size - 1, ret, errmsg);
142 
143 	if (ret == -1)
144 		printf("\tPASS return value is -1 as expected\n");
145 	else
146 		printf("\tFAIL return value is %d, expected -1\n", ret);
147 
148 	buffer[25] = 0x0;
149 	printf("changing char 25\n");
150 
151 	ret = dataasciichk(NULL, &buffer[1], size - 1, 1, &errmsg);
152 	printf("dataasciichk(NULL, &buffer[1], %d, 1, &errmsg) returned %d %s\n",
153 		size - 1, ret, errmsg);
154 
155 	if (ret == 25)
156 		printf("\tPASS return value is 25 as expected\n");
157 	else
158 		printf("\tFAIL return value is %d, expected 25\n", ret);
159 
160 	dataasciigen("this is a test of the my string", buffer, size, 0);
161 	printf("dataasciigen(\"this is a test of the my string\", buffer, %d, 0)\n",
162 		size);
163 
164 	ret = dataasciichk("this is a test of the my string",
165 			   buffer, size, 0, &errmsg);
166 	printf("dataasciichk(\"this is a test of the my string\", buffer, %d, 0, &errmsg) returned %d %s\n",
167 		size, ret, errmsg);
168 
169 	if (ret == -1)
170 		printf("\tPASS return value is -1 as expected\n");
171 	else
172 		printf("\tFAIL return value is %d, expected -1\n", ret);
173 
174 	ret =
175 	    dataasciichk("this is a test of the my string", &buffer[1],
176 			 size - 1, 1, &errmsg);
177 	printf("dataasciichk(\"this is a test of the my string\", &buffer[1], %d, 1, &errmsg) returned %d %s\n",
178 		size - 1, ret, errmsg);
179 
180 	if (ret == -1)
181 		printf("\tPASS return value is -1 as expected\n");
182 	else
183 		printf("\tFAIL return value is %d, expected -1\n", ret);
184 
185 	buffer[25] = 0x0;
186 	printf("changing char 25\n");
187 
188 	ret = dataasciichk("this is a test of the my string", &buffer[1],
189 			   size - 1, 1, &errmsg);
190 	printf("dataasciichk(\"this is a test of the my string\", &buffer[1], %d, 1, &errmsg) returned %d %s\n",
191 		size - 1, ret, errmsg);
192 
193 	if (ret == 25)
194 		printf("\tPASS return value is 25 as expected\n");
195 	else
196 		printf("\tFAIL return value is %d, expected 25\n", ret);
197 
198 	exit(0);
199 }
200 
201 #endif
202