mirror of
https://github.com/python/cpython.git
synced 2025-08-22 17:55:18 +00:00
bpo-40527: Fix command line argument parsing (GH-19955)
This commit is contained in:
parent
eff870b618
commit
2668a9a5aa
3 changed files with 29 additions and 7 deletions
|
@ -101,7 +101,9 @@ int _PyOS_GetOpt(Py_ssize_t argc, wchar_t * const *argv, int *longindex)
|
|||
if (option == L'-') {
|
||||
// Parse long option.
|
||||
if (*opt_ptr == L'\0') {
|
||||
fprintf(stderr, "expected long option\n");
|
||||
if (_PyOS_opterr) {
|
||||
fprintf(stderr, "expected long option\n");
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
*longindex = 0;
|
||||
|
@ -111,7 +113,9 @@ int _PyOS_GetOpt(Py_ssize_t argc, wchar_t * const *argv, int *longindex)
|
|||
break;
|
||||
}
|
||||
if (!opt->name) {
|
||||
fprintf(stderr, "unknown option %ls\n", argv[_PyOS_optind - 1]);
|
||||
if (_PyOS_opterr) {
|
||||
fprintf(stderr, "unknown option %ls\n", argv[_PyOS_optind - 1]);
|
||||
}
|
||||
return '_';
|
||||
}
|
||||
opt_ptr = L"";
|
||||
|
@ -119,8 +123,10 @@ int _PyOS_GetOpt(Py_ssize_t argc, wchar_t * const *argv, int *longindex)
|
|||
return opt->val;
|
||||
}
|
||||
if (_PyOS_optind >= argc) {
|
||||
fprintf(stderr, "Argument expected for the %ls options\n",
|
||||
argv[_PyOS_optind - 1]);
|
||||
if (_PyOS_opterr) {
|
||||
fprintf(stderr, "Argument expected for the %ls options\n",
|
||||
argv[_PyOS_optind - 1]);
|
||||
}
|
||||
return '_';
|
||||
}
|
||||
_PyOS_optarg = argv[_PyOS_optind++];
|
||||
|
@ -128,14 +134,16 @@ int _PyOS_GetOpt(Py_ssize_t argc, wchar_t * const *argv, int *longindex)
|
|||
}
|
||||
|
||||
if (option == 'J') {
|
||||
if (_PyOS_opterr)
|
||||
if (_PyOS_opterr) {
|
||||
fprintf(stderr, "-J is reserved for Jython\n");
|
||||
}
|
||||
return '_';
|
||||
}
|
||||
|
||||
if ((ptr = wcschr(SHORT_OPTS, option)) == NULL) {
|
||||
if (_PyOS_opterr)
|
||||
if (_PyOS_opterr) {
|
||||
fprintf(stderr, "Unknown option: -%c\n", (char)option);
|
||||
}
|
||||
return '_';
|
||||
}
|
||||
|
||||
|
@ -147,9 +155,10 @@ int _PyOS_GetOpt(Py_ssize_t argc, wchar_t * const *argv, int *longindex)
|
|||
|
||||
else {
|
||||
if (_PyOS_optind >= argc) {
|
||||
if (_PyOS_opterr)
|
||||
if (_PyOS_opterr) {
|
||||
fprintf(stderr,
|
||||
"Argument expected for the -%c option\n", (char)option);
|
||||
}
|
||||
return '_';
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue