Fossil SCM

Use "command_basename" once on beginning to simplify command comparison with argv[0].

mgagnon 2026-03-12 00:29 argv0_as_subcommand
Commit 7e7b303461ebf933bf2c5c7a4625af6d08ba5043caf1768d41460ed2bbd3a178
1 file changed +20 -14
+20 -14
--- src/main.c
+++ src/main.c
@@ -452,32 +452,38 @@
452452
assert( Th_GetOutstandingMalloc()==0 );
453453
#endif
454454
}
455455
}
456456
457
+
458
+/*
459
+** Compare argv[0] with a list of subcommand and shift argv in order fossil is
460
+** invoked with the matching subcommand.
461
+*/
457462
void process_argv0(void){
458463
int i;
459464
int nNewArgc = g.argc;
465
+ char *zArg0BaseName = command_basename(g.argv[0]);
460466
int nArgcDiff = 0;
461467
char **zNewArgv = NULL;
462468
463
- if( sqlite3_strglob("*md5sum", g.argv[0]) == 0
464
- || sqlite3_strglob("*pikchr", g.argv[0]) == 0
465
- || sqlite3_strglob("*sha1sum", g.argv[0]) == 0
466
- || sqlite3_strglob("*sha3sum", g.argv[0]) == 0
467
- || sqlite3_strglob("*sqlite3", g.argv[0]) == 0 ){
469
+
470
+ if( fossil_strcmp(zArg0BaseName, "md5sum") == 0
471
+ || fossil_strcmp(zArg0BaseName, "pikchr") == 0
472
+ || fossil_strcmp(zArg0BaseName, "sha1sum") == 0
473
+ || fossil_strcmp(zArg0BaseName, "sha3sum") == 0
474
+ || fossil_strcmp(zArg0BaseName, "sqlite3") == 0 ){
468475
nNewArgc++;
469
- }else if( sqlite3_strglob("*date", g.argv[0]) == 0
470
- || sqlite3_strglob("*ls", g.argv[0]) == 0
471
- || sqlite3_strglob("*pwd", g.argv[0]) == 0
472
- || sqlite3_strglob("*stty", g.argv[0]) == 0
473
- || sqlite3_strglob("*unzip", g.argv[0]) == 0
474
- || sqlite3_strglob("*which", g.argv[0]) == 0
475
- || sqlite3_strglob("*zip", g.argv[0]) == 0 ){
476
+ }else if( fossil_strcmp(zArg0BaseName, "date") == 0
477
+ || fossil_strcmp(zArg0BaseName, "ls") == 0
478
+ || fossil_strcmp(zArg0BaseName, "pwd") == 0
479
+ || fossil_strcmp(zArg0BaseName, "stty") == 0
480
+ || fossil_strcmp(zArg0BaseName, "unzip") == 0
481
+ || fossil_strcmp(zArg0BaseName, "which") == 0
482
+ || fossil_strcmp(zArg0BaseName, "zip") == 0 ){
476483
nNewArgc+=2;
477484
}
478
-
479485
480486
nArgcDiff = nNewArgc - g.argc;
481487
if( nArgcDiff > 0 ){
482488
zNewArgv = fossil_malloc( sizeof(char*)*(nNewArgc) );
483489
switch( nArgcDiff ){
@@ -489,11 +495,11 @@
489495
490496
case 1:
491497
/*regular subcommand */
492498
zNewArgv[0] = "fossil";
493499
/* strip any path element: "/path/to/cmd" -> "cmd" */
494
- zNewArgv[nArgcDiff] = command_basename(g.argv[0]);
500
+ zNewArgv[nArgcDiff] = zArg0BaseName;
495501
for(i=1; i<g.argc; i++){
496502
zNewArgv[i+nArgcDiff] = g.argv[i];
497503
}
498504
g.argc = nNewArgc;
499505
g.argv = zNewArgv;
500506
--- src/main.c
+++ src/main.c
@@ -452,32 +452,38 @@
452 assert( Th_GetOutstandingMalloc()==0 );
453 #endif
454 }
455 }
456
 
 
 
 
 
457 void process_argv0(void){
458 int i;
459 int nNewArgc = g.argc;
 
460 int nArgcDiff = 0;
461 char **zNewArgv = NULL;
462
463 if( sqlite3_strglob("*md5sum", g.argv[0]) == 0
464 || sqlite3_strglob("*pikchr", g.argv[0]) == 0
465 || sqlite3_strglob("*sha1sum", g.argv[0]) == 0
466 || sqlite3_strglob("*sha3sum", g.argv[0]) == 0
467 || sqlite3_strglob("*sqlite3", g.argv[0]) == 0 ){
 
468 nNewArgc++;
469 }else if( sqlite3_strglob("*date", g.argv[0]) == 0
470 || sqlite3_strglob("*ls", g.argv[0]) == 0
471 || sqlite3_strglob("*pwd", g.argv[0]) == 0
472 || sqlite3_strglob("*stty", g.argv[0]) == 0
473 || sqlite3_strglob("*unzip", g.argv[0]) == 0
474 || sqlite3_strglob("*which", g.argv[0]) == 0
475 || sqlite3_strglob("*zip", g.argv[0]) == 0 ){
476 nNewArgc+=2;
477 }
478
479
480 nArgcDiff = nNewArgc - g.argc;
481 if( nArgcDiff > 0 ){
482 zNewArgv = fossil_malloc( sizeof(char*)*(nNewArgc) );
483 switch( nArgcDiff ){
@@ -489,11 +495,11 @@
489
490 case 1:
491 /*regular subcommand */
492 zNewArgv[0] = "fossil";
493 /* strip any path element: "/path/to/cmd" -> "cmd" */
494 zNewArgv[nArgcDiff] = command_basename(g.argv[0]);
495 for(i=1; i<g.argc; i++){
496 zNewArgv[i+nArgcDiff] = g.argv[i];
497 }
498 g.argc = nNewArgc;
499 g.argv = zNewArgv;
500
--- src/main.c
+++ src/main.c
@@ -452,32 +452,38 @@
452 assert( Th_GetOutstandingMalloc()==0 );
453 #endif
454 }
455 }
456
457
458 /*
459 ** Compare argv[0] with a list of subcommand and shift argv in order fossil is
460 ** invoked with the matching subcommand.
461 */
462 void process_argv0(void){
463 int i;
464 int nNewArgc = g.argc;
465 char *zArg0BaseName = command_basename(g.argv[0]);
466 int nArgcDiff = 0;
467 char **zNewArgv = NULL;
468
469
470 if( fossil_strcmp(zArg0BaseName, "md5sum") == 0
471 || fossil_strcmp(zArg0BaseName, "pikchr") == 0
472 || fossil_strcmp(zArg0BaseName, "sha1sum") == 0
473 || fossil_strcmp(zArg0BaseName, "sha3sum") == 0
474 || fossil_strcmp(zArg0BaseName, "sqlite3") == 0 ){
475 nNewArgc++;
476 }else if( fossil_strcmp(zArg0BaseName, "date") == 0
477 || fossil_strcmp(zArg0BaseName, "ls") == 0
478 || fossil_strcmp(zArg0BaseName, "pwd") == 0
479 || fossil_strcmp(zArg0BaseName, "stty") == 0
480 || fossil_strcmp(zArg0BaseName, "unzip") == 0
481 || fossil_strcmp(zArg0BaseName, "which") == 0
482 || fossil_strcmp(zArg0BaseName, "zip") == 0 ){
483 nNewArgc+=2;
484 }
 
485
486 nArgcDiff = nNewArgc - g.argc;
487 if( nArgcDiff > 0 ){
488 zNewArgv = fossil_malloc( sizeof(char*)*(nNewArgc) );
489 switch( nArgcDiff ){
@@ -489,11 +495,11 @@
495
496 case 1:
497 /*regular subcommand */
498 zNewArgv[0] = "fossil";
499 /* strip any path element: "/path/to/cmd" -> "cmd" */
500 zNewArgv[nArgcDiff] = zArg0BaseName;
501 for(i=1; i<g.argc; i++){
502 zNewArgv[i+nArgcDiff] = g.argv[i];
503 }
504 g.argc = nNewArgc;
505 g.argv = zNewArgv;
506

Keyboard Shortcuts

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