From 1a95de1119c53c2ebde0cb1a441e0fc78651751f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Sun, 31 Aug 1997 18:46:15 +0200 Subject: [PATCH] Added optional extra argument "throw_errors" to all functions able to call exit(). Rev: lib/modules/Getopt.pmod:1.4 --- lib/modules/Getopt.pmod | 74 +++++++++++++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 18 deletions(-) diff --git a/lib/modules/Getopt.pmod b/lib/modules/Getopt.pmod index 4e6568f960..f3e949aa49 100644 --- a/lib/modules/Getopt.pmod +++ b/lib/modules/Getopt.pmod @@ -12,7 +12,8 @@ string|int find_option(array argv, array|string shortform, array|string|void longform, array|string|void envvars, - mixed|void def) + mixed|void def, + int|void throw_errors) { mixed value; int i,hasarg; @@ -46,8 +47,13 @@ string|int find_option(array argv, { if(i == sizeof(argv)-1) { - werror("No argument to option "+tmp+".\n"); - exit(1); + if (throw_errors) { + throw(({ "No argument to option "+tmp+".\n", + backtrace() })); + } else { + werror("No argument to option "+tmp+".\n"); + exit(1); + } } value=argv[i+1]; argv[i+1]=0; @@ -74,9 +80,14 @@ string|int find_option(array argv, { if(i == sizeof(argv)-1) { - werror("No argument to option -"+argv[i][j..j]+".\n"); - exit(1); - } + if (throw_errors) { + throw(({ "No argument to option -"+argv[i][j..j]+".\n", + backtrace() })); + } else { + werror("No argument to option -"+argv[i][j..j]+".\n"); + exit(1); + } + } value=argv[i+1]; argv[i+1] = 0; @@ -120,7 +131,8 @@ constant MAY_HAVE_ARG=3; #define ENV 3 #define DEF 4 -mixed *find_all_options(string *argv, mixed *options, void|int posix_me_harder) +mixed *find_all_options(string *argv, mixed *options, + void|int posix_me_harder, void|int throw_errors) { mapping quick=([]); foreach(options, mixed opt) @@ -162,8 +174,13 @@ mixed *find_all_options(string *argv, mixed *options, void|int posix_me_harder) { if(e==sizeof(argv)-1) { - werror("No argument to option "+opt+".\n"); - exit(1); + if (throw_errors) { + throw(({ "No argument to option "+opt+".\n", + backtrace() })); + } else { + werror("No argument to option "+opt+".\n"); + exit(1); + } } arg=argv[e+1]; argv[e+1]=0; @@ -187,8 +204,13 @@ mixed *find_all_options(string *argv, mixed *options, void|int posix_me_harder) { if(e==sizeof(argv)-1) { - werror("No argument to option "+opt+".\n"); - exit(1); + if (throw_errors) { + throw(({ "No argument to option "+opt+".\n", + backtrace() })); + } else { + werror("No argument to option "+opt+".\n"); + exit(1); + } } arg=argv[e+1]; argv[e+1]=0; @@ -240,7 +262,7 @@ mixed *find_all_options(string *argv, mixed *options, void|int posix_me_harder) } -string *get_args(string *argv, void|int posix_me_harder) +string *get_args(string *argv, void|int posix_me_harder, void|int throw_errors) { int i; for(i=1;i<sizeof(argv);i++) @@ -254,14 +276,30 @@ string *get_args(string *argv, void|int posix_me_harder) argv[i]=0; break; }else{ - werror("Unknown option "+argv[i]+".\n"); - exit(1); + if (throw_errors) { + throw(({ "Unknown option "+argv[i]+".\n", + backtrace() })); + } else { + werror("Unknown option "+argv[i]+".\n"); + exit(1); + } } }else{ - if(strlen(argv[i]) == 2) - werror("Unknown option "+argv[i]+".\n"); - else - werror("Unknown options "+argv[i]+".\n"); + if(strlen(argv[i]) == 2) { + if (throw_errors) { + throw(({ "Unknown option "+argv[i]+".\n", + backtrace() })); + } else { + werror("Unknown option "+argv[i]+".\n"); + } + } else { + if (throw_errors) { + throw(({ "Unknown options "+argv[i]+".\n", + backtrace() })); + } else { + werror("Unknown options "+argv[i]+".\n"); + } + } exit(1); } }else{ -- GitLab