Fossil SCM

Replace calls to strcpy() with a tree-local strcpy() clone to squelch unwarranted link-time warnings when building on OpenBSD. There is still one strcpy() instance in the upstream extsrc/shell.c.

stephan 2024-08-23 20:51 trunk
Commit c0b9b4487f0318093ca3ffcbd95f408a57bfb4d95b70721a895bbc8914b9f0c8
+1 -1
--- src/db.c
+++ src/db.c
@@ -1435,11 +1435,11 @@
14351435
if( sqlite3_user_data(context)==0 ){
14361436
zTemp = obscure((char*)zIn);
14371437
}else{
14381438
zTemp = unobscure((char*)zIn);
14391439
}
1440
- strcpy(zOut, zTemp);
1440
+ fossil_strcpy(zOut, zTemp);
14411441
fossil_free(zTemp);
14421442
sqlite3_result_text(context, zOut, strlen(zOut), sqlite3_free);
14431443
}
14441444
14451445
/*
14461446
--- src/db.c
+++ src/db.c
@@ -1435,11 +1435,11 @@
1435 if( sqlite3_user_data(context)==0 ){
1436 zTemp = obscure((char*)zIn);
1437 }else{
1438 zTemp = unobscure((char*)zIn);
1439 }
1440 strcpy(zOut, zTemp);
1441 fossil_free(zTemp);
1442 sqlite3_result_text(context, zOut, strlen(zOut), sqlite3_free);
1443 }
1444
1445 /*
1446
--- src/db.c
+++ src/db.c
@@ -1435,11 +1435,11 @@
1435 if( sqlite3_user_data(context)==0 ){
1436 zTemp = obscure((char*)zIn);
1437 }else{
1438 zTemp = unobscure((char*)zIn);
1439 }
1440 fossil_strcpy(zOut, zTemp);
1441 fossil_free(zTemp);
1442 sqlite3_result_text(context, zOut, strlen(zOut), sqlite3_free);
1443 }
1444
1445 /*
1446
+1 -1
--- src/style.c
+++ src/style.c
@@ -989,11 +989,11 @@
989989
}else{
990990
@ <a class="label sml-%s(zClass)" href="%h(p->zLink)">%h(p->zLabel)</a>
991991
}
992992
}
993993
}
994
- strcpy(zClass,"smc-"); /* common prefix for submenu controls */
994
+ fossil_strcpy(zClass,"smc-"); /* common prefix for submenu controls */
995995
for(i=0; i<nSubmenuCtrl; i++){
996996
const char *zQPN = aSubmenuCtrl[i].zName;
997997
const char *zDisabled = "";
998998
const char *zXtraClass = "";
999999
if( aSubmenuCtrl[i].eVisible & STYLE_DISABLED ){
10001000
--- src/style.c
+++ src/style.c
@@ -989,11 +989,11 @@
989 }else{
990 @ <a class="label sml-%s(zClass)" href="%h(p->zLink)">%h(p->zLabel)</a>
991 }
992 }
993 }
994 strcpy(zClass,"smc-"); /* common prefix for submenu controls */
995 for(i=0; i<nSubmenuCtrl; i++){
996 const char *zQPN = aSubmenuCtrl[i].zName;
997 const char *zDisabled = "";
998 const char *zXtraClass = "";
999 if( aSubmenuCtrl[i].eVisible & STYLE_DISABLED ){
1000
--- src/style.c
+++ src/style.c
@@ -989,11 +989,11 @@
989 }else{
990 @ <a class="label sml-%s(zClass)" href="%h(p->zLink)">%h(p->zLabel)</a>
991 }
992 }
993 }
994 fossil_strcpy(zClass,"smc-"); /* common prefix for submenu controls */
995 for(i=0; i<nSubmenuCtrl; i++){
996 const char *zQPN = aSubmenuCtrl[i].zName;
997 const char *zDisabled = "";
998 const char *zXtraClass = "";
999 if( aSubmenuCtrl[i].eVisible & STYLE_DISABLED ){
1000
+6
--- src/util.c
+++ src/util.c
@@ -170,10 +170,16 @@
170170
char *fossil_strdup_nn(const char *zOrig){
171171
if( zOrig==0 ) return fossil_strndup("", 0);
172172
return fossil_strndup(zOrig, -1);
173173
}
174174
175
+/*
176
+** strcpy() workalike to squelch an unwarranted warning from OpenBSD.
177
+*/
178
+void fossil_strcpy(char *dest, const char *src){
179
+ while( (*(dest++) = *(src++))!=0 ){}
180
+}
175181
176182
/*
177183
** Translate every upper-case character in the input string into
178184
** its equivalent lower-case.
179185
*/
180186
--- src/util.c
+++ src/util.c
@@ -170,10 +170,16 @@
170 char *fossil_strdup_nn(const char *zOrig){
171 if( zOrig==0 ) return fossil_strndup("", 0);
172 return fossil_strndup(zOrig, -1);
173 }
174
 
 
 
 
 
 
175
176 /*
177 ** Translate every upper-case character in the input string into
178 ** its equivalent lower-case.
179 */
180
--- src/util.c
+++ src/util.c
@@ -170,10 +170,16 @@
170 char *fossil_strdup_nn(const char *zOrig){
171 if( zOrig==0 ) return fossil_strndup("", 0);
172 return fossil_strndup(zOrig, -1);
173 }
174
175 /*
176 ** strcpy() workalike to squelch an unwarranted warning from OpenBSD.
177 */
178 void fossil_strcpy(char *dest, const char *src){
179 while( (*(dest++) = *(src++))!=0 ){}
180 }
181
182 /*
183 ** Translate every upper-case character in the input string into
184 ** its equivalent lower-case.
185 */
186
--- tools/makeheaders.c
+++ tools/makeheaders.c
@@ -3166,10 +3166,15 @@
31663166
31673167
/* Done!
31683168
*/
31693169
return pFile;
31703170
}
3171
+
3172
+/* Local strcpy() clone to squelch an unwarranted warning from OpenBSD. */
3173
+static void local_strcpy(char *dest, const char *src){
3174
+ while( (*(dest++) = *(src++))!=0 ){}
3175
+}
31713176
31723177
/* MS-Windows and MS-DOS both have the following serious OS bug: the
31733178
** length of a command line is severely restricted. But this program
31743179
** occasionally requires long command lines. Hence the following
31753180
** work around.
@@ -3243,11 +3248,11 @@
32433248
}
32443249
if( zNew ){
32453250
int j = nNew + index;
32463251
zNew[j] = malloc( n + 1 );
32473252
if( zNew[j] ){
3248
- strcpy( zNew[j], zBuf );
3253
+ local_strcpy( zNew[j], zBuf );
32493254
}
32503255
}
32513256
}
32523257
}
32533258
fclose(in);
32543259
--- tools/makeheaders.c
+++ tools/makeheaders.c
@@ -3166,10 +3166,15 @@
3166
3167 /* Done!
3168 */
3169 return pFile;
3170 }
 
 
 
 
 
3171
3172 /* MS-Windows and MS-DOS both have the following serious OS bug: the
3173 ** length of a command line is severely restricted. But this program
3174 ** occasionally requires long command lines. Hence the following
3175 ** work around.
@@ -3243,11 +3248,11 @@
3243 }
3244 if( zNew ){
3245 int j = nNew + index;
3246 zNew[j] = malloc( n + 1 );
3247 if( zNew[j] ){
3248 strcpy( zNew[j], zBuf );
3249 }
3250 }
3251 }
3252 }
3253 fclose(in);
3254
--- tools/makeheaders.c
+++ tools/makeheaders.c
@@ -3166,10 +3166,15 @@
3166
3167 /* Done!
3168 */
3169 return pFile;
3170 }
3171
3172 /* Local strcpy() clone to squelch an unwarranted warning from OpenBSD. */
3173 static void local_strcpy(char *dest, const char *src){
3174 while( (*(dest++) = *(src++))!=0 ){}
3175 }
3176
3177 /* MS-Windows and MS-DOS both have the following serious OS bug: the
3178 ** length of a command line is severely restricted. But this program
3179 ** occasionally requires long command lines. Hence the following
3180 ** work around.
@@ -3243,11 +3248,11 @@
3248 }
3249 if( zNew ){
3250 int j = nNew + index;
3251 zNew[j] = malloc( n + 1 );
3252 if( zNew[j] ){
3253 local_strcpy( zNew[j], zBuf );
3254 }
3255 }
3256 }
3257 }
3258 fclose(in);
3259
+6 -1
--- tools/mkindex.c
+++ tools/mkindex.c
@@ -327,10 +327,15 @@
327327
while( fossil_isspace(z[0]) ) z++;
328328
len = (int)strlen(z);
329329
while( len>0 && fossil_isspace(z[len-1]) ){ len--; }
330330
aEntry[nUsed-1].zDflt = string_dup(z,len);
331331
}
332
+
333
+/* Local strcpy() clone to squelch an unwarranted warning from OpenBSD. */
334
+static void local_strcpy(char *dest, const char *src){
335
+ while( (*(dest++) = *(src++))!=0 ){}
336
+}
332337
333338
/*
334339
** Scan a line for a function that implements a web page or command.
335340
*/
336341
void scan_for_func(char *zLine){
@@ -349,11 +354,11 @@
349354
){
350355
if( zLine[2]=='\n' ){
351356
zHelp[nHelp++] = '\n';
352357
}else{
353358
if( strncmp(&zLine[3], "Usage: ", 6)==0 ) nHelp = 0;
354
- strcpy(&zHelp[nHelp], &zLine[3]);
359
+ local_strcpy(&zHelp[nHelp], &zLine[3]);
355360
nHelp += strlen(&zHelp[nHelp]);
356361
}
357362
return;
358363
}
359364
for(i=0; fossil_isspace(zLine[i]); i++){}
360365
--- tools/mkindex.c
+++ tools/mkindex.c
@@ -327,10 +327,15 @@
327 while( fossil_isspace(z[0]) ) z++;
328 len = (int)strlen(z);
329 while( len>0 && fossil_isspace(z[len-1]) ){ len--; }
330 aEntry[nUsed-1].zDflt = string_dup(z,len);
331 }
 
 
 
 
 
332
333 /*
334 ** Scan a line for a function that implements a web page or command.
335 */
336 void scan_for_func(char *zLine){
@@ -349,11 +354,11 @@
349 ){
350 if( zLine[2]=='\n' ){
351 zHelp[nHelp++] = '\n';
352 }else{
353 if( strncmp(&zLine[3], "Usage: ", 6)==0 ) nHelp = 0;
354 strcpy(&zHelp[nHelp], &zLine[3]);
355 nHelp += strlen(&zHelp[nHelp]);
356 }
357 return;
358 }
359 for(i=0; fossil_isspace(zLine[i]); i++){}
360
--- tools/mkindex.c
+++ tools/mkindex.c
@@ -327,10 +327,15 @@
327 while( fossil_isspace(z[0]) ) z++;
328 len = (int)strlen(z);
329 while( len>0 && fossil_isspace(z[len-1]) ){ len--; }
330 aEntry[nUsed-1].zDflt = string_dup(z,len);
331 }
332
333 /* Local strcpy() clone to squelch an unwarranted warning from OpenBSD. */
334 static void local_strcpy(char *dest, const char *src){
335 while( (*(dest++) = *(src++))!=0 ){}
336 }
337
338 /*
339 ** Scan a line for a function that implements a web page or command.
340 */
341 void scan_for_func(char *zLine){
@@ -349,11 +354,11 @@
354 ){
355 if( zLine[2]=='\n' ){
356 zHelp[nHelp++] = '\n';
357 }else{
358 if( strncmp(&zLine[3], "Usage: ", 6)==0 ) nHelp = 0;
359 local_strcpy(&zHelp[nHelp], &zLine[3]);
360 nHelp += strlen(&zHelp[nHelp]);
361 }
362 return;
363 }
364 for(i=0; fossil_isspace(zLine[i]); i++){}
365
--- tools/mkversion.c
+++ tools/mkversion.c
@@ -81,10 +81,15 @@
8181
zOut[n] = "0123456789abcdef"[(t>>4)&0xf];
8282
zOut[n+1] = "0123456789abcdef"[t&0xf];
8383
}
8484
zOut[n] = 0;
8585
}
86
+
87
+/* Local strcpy() clone to squelch an unwarranted warning from OpenBSD. */
88
+static void local_strcpy(char *dest, const char *src){
89
+ while( (*(dest++) = *(src++))!=0 ){}
90
+}
8691
8792
int main(int argc, char *argv[]){
8893
FILE *m,*u,*v;
8994
char *z;
9095
#if defined(__DMC__) /* e.g. 0x857 */
@@ -173,11 +178,11 @@
173178
z++;
174179
}
175180
for(z=vx; z[0]=='0'; z++){}
176181
printf("#define RELEASE_VERSION_NUMBER %d%02d%02d\n", vn[0], vn[1], vn[2]);
177182
memset(vx,0,sizeof(vx));
178
- strcpy(vx,b);
183
+ local_strcpy(vx,b);
179184
for(z=vx; z[0]; z++){
180185
if( z[0]=='-' ){
181186
z[0] = 0;
182187
break;
183188
}
184189
--- tools/mkversion.c
+++ tools/mkversion.c
@@ -81,10 +81,15 @@
81 zOut[n] = "0123456789abcdef"[(t>>4)&0xf];
82 zOut[n+1] = "0123456789abcdef"[t&0xf];
83 }
84 zOut[n] = 0;
85 }
 
 
 
 
 
86
87 int main(int argc, char *argv[]){
88 FILE *m,*u,*v;
89 char *z;
90 #if defined(__DMC__) /* e.g. 0x857 */
@@ -173,11 +178,11 @@
173 z++;
174 }
175 for(z=vx; z[0]=='0'; z++){}
176 printf("#define RELEASE_VERSION_NUMBER %d%02d%02d\n", vn[0], vn[1], vn[2]);
177 memset(vx,0,sizeof(vx));
178 strcpy(vx,b);
179 for(z=vx; z[0]; z++){
180 if( z[0]=='-' ){
181 z[0] = 0;
182 break;
183 }
184
--- tools/mkversion.c
+++ tools/mkversion.c
@@ -81,10 +81,15 @@
81 zOut[n] = "0123456789abcdef"[(t>>4)&0xf];
82 zOut[n+1] = "0123456789abcdef"[t&0xf];
83 }
84 zOut[n] = 0;
85 }
86
87 /* Local strcpy() clone to squelch an unwarranted warning from OpenBSD. */
88 static void local_strcpy(char *dest, const char *src){
89 while( (*(dest++) = *(src++))!=0 ){}
90 }
91
92 int main(int argc, char *argv[]){
93 FILE *m,*u,*v;
94 char *z;
95 #if defined(__DMC__) /* e.g. 0x857 */
@@ -173,11 +178,11 @@
178 z++;
179 }
180 for(z=vx; z[0]=='0'; z++){}
181 printf("#define RELEASE_VERSION_NUMBER %d%02d%02d\n", vn[0], vn[1], vn[2]);
182 memset(vx,0,sizeof(vx));
183 local_strcpy(vx,b);
184 for(z=vx; z[0]; z++){
185 if( z[0]=='-' ){
186 z[0] = 0;
187 break;
188 }
189

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button