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

Reply via email to