X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fmodechange.c;h=991235b09cc1809cf15cea779d86e001cd3fb047;hb=8912e6d4dccc2f3b7d125229ef9ee05dda1f36ed;hp=8cec11d41fc404cc847f1cd97f94aa87beaaedf0;hpb=e31dcbfaafaf17b42b55b3b3ad8d07b6e498acdd;p=gnulib.git diff --git a/lib/modechange.c b/lib/modechange.c index 8cec11d41..991235b09 100644 --- a/lib/modechange.c +++ b/lib/modechange.c @@ -1,7 +1,7 @@ /* modechange.c -- file mode manipulation - Copyright (C) 1989, 1990, 1997, 1998, 1999, 2001, 2003 Free Software - Foundation, Inc. + Copyright (C) 1989, 1990, 1997, 1998, 1999, 2001, 2003, 2004 Free + Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,13 +33,9 @@ #include "modechange.h" #include #include "xstrtol.h" +#include #include - -#if STDC_HEADERS -# include -#else -char *malloc (); -#endif +#include #if STAT_MACROS_BROKEN # undef S_ISDIR @@ -215,24 +211,21 @@ mode_compile (const char *mode_string, unsigned int masked_ops) umask_value = umask (0); umask (umask_value); /* Restore the old value. */ - --mode_string; /* One loop iteration for each "ugoa...=+-rwxXstugo...[=+-rwxXstugo...]". */ - do + for (;; mode_string++) { /* Which bits in the mode are operated on. */ mode_t affected_bits = 0; /* `affected_bits' modified by umask. */ mode_t affected_masked; /* Operators to actually use umask on. */ - unsigned ops_to_mask = 0; + unsigned int ops_to_mask = 0; - int who_specified_p; + bool who_specified_p; - affected_bits = 0; - ops_to_mask = 0; /* Turn on all the bits in `affected_bits' for each group given. */ - for (++mode_string;; ++mode_string) + for (;; mode_string++) switch (*mode_string) { case 'u': @@ -255,10 +248,10 @@ mode_compile (const char *mode_string, unsigned int masked_ops) /* If none specified, affect all bits, except perhaps those set in the umask. */ if (affected_bits) - who_specified_p = 1; + who_specified_p = true; else { - who_specified_p = 0; + who_specified_p = false; affected_bits = CHMOD_MODE_BITS; ops_to_mask = masked_ops; } @@ -355,7 +348,11 @@ mode_compile (const char *mode_string, unsigned int masked_ops) } no_more_values:; } - } while (*mode_string == ','); + + if (*mode_string != ',') + break; + } + if (*mode_string == 0) return head; invalid: