Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit03d1080

Browse files
Simplify option handling in pg_ctl.
Now that the in-tree getopt_long() moves non-options to the end ofargv (see commit411b720), we can remove pg_ctl's workaround forgetopt_long() implementations that don't reorder argv.Reviewed-by: Michael PaquierDiscussion:https://postgr.es/m/20230713034903.GA991765%40nathanxps13
1 parente08d74c commit03d1080

File tree

1 file changed

+128
-140
lines changed

1 file changed

+128
-140
lines changed

‎src/bin/pg_ctl/pg_ctl.c

Lines changed: 128 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -2260,163 +2260,151 @@ main(int argc, char **argv)
22602260
if (env_wait!=NULL)
22612261
wait_seconds=atoi(env_wait);
22622262

2263-
/*
2264-
* 'Action' can be before or after args so loop over both. Some
2265-
* getopt_long() implementations will reorder argv[] to place all flags
2266-
* first (GNU?), but we don't rely on it. Our /port version doesn't do
2267-
* that.
2268-
*/
2269-
optind=1;
2270-
22712263
/* process command-line options */
2272-
while (optind<argc)
2264+
while ((c=getopt_long(argc,argv,"cD:e:l:m:N:o:p:P:sS:t:U:wW",
2265+
long_options,&option_index))!=-1)
22732266
{
2274-
while ((c=getopt_long(argc,argv,"cD:e:l:m:N:o:p:P:sS:t:U:wW",
2275-
long_options,&option_index))!=-1)
2267+
switch (c)
22762268
{
2277-
switch (c)
2278-
{
2279-
case'D':
2280-
{
2281-
char*pgdata_D;
2282-
2283-
pgdata_D=pg_strdup(optarg);
2284-
canonicalize_path(pgdata_D);
2285-
setenv("PGDATA",pgdata_D,1);
2286-
2287-
/*
2288-
* We could pass PGDATA just in an environment
2289-
* variable but we do -D too for clearer postmaster
2290-
* 'ps' display
2291-
*/
2292-
pgdata_opt=psprintf("-D \"%s\" ",pgdata_D);
2293-
free(pgdata_D);
2294-
break;
2295-
}
2296-
case'e':
2297-
event_source=pg_strdup(optarg);
2298-
break;
2299-
case'l':
2300-
log_file=pg_strdup(optarg);
2301-
break;
2302-
case'm':
2303-
set_mode(optarg);
2304-
break;
2305-
case'N':
2306-
register_servicename=pg_strdup(optarg);
2307-
break;
2308-
case'o':
2309-
/* append option? */
2310-
if (!post_opts)
2311-
post_opts=pg_strdup(optarg);
2312-
else
2313-
{
2314-
char*old_post_opts=post_opts;
2315-
2316-
post_opts=psprintf("%s %s",old_post_opts,optarg);
2317-
free(old_post_opts);
2318-
}
2319-
break;
2320-
case'p':
2321-
exec_path=pg_strdup(optarg);
2322-
break;
2323-
case'P':
2324-
register_password=pg_strdup(optarg);
2325-
break;
2326-
case's':
2327-
silent_mode= true;
2269+
case'D':
2270+
{
2271+
char*pgdata_D;
2272+
2273+
pgdata_D=pg_strdup(optarg);
2274+
canonicalize_path(pgdata_D);
2275+
setenv("PGDATA",pgdata_D,1);
2276+
2277+
/*
2278+
* We could pass PGDATA just in an environment variable
2279+
* but we do -D too for clearer postmaster 'ps' display
2280+
*/
2281+
pgdata_opt=psprintf("-D \"%s\" ",pgdata_D);
2282+
free(pgdata_D);
23282283
break;
2329-
case'S':
2284+
}
2285+
case'e':
2286+
event_source=pg_strdup(optarg);
2287+
break;
2288+
case'l':
2289+
log_file=pg_strdup(optarg);
2290+
break;
2291+
case'm':
2292+
set_mode(optarg);
2293+
break;
2294+
case'N':
2295+
register_servicename=pg_strdup(optarg);
2296+
break;
2297+
case'o':
2298+
/* append option? */
2299+
if (!post_opts)
2300+
post_opts=pg_strdup(optarg);
2301+
else
2302+
{
2303+
char*old_post_opts=post_opts;
2304+
2305+
post_opts=psprintf("%s %s",old_post_opts,optarg);
2306+
free(old_post_opts);
2307+
}
2308+
break;
2309+
case'p':
2310+
exec_path=pg_strdup(optarg);
2311+
break;
2312+
case'P':
2313+
register_password=pg_strdup(optarg);
2314+
break;
2315+
case's':
2316+
silent_mode= true;
2317+
break;
2318+
case'S':
23302319
#ifdefWIN32
2331-
set_starttype(optarg);
2320+
set_starttype(optarg);
23322321
#else
2333-
write_stderr(_("%s: -S option not supported on this platform\n"),
2334-
progname);
2335-
exit(1);
2322+
write_stderr(_("%s: -S option not supported on this platform\n"),
2323+
progname);
2324+
exit(1);
23362325
#endif
2337-
break;
2338-
case't':
2339-
wait_seconds=atoi(optarg);
2340-
wait_seconds_arg= true;
2341-
break;
2342-
case'U':
2343-
if (strchr(optarg,'\\'))
2344-
register_username=pg_strdup(optarg);
2345-
else
2346-
/* Prepend .\ for local accounts */
2347-
register_username=psprintf(".\\%s",optarg);
2348-
break;
2349-
case'w':
2350-
do_wait= true;
2351-
break;
2352-
case'W':
2353-
do_wait= false;
2354-
break;
2355-
case'c':
2356-
allow_core_files= true;
2357-
break;
2358-
default:
2359-
/* getopt_long already issued a suitable error message */
2360-
do_advice();
2361-
exit(1);
2362-
}
2326+
break;
2327+
case't':
2328+
wait_seconds=atoi(optarg);
2329+
wait_seconds_arg= true;
2330+
break;
2331+
case'U':
2332+
if (strchr(optarg,'\\'))
2333+
register_username=pg_strdup(optarg);
2334+
else
2335+
/* Prepend .\ for local accounts */
2336+
register_username=psprintf(".\\%s",optarg);
2337+
break;
2338+
case'w':
2339+
do_wait= true;
2340+
break;
2341+
case'W':
2342+
do_wait= false;
2343+
break;
2344+
case'c':
2345+
allow_core_files= true;
2346+
break;
2347+
default:
2348+
/* getopt_long already issued a suitable error message */
2349+
do_advice();
2350+
exit(1);
23632351
}
2352+
}
23642353

2365-
/* Process an action */
2366-
if (optind<argc)
2354+
/* Process an action */
2355+
if (optind<argc)
2356+
{
2357+
if (strcmp(argv[optind],"init")==0
2358+
||strcmp(argv[optind],"initdb")==0)
2359+
ctl_command=INIT_COMMAND;
2360+
elseif (strcmp(argv[optind],"start")==0)
2361+
ctl_command=START_COMMAND;
2362+
elseif (strcmp(argv[optind],"stop")==0)
2363+
ctl_command=STOP_COMMAND;
2364+
elseif (strcmp(argv[optind],"restart")==0)
2365+
ctl_command=RESTART_COMMAND;
2366+
elseif (strcmp(argv[optind],"reload")==0)
2367+
ctl_command=RELOAD_COMMAND;
2368+
elseif (strcmp(argv[optind],"status")==0)
2369+
ctl_command=STATUS_COMMAND;
2370+
elseif (strcmp(argv[optind],"promote")==0)
2371+
ctl_command=PROMOTE_COMMAND;
2372+
elseif (strcmp(argv[optind],"logrotate")==0)
2373+
ctl_command=LOGROTATE_COMMAND;
2374+
elseif (strcmp(argv[optind],"kill")==0)
23672375
{
2368-
if (ctl_command!=NO_COMMAND)
2376+
if (argc-optind<3)
23692377
{
2370-
write_stderr(_("%s:too many command-linearguments(first is \"%s\")\n"),progname,argv[optind]);
2378+
write_stderr(_("%s:missingargumentsfor kill mode\n"),progname);
23712379
do_advice();
23722380
exit(1);
23732381
}
2374-
2375-
if (strcmp(argv[optind],"init")==0
2376-
||strcmp(argv[optind],"initdb")==0)
2377-
ctl_command=INIT_COMMAND;
2378-
elseif (strcmp(argv[optind],"start")==0)
2379-
ctl_command=START_COMMAND;
2380-
elseif (strcmp(argv[optind],"stop")==0)
2381-
ctl_command=STOP_COMMAND;
2382-
elseif (strcmp(argv[optind],"restart")==0)
2383-
ctl_command=RESTART_COMMAND;
2384-
elseif (strcmp(argv[optind],"reload")==0)
2385-
ctl_command=RELOAD_COMMAND;
2386-
elseif (strcmp(argv[optind],"status")==0)
2387-
ctl_command=STATUS_COMMAND;
2388-
elseif (strcmp(argv[optind],"promote")==0)
2389-
ctl_command=PROMOTE_COMMAND;
2390-
elseif (strcmp(argv[optind],"logrotate")==0)
2391-
ctl_command=LOGROTATE_COMMAND;
2392-
elseif (strcmp(argv[optind],"kill")==0)
2393-
{
2394-
if (argc-optind<3)
2395-
{
2396-
write_stderr(_("%s: missing arguments for kill mode\n"),progname);
2397-
do_advice();
2398-
exit(1);
2399-
}
2400-
ctl_command=KILL_COMMAND;
2401-
set_sig(argv[++optind]);
2402-
killproc=atol(argv[++optind]);
2403-
}
2382+
ctl_command=KILL_COMMAND;
2383+
set_sig(argv[++optind]);
2384+
killproc=atol(argv[++optind]);
2385+
}
24042386
#ifdefWIN32
2405-
elseif (strcmp(argv[optind], "register")==0)
2406-
ctl_command=REGISTER_COMMAND;
2407-
elseif (strcmp(argv[optind], "unregister")==0)
2408-
ctl_command=UNREGISTER_COMMAND;
2409-
elseif (strcmp(argv[optind], "runservice")==0)
2410-
ctl_command=RUN_AS_SERVICE_COMMAND;
2387+
elseif (strcmp(argv[optind], "register")==0)
2388+
ctl_command=REGISTER_COMMAND;
2389+
elseif (strcmp(argv[optind], "unregister")==0)
2390+
ctl_command=UNREGISTER_COMMAND;
2391+
elseif (strcmp(argv[optind], "runservice")==0)
2392+
ctl_command=RUN_AS_SERVICE_COMMAND;
24112393
#endif
2412-
else
2413-
{
2414-
write_stderr(_("%s: unrecognized operation mode \"%s\"\n"),progname,argv[optind]);
2415-
do_advice();
2416-
exit(1);
2417-
}
2418-
optind++;
2394+
else
2395+
{
2396+
write_stderr(_("%s: unrecognized operation mode \"%s\"\n"),progname,argv[optind]);
2397+
do_advice();
2398+
exit(1);
24192399
}
2400+
optind++;
2401+
}
2402+
2403+
if (optind<argc)
2404+
{
2405+
write_stderr(_("%s: too many command-line arguments (first is \"%s\")\n"),progname,argv[optind]);
2406+
do_advice();
2407+
exit(1);
24202408
}
24212409

24222410
if (ctl_command==NO_COMMAND)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp