diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2008-04-05 20:41:37 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2008-04-05 20:41:37 (GMT) |
commit | 790465fd90e8a72590386465f518db9e67ab843f (patch) | |
tree | 62e3e47f6f97120dfdfc94a87dc1a06414d95a13 /Python/getopt.c | |
parent | b9279bc88f867d9d3b6606502a678b137329b54d (diff) | |
download | cpython-790465fd90e8a72590386465f518db9e67ab843f.zip cpython-790465fd90e8a72590386465f518db9e67ab843f.tar.gz cpython-790465fd90e8a72590386465f518db9e67ab843f.tar.bz2 |
Change command line processing API to use wchar_t.
Fixes #2128.
Diffstat (limited to 'Python/getopt.c')
-rw-r--r-- | Python/getopt.c | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/Python/getopt.c b/Python/getopt.c index 659efcf..7c1d605 100644 --- a/Python/getopt.c +++ b/Python/getopt.c @@ -27,8 +27,11 @@ /* Modified to support --help and --version, as well as /? on Windows * by Georg Brandl. */ +#include <Python.h> #include <stdio.h> #include <string.h> +#include <wchar.h> +#include <pygetopt.h> #ifdef __cplusplus extern "C" { @@ -36,40 +39,40 @@ extern "C" { int _PyOS_opterr = 1; /* generate error messages */ int _PyOS_optind = 1; /* index into argv array */ -char *_PyOS_optarg = NULL; /* optional argument */ +wchar_t *_PyOS_optarg = NULL; /* optional argument */ -int _PyOS_GetOpt(int argc, char **argv, char *optstring) +int _PyOS_GetOpt(int argc, wchar_t **argv, wchar_t *optstring) { - static char *opt_ptr = ""; - char *ptr; - int option; + static wchar_t *opt_ptr = L""; + wchar_t *ptr; + wchar_t option; if (*opt_ptr == '\0') { if (_PyOS_optind >= argc) return -1; #ifdef MS_WINDOWS - else if (strcmp(argv[_PyOS_optind], "/?") == 0) { + else if (wcscmp(argv[_PyOS_optind], L"/?") == 0) { ++_PyOS_optind; return 'h'; } #endif - else if (argv[_PyOS_optind][0] != '-' || - argv[_PyOS_optind][1] == '\0' /* lone dash */ ) + else if (argv[_PyOS_optind][0] != L'-' || + argv[_PyOS_optind][1] == L'\0' /* lone dash */ ) return -1; - else if (strcmp(argv[_PyOS_optind], "--") == 0) { + else if (wcscmp(argv[_PyOS_optind], L"--") == 0) { ++_PyOS_optind; return -1; } - else if (strcmp(argv[_PyOS_optind], "--help") == 0) { + else if (wcscmp(argv[_PyOS_optind], L"--help") == 0) { ++_PyOS_optind; return 'h'; } - else if (strcmp(argv[_PyOS_optind], "--version") == 0) { + else if (wcscmp(argv[_PyOS_optind], L"--version") == 0) { ++_PyOS_optind; return 'V'; } @@ -78,27 +81,27 @@ int _PyOS_GetOpt(int argc, char **argv, char *optstring) opt_ptr = &argv[_PyOS_optind++][1]; } - if ( (option = *opt_ptr++) == '\0') + if ( (option = *opt_ptr++) == L'\0') return -1; - if ((ptr = strchr(optstring, option)) == NULL) { + if ((ptr = wcschr(optstring, option)) == NULL) { if (_PyOS_opterr) - fprintf(stderr, "Unknown option: -%c\n", option); + fprintf(stderr, "Unknown option: -%c\n", (char)option); return '_'; } - if (*(ptr + 1) == ':') { - if (*opt_ptr != '\0') { + if (*(ptr + 1) == L':') { + if (*opt_ptr != L'\0') { _PyOS_optarg = opt_ptr; - opt_ptr = ""; + opt_ptr = L""; } else { if (_PyOS_optind >= argc) { if (_PyOS_opterr) fprintf(stderr, - "Argument expected for the -%c option\n", option); + "Argument expected for the -%c option\n", (char)option); return '_'; } |