Fossil SCM
Use "command_basename" once on beginning to simplify command comparison with argv[0].
Commit
7e7b303461ebf933bf2c5c7a4625af6d08ba5043caf1768d41460ed2bbd3a178
Parent
96de01f8e96960d…
1 file changed
+20
-14
+20
-14
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -452,32 +452,38 @@ | ||
| 452 | 452 | assert( Th_GetOutstandingMalloc()==0 ); |
| 453 | 453 | #endif |
| 454 | 454 | } |
| 455 | 455 | } |
| 456 | 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 | +*/ | |
| 457 | 462 | void process_argv0(void){ |
| 458 | 463 | int i; |
| 459 | 464 | int nNewArgc = g.argc; |
| 465 | + char *zArg0BaseName = command_basename(g.argv[0]); | |
| 460 | 466 | int nArgcDiff = 0; |
| 461 | 467 | char **zNewArgv = NULL; |
| 462 | 468 | |
| 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 ){ | |
| 468 | 475 | 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 ){ | |
| 476 | 483 | nNewArgc+=2; |
| 477 | 484 | } |
| 478 | - | |
| 479 | 485 | |
| 480 | 486 | nArgcDiff = nNewArgc - g.argc; |
| 481 | 487 | if( nArgcDiff > 0 ){ |
| 482 | 488 | zNewArgv = fossil_malloc( sizeof(char*)*(nNewArgc) ); |
| 483 | 489 | switch( nArgcDiff ){ |
| @@ -489,11 +495,11 @@ | ||
| 489 | 495 | |
| 490 | 496 | case 1: |
| 491 | 497 | /*regular subcommand */ |
| 492 | 498 | zNewArgv[0] = "fossil"; |
| 493 | 499 | /* strip any path element: "/path/to/cmd" -> "cmd" */ |
| 494 | - zNewArgv[nArgcDiff] = command_basename(g.argv[0]); | |
| 500 | + zNewArgv[nArgcDiff] = zArg0BaseName; | |
| 495 | 501 | for(i=1; i<g.argc; i++){ |
| 496 | 502 | zNewArgv[i+nArgcDiff] = g.argv[i]; |
| 497 | 503 | } |
| 498 | 504 | g.argc = nNewArgc; |
| 499 | 505 | g.argv = zNewArgv; |
| 500 | 506 |
| --- 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 |