Fossil SCM
Allow command-line options of the form "--name=value".
Commit
be758137b0189740217bac71db3e77012323f204
Parent
e65e6691481ffbb…
1 file changed
+13
-1
+13
-1
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -311,12 +311,14 @@ | ||
| 311 | 311 | ** hasArg==1 means the option has an argument. Return a pointer to the |
| 312 | 312 | ** argument. |
| 313 | 313 | */ |
| 314 | 314 | const char *find_option(const char *zLong, const char *zShort, int hasArg){ |
| 315 | 315 | int i; |
| 316 | + int nLong; | |
| 316 | 317 | const char *zReturn = 0; |
| 317 | 318 | assert( hasArg==0 || hasArg==1 ); |
| 319 | + nLong = strlen(zLong); | |
| 318 | 320 | for(i=2; i<g.argc; i++){ |
| 319 | 321 | char *z = g.argv[i]; |
| 320 | 322 | if( z[0]!='-' ) continue; |
| 321 | 323 | z++; |
| 322 | 324 | if( z[0]=='-' ){ |
| @@ -324,11 +326,21 @@ | ||
| 324 | 326 | remove_from_argv(i, 1); |
| 325 | 327 | break; |
| 326 | 328 | } |
| 327 | 329 | z++; |
| 328 | 330 | } |
| 329 | - if( strcmp(z,zLong)==0 || (zShort!=0 && strcmp(z,zShort)==0) ){ | |
| 331 | + if( strncmp(z,zLong,nLong)==0 ){ | |
| 332 | + if( hasArg && z[nLong]=='=' ){ | |
| 333 | + zReturn = &z[nLong+1]; | |
| 334 | + remove_from_argv(i, 1); | |
| 335 | + break; | |
| 336 | + }else if( z[nLong]==0 ){ | |
| 337 | + zReturn = g.argv[i+hasArg]; | |
| 338 | + remove_from_argv(i, 1+hasArg); | |
| 339 | + break; | |
| 340 | + } | |
| 341 | + }else if( zShort!=0 && strcmp(z,zShort)==0 ){ | |
| 330 | 342 | zReturn = g.argv[i+hasArg]; |
| 331 | 343 | remove_from_argv(i, 1+hasArg); |
| 332 | 344 | break; |
| 333 | 345 | } |
| 334 | 346 | } |
| 335 | 347 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -311,12 +311,14 @@ | |
| 311 | ** hasArg==1 means the option has an argument. Return a pointer to the |
| 312 | ** argument. |
| 313 | */ |
| 314 | const char *find_option(const char *zLong, const char *zShort, int hasArg){ |
| 315 | int i; |
| 316 | const char *zReturn = 0; |
| 317 | assert( hasArg==0 || hasArg==1 ); |
| 318 | for(i=2; i<g.argc; i++){ |
| 319 | char *z = g.argv[i]; |
| 320 | if( z[0]!='-' ) continue; |
| 321 | z++; |
| 322 | if( z[0]=='-' ){ |
| @@ -324,11 +326,21 @@ | |
| 324 | remove_from_argv(i, 1); |
| 325 | break; |
| 326 | } |
| 327 | z++; |
| 328 | } |
| 329 | if( strcmp(z,zLong)==0 || (zShort!=0 && strcmp(z,zShort)==0) ){ |
| 330 | zReturn = g.argv[i+hasArg]; |
| 331 | remove_from_argv(i, 1+hasArg); |
| 332 | break; |
| 333 | } |
| 334 | } |
| 335 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -311,12 +311,14 @@ | |
| 311 | ** hasArg==1 means the option has an argument. Return a pointer to the |
| 312 | ** argument. |
| 313 | */ |
| 314 | const char *find_option(const char *zLong, const char *zShort, int hasArg){ |
| 315 | int i; |
| 316 | int nLong; |
| 317 | const char *zReturn = 0; |
| 318 | assert( hasArg==0 || hasArg==1 ); |
| 319 | nLong = strlen(zLong); |
| 320 | for(i=2; i<g.argc; i++){ |
| 321 | char *z = g.argv[i]; |
| 322 | if( z[0]!='-' ) continue; |
| 323 | z++; |
| 324 | if( z[0]=='-' ){ |
| @@ -324,11 +326,21 @@ | |
| 326 | remove_from_argv(i, 1); |
| 327 | break; |
| 328 | } |
| 329 | z++; |
| 330 | } |
| 331 | if( strncmp(z,zLong,nLong)==0 ){ |
| 332 | if( hasArg && z[nLong]=='=' ){ |
| 333 | zReturn = &z[nLong+1]; |
| 334 | remove_from_argv(i, 1); |
| 335 | break; |
| 336 | }else if( z[nLong]==0 ){ |
| 337 | zReturn = g.argv[i+hasArg]; |
| 338 | remove_from_argv(i, 1+hasArg); |
| 339 | break; |
| 340 | } |
| 341 | }else if( zShort!=0 && strcmp(z,zShort)==0 ){ |
| 342 | zReturn = g.argv[i+hasArg]; |
| 343 | remove_from_argv(i, 1+hasArg); |
| 344 | break; |
| 345 | } |
| 346 | } |
| 347 |