On Mon, Nov 18, 2013 at 11:09 PM, Philip Guenther <guent...@gmail.com> wrote: > On Mon, Nov 18, 2013 at 7:16 PM, Eitan Adler <li...@eitanadler.com> wrote:
> The argument passed to isupper must be "The argument to isupper() must > be EOF or representable as an unsigned char; otherwise, the result is > undefined." That's guaranteed by the current version, but the diff > breaks that, so no, this isn't right, unless I missed a check > somewhere that tosses all negative chars... Of similar interest: get_line assigns the a value representable by an unsigned char to a buffer of type 'char*'. The following diff avoids the issue while also fixing the warning. An alternative fix would be to change the intermediate 'char* 's to 'unsigned char*'. Index: fmt.c =================================================================== RCS file: /cvs/src/usr.bin/fmt/fmt.c,v retrieving revision 1.29 diff -u -r1.29 fmt.c --- fmt.c 17 Jan 2012 04:26:28 -0000 1.29 +++ fmt.c 19 Nov 2013 06:12:28 -0000 @@ -233,7 +233,7 @@ static void process_named_file(const char *); static void process_stream(FILE *, const char *); static size_t indent_length(const char *, size_t); -static int might_be_header(const unsigned char *); +static int might_be_header(const char *); static void new_paragraph(size_t, size_t); static void output_word(size_t, size_t, const char *, size_t, size_t); static void output_indent(size_t); @@ -385,7 +385,7 @@ HdrType header_type; /* ^-- header_type of previous line; -1 at para start */ - char *line; + const char *line; size_t length; if (centerP) { @@ -486,14 +486,14 @@ * conservative to avoid mangling ordinary civilised text. */ static int -might_be_header(const unsigned char *line) +might_be_header(const char *line) { - if (!isupper(*line++)) + if (!isupper((unsigned char)*line++)) return 0; - while (isalnum(*line) || *line == '-') + while (isalnum((unsigned char)*line) || *line == '-') ++line; - return (*line == ':' && isspace(line[1])); + return (*line == ':' && isspace((unsigned char)line[1])); } /* Begin a new paragraph with an indent of |indent| spaces. -- Eitan Adler