mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-04-11 06:34:40 +02:00
* [MAX]: Macro renamed from max and moved to top of file.
* (bytes_to_octal_digits): New static array. * (get_format_flags): Combine '+' and ' ' cases of switch stmt. Return count if for loop terminates. Otherwise --suffix=%- would lose. * (get_format_width): Use `bytes_to_octal_digits' instead of just 11. * (get_format_prec): Make sure is_negative is defined before used. * (get_format_conv_type): Give a different error message if there is no conversion specifier. Test ISPRINT (ch) instead of `ch < '~' && ch > ' ''. * (max_out): Use `%%' rather than `%' in format string.
This commit is contained in:
86
src/csplit.c
86
src/csplit.c
@@ -34,6 +34,10 @@ char *malloc ();
|
||||
char *realloc ();
|
||||
#endif
|
||||
|
||||
#ifndef MAX
|
||||
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
void error ();
|
||||
|
||||
|
||||
@@ -123,6 +127,13 @@ struct buffer_record
|
||||
/* The name this program was run with. */
|
||||
char *program_name;
|
||||
|
||||
/* Convert the number of 8-bit bytes of a binary representation to
|
||||
the number of characters required to represent the same quantity
|
||||
as an unsigned octal. For example, a 32-bit (4-byte) quantity may
|
||||
require a field width as wide as 11 characters. */
|
||||
static const unsigned int bytes_to_octal_digits[] =
|
||||
{0, 3, 6, 8, 11, 14, 16, 19, 22, 25, 27, 30, 32, 35, 38, 41, 43};
|
||||
|
||||
/* Input file descriptor. */
|
||||
static int input_desc = 0;
|
||||
|
||||
@@ -1255,26 +1266,26 @@ get_format_flags (format_ptr)
|
||||
unsigned count = 0;
|
||||
|
||||
for (; **format_ptr; (*format_ptr)++)
|
||||
switch (**format_ptr)
|
||||
{
|
||||
case '-':
|
||||
break;
|
||||
{
|
||||
switch (**format_ptr)
|
||||
{
|
||||
case '-':
|
||||
break;
|
||||
|
||||
case '+':
|
||||
count++;
|
||||
break;
|
||||
case '+':
|
||||
case ' ':
|
||||
count++;
|
||||
break;
|
||||
|
||||
case ' ':
|
||||
count++;
|
||||
break;
|
||||
case '#':
|
||||
count += 2; /* Allow for 0x prefix preceeding an `x' conversion. */
|
||||
break;
|
||||
|
||||
case '#':
|
||||
count += 2; /* Allow for 0x prefix preceeding an `x' conversion */
|
||||
break;
|
||||
|
||||
default:
|
||||
return count;
|
||||
}
|
||||
default:
|
||||
return count;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
static unsigned
|
||||
@@ -1293,12 +1304,10 @@ get_format_width (format_ptr)
|
||||
ch_save = **format_ptr;
|
||||
**format_ptr = '\0';
|
||||
/* In the case where no minimum field width is explicitly specified,
|
||||
allow for enough digits to encode (in octal) the value of LONG_MAX
|
||||
for a 32 bit machine. If the user attempts to use csplit to create
|
||||
anywhere near 077777777777 output files... well... he'll probably
|
||||
run into other problems before he runs out of space in the area set
|
||||
aside to hold the filenames. */
|
||||
count = (*format_ptr == start) ? 11 : atoi (start);
|
||||
allow for enough octal digits to represent the value of LONG_MAX. */
|
||||
count = ((*format_ptr == start)
|
||||
? bytes_to_octal_digits[sizeof (long)]
|
||||
: atoi (start));
|
||||
**format_ptr = ch_save;
|
||||
return count;
|
||||
}
|
||||
@@ -1321,13 +1330,17 @@ get_format_prec (format_ptr)
|
||||
is_negative = (**format_ptr == '-');
|
||||
(*format_ptr)++;
|
||||
}
|
||||
else
|
||||
{
|
||||
is_negative = 0;
|
||||
}
|
||||
|
||||
start = *format_ptr;
|
||||
for (; **format_ptr; (*format_ptr)++)
|
||||
if (**format_ptr < '0' || **format_ptr > '9')
|
||||
break;
|
||||
|
||||
/* ANSI 4.9.6.1 says that is the precision is negative, it's as good as
|
||||
/* ANSI 4.9.6.1 says that if the precision is negative, it's as good as
|
||||
not there. */
|
||||
if (is_negative)
|
||||
start = *format_ptr;
|
||||
@@ -1348,21 +1361,26 @@ get_format_conv_type (format_ptr)
|
||||
|
||||
switch (ch)
|
||||
{
|
||||
case 'd': case 'i': case 'o': case 'u': case 'x': case 'X':
|
||||
case 'd':
|
||||
case 'i':
|
||||
case 'o':
|
||||
case 'u':
|
||||
case 'x':
|
||||
case 'X':
|
||||
break;
|
||||
|
||||
case 0:
|
||||
error (1, 0, "missing conversion specifier in suffix");
|
||||
break;
|
||||
|
||||
default:
|
||||
if (ch < '~' && ch > ' ')
|
||||
if (ISPRINT (ch))
|
||||
error (1, 0, "invalid conversion specifier in suffix: %c", ch);
|
||||
else
|
||||
error (1, 0, "invalid conversion specifier in suffix: \\%.3o", ch);
|
||||
error (1, 0, "invalid conversion specifier in suffix: \\%.3o", ch);
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef max
|
||||
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
static unsigned
|
||||
max_out (format)
|
||||
char *format;
|
||||
@@ -1384,16 +1402,16 @@ max_out (format)
|
||||
int width = get_format_width (&format);
|
||||
int prec = get_format_prec (&format);
|
||||
|
||||
out_count += max (width, prec);
|
||||
out_count += MAX (width, prec);
|
||||
}
|
||||
get_format_conv_type (&format);
|
||||
}
|
||||
}
|
||||
|
||||
if (percents == 0)
|
||||
error (1, 0, "missing % conversion specification in suffix");
|
||||
error (1, 0, "missing %% conversion specification in suffix");
|
||||
else if (percents > 1)
|
||||
error (1, 0, "too many % conversion specification in suffix");
|
||||
error (1, 0, "too many %% conversion specifications in suffix");
|
||||
|
||||
return out_count;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user