[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Findutils-patches] [PATCH 15/19] Avoid using magic numbers as exit stat
From: |
James Youngman |
Subject: |
[Findutils-patches] [PATCH 15/19] Avoid using magic numbers as exit statuses. |
Date: |
Fri, 2 Apr 2010 23:47:15 +0100 |
Avoid using magic numbers as exit statuses.
* cfg.mk (skip_defer): Enable sc_prohibit_magic_number_exit.
* doc/find-maint.texi (Security): Avoid error (1, ...) in the
example patch.
* find/find.c (main): Use exit status EXIT_FAILURE instead of 1.
(wd_sanity_check): Likewise.
(safely_chdir_lstat): Likewise.
(process_dir): Likewise.
* find/fstype.c (must_read_fs_list): Likewise.
* find/ftsfind.c (main): Likewise.
(main): Likewise.
* find/parser.c (check_option_combinations): Use exit status
EXIT_FAILURE instead of 1.
(parse_group): Likewise.
(parse_help): Use exit status EXIT_SUCCESS instead of 0.
(parse_version): Likewise.
(fnmatch_sanitycheck): Use exit status EXIT_FAILURE instead of 1.
(insert_depthspec): Likewise.
(parse_newerXY): Likewise.
(non_posix_mode): Likewise.
(parse_perm): Likewise.
(insert_regex): Likewise.
(parse_size): Likewise.
(parse_show_control_chars): Likewise.
(parse_used): Likewise.
(parse_user): Likewise.
(parse_context): Likewise.
(insert_type): Likewise.
(insert_fprintf): Likewise.
(make_segment): Likewise.
(check_path_safety): Likewise.
(new_insert_exec_ok): Likewise.
(get_relative_timestamp): Likewise.
(parse_time): Likewise.
* find/tree.c (get_expr): Use exit status EXIT_FAILURE instead of 1.
(scan_rest): Likewise.
(get_pred_cost): Likewise.
(get_pred_cost): Likewise.
(build_expression_tree): Likewise.
(get_new_pred_chk_op): Likewise.
* find/pred.c (launch): Use exit status EXIT_FAILURE instead of 1.
* find/util.c (process_debug_options): Use exit status
EXIT_SUCCESS instead of 0.
(process_optimisation_option): Use exit status EXIT_FAILURE
instead of 1.
(set_option_defaults): Likewise.
* lib/buildcmd.c (exceeds): Likewise.
(bc_do_exec): Likewise.
(bc_push_arg): Likewise.
* lib/nextelem.c: Remove test code.
* lib/safe-atoi.c (safe_atoi): Use exit status EXIT_FAILURE
instead of 1.
* lib/regextype.c (get_regex_type): Use exit status EXIT_FAILURE
instead of 1. Include <stdlib.h>, for EXIT_FAILURE.
* locate/locate.c (set_max_db_age): Use exit status EXIT_FAILURE
instead of 1.
(set_max_db_age): Likewise.
(toolong): Likewise.
(visit_locate02_format): Likewise.
(search_one_database): Likewise.
(drop_privs): Likewise.
* locate/frcode.c (get_seclevel): Use exit status EXIT_FAILURE
instead of 1.
(outerr): Likewise.
(main): Likewise.
* locate/code.c (inerr): Use exit status EXIT_FAILURE instead of
1.
(outerr): Likewise.
* locate/word_io.c (getword): Use exit status EXIT_FAILURE instead of 1.
Use named constants for xargs exit codes.
* xargs/xargs.c (child_error): Use EXIT_SUCCESS instead of 0.
(enum XargsStatusValues): introduce named constants for the
various things that cause speicific exit codes.
(enum ClientStatusValues): Also introduce named constants for the
child's exit status.
(get_char_oct_or_hex_escape): Use EXIT_FAILURE instead of 1.
(get_input_delimiter): Likewise.
(main): Likewise.
(read_line): Likewise.
(read_string): Likewise.
(print_args): Likewise.
(xargs_do_exec): Likewise.
(wait_for_proc): Likewise.
(wait_for_proc): Use enum XargsStatusValues for exit codes.
(parse_num): Use EXIT_FAILURE instead of 1.
Signed-off-by: James Youngman <address@hidden>
---
ChangeLog | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++-
cfg.mk | 2 +-
doc/find-maint.texi | 2 +-
find/parser.c | 6 +-
find/tree.c | 1 +
find/util.c | 2 +-
lib/buildcmd.c | 1 +
lib/nextelem.c | 13 ------
lib/regextype.c | 1 +
lib/safe-atoi.c | 10 ++--
xargs/xargs.c | 48 ++++++++++++++++-------
11 files changed, 152 insertions(+), 40 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 58329a9..4659ec1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,108 @@
2010-04-02 James Youngman <address@hidden>
+ * build-aux/src-sniff.py (checkers): Avoid false positive with
+ sc_the_the.
+
+ Avoid false positives for sc_prohibit_atoi_atof.
+ * find/util.c (set_option_defaults): Avoid false positive with
+ sc_prohibit_atoi_atof.
+ (check_nofollow): Likewise.
+
+ * lib/Makefile.am (libfind_a_SOURCES): Add safe-atoi.c and
+ safe-atoi.h.
+
+ * find/ftsfind.c: We don't use anything from xalloc.h, so don't
+ #include it.
+
+ * import-gnulib.config (modules): Add maintainer-makefile.
+
+ Use named constants for xargs exit codes.
+ * xargs/xargs.c (child_error): Use EXIT_SUCCESS instead of 0.
+ (enum XargsStatusValues): introduce named constants for the
+ various things that cause speicific exit codes.
+ (enum ClientStatusValues): Also introduce named constants for the
+ child's exit status.
+ (get_char_oct_or_hex_escape): Use EXIT_FAILURE instead of 1.
+ (get_input_delimiter): Likewise.
+ (main): Likewise.
+ (read_line): Likewise.
+ (read_string): Likewise.
+ (print_args): Likewise.
+ (xargs_do_exec): Likewise.
+ (wait_for_proc): Likewise.
+ (wait_for_proc): Use enum XargsStatusValues for exit codes.
+ (parse_num): Use EXIT_FAILURE instead of 1.
+
+ Avoid using magic numbers as exit statuses.
+ * cfg.mk (skip_defer): Enable sc_prohibit_magic_number_exit.
+ * doc/find-maint.texi (Security): Avoid error (1, ...) in the
+ example patch.
+ * find/find.c (main): Use exit status EXIT_FAILURE instead of 1.
+ (wd_sanity_check): Likewise.
+ (safely_chdir_lstat): Likewise.
+ (process_dir): Likewise.
+ * find/fstype.c (must_read_fs_list): Likewise.
+ * find/ftsfind.c (main): Likewise.
+ (main): Likewise.
+ * find/parser.c (check_option_combinations): Use exit status
+ EXIT_FAILURE instead of 1.
+ (parse_group): Likewise.
+ (parse_help): Use exit status EXIT_SUCCESS instead of 0.
+ (parse_version): Likewise.
+ (fnmatch_sanitycheck): Use exit status EXIT_FAILURE instead of 1.
+ (insert_depthspec): Likewise.
+ (parse_newerXY): Likewise.
+ (non_posix_mode): Likewise.
+ (parse_perm): Likewise.
+ (insert_regex): Likewise.
+ (parse_size): Likewise.
+ (parse_show_control_chars): Likewise.
+ (parse_used): Likewise.
+ (parse_user): Likewise.
+ (parse_context): Likewise.
+ (insert_type): Likewise.
+ (insert_fprintf): Likewise.
+ (make_segment): Likewise.
+ (check_path_safety): Likewise.
+ (new_insert_exec_ok): Likewise.
+ (get_relative_timestamp): Likewise.
+ (parse_time): Likewise.
+ * find/tree.c (get_expr): Use exit status EXIT_FAILURE instead of 1.
+ (scan_rest): Likewise.
+ (get_pred_cost): Likewise.
+ (get_pred_cost): Likewise.
+ (build_expression_tree): Likewise.
+ (get_new_pred_chk_op): Likewise.
+ * find/pred.c (launch): Use exit status EXIT_FAILURE instead of 1.
+ * find/util.c (process_debug_options): Use exit status
+ EXIT_SUCCESS instead of 0.
+ (process_optimisation_option): Use exit status EXIT_FAILURE
+ instead of 1.
+ (set_option_defaults): Likewise.
+ * lib/buildcmd.c (exceeds): Likewise.
+ (bc_do_exec): Likewise.
+ (bc_push_arg): Likewise.
+ * lib/nextelem.c: Remove test code.
+ * lib/safe-atoi.c (safe_atoi): Use exit status EXIT_FAILURE
+ instead of 1.
+ * lib/regextype.c (get_regex_type): Use exit status EXIT_FAILURE
+ instead of 1. Include <stdlib.h>, for EXIT_FAILURE.
+ * locate/locate.c (set_max_db_age): Use exit status EXIT_FAILURE
+ instead of 1.
+ (set_max_db_age): Likewise.
+ (toolong): Likewise.
+ (visit_locate02_format): Likewise.
+ (search_one_database): Likewise.
+ (drop_privs): Likewise.
+ * locate/frcode.c (get_seclevel): Use exit status EXIT_FAILURE
+ instead of 1.
+ (outerr): Likewise.
+ (main): Likewise.
+ * locate/code.c (inerr): Use exit status EXIT_FAILURE instead of
+ 1.
+ (outerr): Likewise.
+ * locate/word_io.c (getword): Use exit status EXIT_FAILURE instead of 1.
+
Avoid sc_prohibit_stat_st_blocks check, since it is broken.
* cfg.mk (skip_broken_checks): Skip sc_prohibit_stat_st_blocks.
@@ -93,6 +196,7 @@
Various coding standard fixes.
* m4/withfts.m4: Quote the first argument of AC_DEFINE.
+ * configure.ac: Quote the first argument to AC_DEFINE.
* lib/regextype.c: Don't use HAVE_CONFIG_H.
* doc/find-maint.texi: Remove RCS keywords (they were in an
example security vulnerability announcement).
@@ -107,8 +211,6 @@
* find/fstype.c: Likewise.
* find/find.c: Likewise.
- * m4/withfts.m4: Quote the first argument of AC_DEFINE.
-
Coding standard fix: "Warning" should be "WARNING".
* find/find.c (dirchange_is_fatal): Change "Warning" to "WARNING".
* find/ftsfind.c (consider_visiting): Likewise.
diff --git a/cfg.mk b/cfg.mk
index ef981d5..46689fb 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -23,7 +23,7 @@ skip_dunno = sc_immutable_NEWS sc_makefile_at_at_check \
sc_prohibit_quote_without_use sc_prohibit_quotearg_without_use
# Understand, but fix later.
-skip_defer = sc_program_name sc_prohibit_magic_number_exit
+skip_defer = sc_program_name
# False positives I don't have a workaround for yet.
# sc_space_tab: several .xo test output files contain this sequence
diff --git a/doc/find-maint.texi b/doc/find-maint.texi
index 4f4dc0f..38b88ca 100644
--- a/doc/find-maint.texi
+++ b/doc/find-maint.texi
@@ -987,7 +987,7 @@ diff -u -p -r1.58.2.2 locate.c
+static void
+toolong (struct process_data *procdata)
address@hidden
-+ error (1, 0,
++ error (EXIT_FAILURE, 0,
+ _("locate database %s contains a "
+ "filename longer than locate can handle"),
+ procdata->dbfile);
diff --git a/find/parser.c b/find/parser.c
index 3406cd6..2fa302c 100644
--- a/find/parser.c
+++ b/find/parser.c
@@ -1258,7 +1258,7 @@ actions: -delete -print0 -printf FORMAT -fprintf FILE
FORMAT -print \n\
puts (_("Report (and track progress on fixing) bugs via the findutils
bug-reporting\n\
page at http://savannah.gnu.org/ or, if you have no web access, by sending\n\
email to <address@hidden>."));
- exit (0);
+ exit (EXIT_SUCCESS);
}
static float
@@ -2759,7 +2759,7 @@ parse_version (const struct parser_table* entry, char
**argv, int *arg_ptr)
}
printf ("\n");
- exit (0);
+ exit (EXIT_SUCCESS);
}
static boolean
@@ -3259,7 +3259,7 @@ check_path_safety (const char *action, char **argv)
"Please remove the current directory from your "
"$PATH (that is, remove \".\" or leading or trailing "
"colons)"),
- action);
+ action);
}
else if ('/' != s[0])
{
diff --git a/find/tree.c b/find/tree.c
index 5238e90..08f2f0a 100644
--- a/find/tree.c
+++ b/find/tree.c
@@ -196,6 +196,7 @@ get_expr (struct predicate **input,
|| ((*input)->p_type != CLOSE_PAREN))
error (EXIT_FAILURE, 0,
_("invalid expression; I was expecting to find a ')' somewhere
but did not see one."));
+
*input = (*input)->pred_next; /* move over close */
break;
diff --git a/find/util.c b/find/util.c
index 5a62fb1..9294f31 100644
--- a/find/util.c
+++ b/find/util.c
@@ -817,7 +817,7 @@ process_debug_options (char *arg)
else if (options.debug_options & DebugHelp)
{
show_valid_debug_options (stdout, 1);
- exit (0);
+ exit (EXIT_SUCCESS);
}
}
diff --git a/lib/buildcmd.c b/lib/buildcmd.c
index 901f381..23fa528 100644
--- a/lib/buildcmd.c
+++ b/lib/buildcmd.c
@@ -385,6 +385,7 @@ bc_push_arg (struct buildcmd_control *ctl,
if (initial_args || state->cmd_argc == ctl->initial_argc)
error (EXIT_FAILURE, 0,
_("can not fit single argument within argument list size
limit"));
+
/* xargs option -i (replace_pat) implies -x (exit_if_size_exceeded)
*/
if (ctl->replace_pat
|| (ctl->exit_if_size_exceeded &&
diff --git a/lib/nextelem.c b/lib/nextelem.c
index 2d42de0..c370c38 100644
--- a/lib/nextelem.c
+++ b/lib/nextelem.c
@@ -83,16 +83,3 @@ next_element (const char *new_path, int curdir_ok)
return start;
}
-
-#ifdef TEST
-int
-main ()
-{
- char *p;
-
- next_element (getenv ("PATH"));
- while (p = next_element (NULL))
- puts (p);
- exit (0);
-}
-#endif /* TEST */
diff --git a/lib/regextype.c b/lib/regextype.c
index 055218f..5b391dd 100644
--- a/lib/regextype.c
+++ b/lib/regextype.c
@@ -23,6 +23,7 @@
#include <stdlib.h>
#include <string.h>
+#include <stdlib.h>
#include <stdio.h>
#include "regextype.h"
diff --git a/lib/safe-atoi.c b/lib/safe-atoi.c
index 235d0e9..296ee3b 100644
--- a/lib/safe-atoi.c
+++ b/lib/safe-atoi.c
@@ -53,12 +53,12 @@ safe_atoi (const char *s, enum quoting_style style)
if (errno == ERANGE)
{
/* too big, or too small. */
- error (1, errno, "%s", s);
+ error (EXIT_FAILURE, errno, "%s", s);
}
else
{
/* not a valid number */
- error (1, errno, "%s", s);
+ error (EXIT_FAILURE, errno, "%s", s);
}
/* Otherwise, we do a range chack against INT_MAX and INT_MIN
* below.
@@ -69,17 +69,17 @@ safe_atoi (const char *s, enum quoting_style style)
{
/* The number was in range for long, but not int. */
errno = ERANGE;
- error (1, errno, "%s", s);
+ error (EXIT_FAILURE, errno, "%s", s);
}
else if (*end)
{
- error (1, errno, _("Unexpected suffix %s on %s"),
+ error (EXIT_FAILURE, errno, _("Unexpected suffix %s on %s"),
quotearg_n_style (0, style, end),
quotearg_n_style (1, style, s));
}
else if (end == s)
{
- error (1, errno, _("Expected an integer: %s"),
+ error (EXIT_FAILURE, errno, _("Expected an integer: %s"),
quotearg_n_style (0, style, s));
}
return (int)lval;
diff --git a/xargs/xargs.c b/xargs/xargs.c
index d8a0015..a4145c5 100644
--- a/xargs/xargs.c
+++ b/xargs/xargs.c
@@ -168,7 +168,7 @@ static pid_t parent;
/* Exit status; nonzero if any child process exited with a
status of 1-125. */
-static volatile int child_error = 0;
+static volatile int child_error = EXIT_SUCCESS;
static volatile int original_exit_value;
@@ -206,6 +206,23 @@ static struct option const longopts[] =
{NULL, no_argument, NULL, 0}
};
+/* xargs exits with status values with specific meanings (this is a POSIX
requirement).
+ These are the values.
+*/
+enum XargsStatusValues {
+ XARGS_EXIT_CLIENT_EXIT_NONZERO = 123, /* utility exited with nonzero status
*/
+ XARGS_EXIT_CLIENT_EXIT_255 = 124, /* utility exites with status 255 */
+ XARGS_EXIT_CLIENT_FATAL_SIG = 125, /* utility died from a fatal signal */
+ XARGS_EXIT_COMMAND_CANNOT_BE_RUN = 126, /* canot run the command */
+ XARGS_EXIT_COMMAND_NOT_FOUND = 127, /* cannot find the command */
+};
+/* Exit status values the child might use. */
+enum ClientStatusValues {
+ CHILD_EXIT_PLEASE_STOP_IMMEDIATELY = 255
+};
+
+
+
static int read_line PARAMS ((void));
static int read_string PARAMS ((void));
static boolean print_args PARAMS ((boolean ask));
@@ -370,7 +387,7 @@ main (int argc, char **argv)
program_name = argv[0];
parent = getpid ();
- original_exit_value = 0;
+ original_exit_value = EXIT_SUCCESS;
#ifdef HAVE_SETLOCALE
setlocale (LC_ALL, "");
@@ -1093,7 +1110,7 @@ xargs_do_exec (struct buildcmd_control *ctl, void
*usercontext, int argc, char *
case 0: /* Child. */
{
close (fd[0]);
- child_error = 0;
+ child_error = EXIT_SUCCESS;
prep_child_for_exec ();
@@ -1126,7 +1143,7 @@ xargs_do_exec (struct buildcmd_control *ctl, void
*usercontext, int argc, char *
/* The actual value returned here should be irrelevant,
* because the parent will test our value of errno.
*/
- _exit (errno == ENOENT ? 127 : 126);
+ _exit (errno == ENOENT ? XARGS_EXIT_COMMAND_NOT_FOUND :
XARGS_EXIT_COMMAND_CANNOT_BE_RUN);
/*NOTREACHED*/
} /* child */
@@ -1176,11 +1193,11 @@ xargs_do_exec (struct buildcmd_control *ctl, void
*usercontext, int argc, char *
}
else if (ENOENT == buf)
{
- exit (127); /* command cannot be found */
+ exit (XARGS_EXIT_COMMAND_NOT_FOUND); /* command cannot be found
*/
}
else
{
- exit (126); /* command cannot be run */
+ exit (XARGS_EXIT_COMMAND_CANNOT_BE_RUN); /* command cannot be
run */
}
break;
}
@@ -1328,14 +1345,17 @@ wait_for_proc (boolean all, unsigned int minreap)
procs_executing--;
reaped++;
- if (WEXITSTATUS (status) == 255)
- error (124, 0, _("%s: exited with status 255; aborting"),
bc_state.cmd_argv[0]);
+ if (WEXITSTATUS (status) == CHILD_EXIT_PLEASE_STOP_IMMEDIATELY)
+ error (XARGS_EXIT_CLIENT_EXIT_255, 0,
+ _("%s: exited with status 255; aborting"), bc_state.cmd_argv[0]);
if (WIFSTOPPED (status))
- error (125, 0, _("%s: stopped by signal %d"), bc_state.cmd_argv[0],
WSTOPSIG (status));
+ error (XARGS_EXIT_CLIENT_FATAL_SIG, 0,
+ _("%s: stopped by signal %d"), bc_state.cmd_argv[0], WSTOPSIG
(status));
if (WIFSIGNALED (status))
- error (125, 0, _("%s: terminated by signal %d"), bc_state.cmd_argv[0],
WTERMSIG (status));
+ error (XARGS_EXIT_CLIENT_FATAL_SIG, 0,
+ _("%s: terminated by signal %d"), bc_state.cmd_argv[0], WTERMSIG
(status));
if (WEXITSTATUS (status) != 0)
- child_error = 123;
+ child_error = XARGS_EXIT_CLIENT_EXIT_NONZERO;
}
}
@@ -1394,7 +1414,7 @@ parse_num (char *str, int option, long int min, long int
max, int fatal)
fprintf (stderr, _("%s: invalid number for -%c option\n"),
program_name, option);
usage (stderr);
- exit (1);
+ exit (EXIT_FAILURE);
}
else if (val < min)
{
@@ -1403,7 +1423,7 @@ parse_num (char *str, int option, long int min, long int
max, int fatal)
if (fatal)
{
usage (stderr);
- exit (1);
+ exit (EXIT_FAILURE);
}
else
{
@@ -1417,7 +1437,7 @@ parse_num (char *str, int option, long int min, long int
max, int fatal)
if (fatal)
{
usage (stderr);
- exit (1);
+ exit (EXIT_FAILURE);
}
else
{
--
1.7.0
- [Findutils-patches] Re: [PATCH 09/19] Remove some obsolete source files from POTFILES.in, (continued)
- [Findutils-patches] [PATCH 10/19] Remove files which exist but have no translated messages., James Youngman, 2010/04/02
- [Findutils-patches] [PATCH 11/19] Avoid sscanf. Avoid false positives for sc_prohibit_atoi_atof., James Youngman, 2010/04/02
- [Findutils-patches] [PATCH 07/19] configure.ac: Quote the first argument to AC_DEFINE., James Youngman, 2010/04/02
- [Findutils-patches] [PATCH 13/19] Enable syntax checker sc_the_the, detecting doubled 'the'., James Youngman, 2010/04/02
- [Findutils-patches] [PATCH 12/19] sc_prohibit_strcmp gives false positives when neither argument is a constant, so skip that check, James Youngman, 2010/04/02
- [Findutils-patches] [PATCH 14/19] Avoid sc_prohibit_stat_st_blocks check, since it is broken., James Youngman, 2010/04/02
- [Findutils-patches] [PATCH 16/19] Use set_program_name() to remember the programs' names., James Youngman, 2010/04/02
- [Findutils-patches] [PATCH 15/19] Avoid using magic numbers as exit statuses.,
James Youngman <=
- [Findutils-patches] [PATCH 18/19] cfg.mk: simplify variables, James Youngman, 2010/04/02
- [Findutils-patches] [PATCH 17/19] Don't include quote.h/quotearg.h where it is not used., James Youngman, 2010/04/02
- [Findutils-patches] [PATCH 19/19] Check for accidental modifications to the wrong section of the NEWS file., James Youngman, 2010/04/02