120-getopt_non-option-arguments_fix.patch 1000 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. --- a/src/misc/getopt.c
  2. +++ b/src/misc/getopt.c
  3. @@ -24,8 +24,23 @@ int getopt(int argc, char * const argv[]
  4. optind = 1;
  5. }
  6. - if (optind >= argc || !argv[optind] || argv[optind][0] != '-' || !argv[optind][1])
  7. + if (optind >= argc || !argv[optind])
  8. return -1;
  9. +
  10. + if (argv[optind][0] != '-') {
  11. + /* GNU extension */
  12. + if (optstring[0] == '-') {
  13. + optarg = argv[optind];
  14. + optind++;
  15. + return 1;
  16. + }
  17. +
  18. + return -1;
  19. + }
  20. +
  21. + if (!argv[optind][1])
  22. + return -1;
  23. +
  24. if (argv[optind][1] == '-' && !argv[optind][2])
  25. return optind++, -1;
  26. --- a/src/misc/getopt_long.c
  27. +++ b/src/misc/getopt_long.c
  28. @@ -12,7 +12,12 @@ static int __getopt_long(int argc, char
  29. __optpos = 0;
  30. optind = 1;
  31. }
  32. - if (optind >= argc || !argv[optind] || argv[optind][0] != '-') return -1;
  33. + if (optind >= argc || !argv[optind])
  34. + return -1;
  35. +
  36. + if (argv[optind][0] != '-')
  37. + return getopt(argc, argv, optstring);
  38. +
  39. if ((longonly && argv[optind][1]) ||
  40. (argv[optind][1] == '-' && argv[optind][2]))
  41. {