m4-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: a type fix, obstack_print


From: Eric Blake
Subject: Re: a type fix, obstack_print
Date: Sat, 23 Feb 2008 10:02:08 -0700
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071031 Thunderbird/2.0.0.9 Mnenhy/0.7.5.666

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Eric Blake on 2/23/2008 9:00 AM:
| I'll go one step further, and make the branch consistently use size_t for
| --arglength and truncation.
|
| But on the head, I named the comparable M4 function
| m4_shipout_string_trunc rather than obstack_print, so maybe I'll use a
| name along those lines.  I'll get something committed later today.

Like so.

- --
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFHwFGP84KuGfSFAYARAgwlAJ9MyuavGFPCm+73aS4gNWjzS96XdACgmTDu
dbIQY4S77Z8G4WT8D1x3hx8=
=YRra
-----END PGP SIGNATURE-----
>From 0b1129f73235ba35fa46f1afcef5bd5c0cdbf73c Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Sat, 23 Feb 2008 09:30:43 -0700
Subject: [PATCH] s/shipout_text/divert_text/.

* src/m4.h (shipout_text): Rename...
(divert_text): ...to this, so that shipout_ prefix can be used for
functions that do not do #line tracking.
* src/output.c (divert_text): Rename.
* src/macro.c (expand_token): Adjust all callers.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog    |    7 +++++++
 src/m4.h     |    2 +-
 src/macro.c  |    8 ++++----
 src/output.c |    2 +-
 4 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 1269290..e902f67 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2008-02-23  Eric Blake  <address@hidden>
 
+       s/shipout_text/divert_text/.
+       * src/m4.h (shipout_text): Rename...
+       (divert_text): ...to this, so that shipout_ prefix can be used for
+       functions that do not do #line tracking.
+       * src/output.c (divert_text): Rename.
+       * src/macro.c (expand_token): Adjust all callers.
+
        Stage 18: try harder to reuse argv in recursion.
        When pushing arguments that contain an existing $@ ref, reuse the
        ref rather than creating another layer of wrappers.
diff --git a/src/m4.h b/src/m4.h
index 54deb42..037482d 100644
--- a/src/m4.h
+++ b/src/m4.h
@@ -424,7 +424,7 @@ extern int output_current_line;
 void output_init (void);
 void output_exit (void);
 void output_text (const char *, int);
-void shipout_text (struct obstack *, const char *, int, int);
+void divert_text (struct obstack *, const char *, int, int);
 void make_diversion (int);
 void insert_diversion (int);
 void insert_file (FILE *);
diff --git a/src/macro.c b/src/macro.c
index 32ff62d..b81697a 100644
--- a/src/macro.c
+++ b/src/macro.c
@@ -305,10 +305,10 @@ expand_token (struct obstack *obs, token_type t, 
token_data *td, int line,
              && peek_token () != TOKEN_OPEN))
        {
 #ifdef ENABLE_CHANGEWORD
-         shipout_text (obs, TOKEN_DATA_ORIG_TEXT (td),
-                       TOKEN_DATA_LEN (td), line);
+         divert_text (obs, TOKEN_DATA_ORIG_TEXT (td),
+                      TOKEN_DATA_LEN (td), line);
 #else
-         shipout_text (obs, TOKEN_DATA_TEXT (td), TOKEN_DATA_LEN (td), line);
+         divert_text (obs, TOKEN_DATA_TEXT (td), TOKEN_DATA_LEN (td), line);
 #endif /* !ENABLE_CHANGEWORD */
          /* The word just appended is unquoted, but the heuristics of
             safe_quote are applicable.  */
@@ -324,7 +324,7 @@ expand_token (struct obstack *obs, token_type t, token_data 
*td, int line,
       assert (!"expand_token");
       abort ();
     }
-  shipout_text (obs, TOKEN_DATA_TEXT (td), TOKEN_DATA_LEN (td), line);
+  divert_text (obs, TOKEN_DATA_TEXT (td), TOKEN_DATA_LEN (td), line);
   return result;
 }
 
diff --git a/src/output.c b/src/output.c
index d252d74..73a0e47 100644
--- a/src/output.c
+++ b/src/output.c
@@ -469,7 +469,7 @@ output_text (const char *text, int length)
 `--------------------------------------------------------------------*/
 
 void
-shipout_text (struct obstack *obs, const char *text, int length, int line)
+divert_text (struct obstack *obs, const char *text, int length, int line)
 {
   static bool start_of_output_line = true;
   const char *cursor;
-- 
1.5.4


>From c91769acf89e163c06e86be0f17022572f33bbab Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Sat, 23 Feb 2008 09:42:02 -0700
Subject: [PATCH] s/obstack_print/shipout_string_trunc/.

* src/m4.h (obstack_print): Rename...
(shipout_string_trunc): ...to this, to leave obstack_ prefix for
actual obstack API.
* src/debug.c (trace_format): Adjust caller.
(obstack_print): Move...
* src/output.c (shipout_string_trunc): ...here, including rename.
* src/input.c (input_print): Adjust caller.
* src/macro.c (arg_print): Likewise.
Reported by Ralf Wildenhues.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog    |   11 +++++++++++
 src/debug.c  |   30 +-----------------------------
 src/input.c  |    6 +++---
 src/m4.h     |    2 +-
 src/macro.c  |   23 ++++++++++++++---------
 src/output.c |   29 +++++++++++++++++++++++++++++
 6 files changed, 59 insertions(+), 42 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e902f67..2211052 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 2008-02-23  Eric Blake  <address@hidden>
 
+       s/obstack_print/shipout_string_trunc/.
+       * src/m4.h (obstack_print): Rename...
+       (shipout_string_trunc): ...to this, to leave obstack_ prefix for
+       actual obstack API.
+       * src/debug.c (trace_format): Adjust caller.
+       (obstack_print): Move...
+       * src/output.c (shipout_string_trunc): ...here, including rename.
+       * src/input.c (input_print): Adjust caller.
+       * src/macro.c (arg_print): Likewise.
+       Reported by Ralf Wildenhues.
+
        s/shipout_text/divert_text/.
        * src/m4.h (shipout_text): Rename...
        (divert_text): ...to this, so that shipout_ prefix can be used for
diff --git a/src/debug.c b/src/debug.c
index 737ee52..1c0c99b 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -294,7 +294,7 @@ trace_format (const char *fmt, ...)
          break;
        }
 
-      if (obstack_print (&trace, s, SIZE_MAX, &maxlen))
+      if (shipout_string_trunc (&trace, s, SIZE_MAX, &maxlen))
        break;
     }
 
@@ -401,31 +401,3 @@ trace_post (const char *name, int id, macro_arguments 
*argv,
     trace_format (" -> %l%B%r", expanded);
   trace_flush ();
 }
-
-/* Dump the string STR of length LEN to the obstack OBS.  If LEN is
-   SIZE_MAX, use strlen (STR) instead.  If MAX_LEN is non-NULL,
-   truncate the dump at MAX_LEN bytes and return true if MAX_LEN was
-   reached; otherwise, return false and update MAX_LEN as
-   appropriate.  */
-bool
-obstack_print (struct obstack *obs, const char *str, size_t len, int *max_len)
-{
-  int max = max_len ? *max_len : INT_MAX;
-
-  if (len == SIZE_MAX)
-    len = strlen (str);
-  if (len < max)
-    {
-      obstack_grow (obs, str, len);
-      max -= len;
-    }
-  else
-    {
-      obstack_grow (obs, str, max);
-      obstack_grow (obs, "...", 3);
-      max = 0;
-    }
-  if (max_len)
-    *max_len = max;
-  return max == 0;
-}
diff --git a/src/input.c b/src/input.c
index e2bf0aa..e2d332a 100644
--- a/src/input.c
+++ b/src/input.c
@@ -687,7 +687,7 @@ input_print (struct obstack *obs, const input_block *input)
   switch (input->type)
     {
     case INPUT_STRING:
-      obstack_print (obs, input->u.u_s.str, input->u.u_s.len, &maxlen);
+      shipout_string_trunc (obs, input->u.u_s.str, input->u.u_s.len, &maxlen);
       break;
     case INPUT_FILE:
       obstack_grow (obs, "<file: ", strlen ("<file: "));
@@ -704,8 +704,8 @@ input_print (struct obstack *obs, const input_block *input)
          switch (chain->type)
            {
            case CHAIN_STR:
-             if (obstack_print (obs, chain->u.u_s.str, chain->u.u_s.len,
-                                &maxlen))
+             if (shipout_string_trunc (obs, chain->u.u_s.str,
+                                       chain->u.u_s.len, &maxlen))
                return;
              break;
            case CHAIN_ARGV:
diff --git a/src/m4.h b/src/m4.h
index 037482d..7694ba0 100644
--- a/src/m4.h
+++ b/src/m4.h
@@ -249,7 +249,6 @@ void trace_pre (const char *, int, macro_arguments *);
 void trace_post (const char *, int, macro_arguments *,
                 const input_block *);
 
-bool obstack_print (struct obstack *, const char *, size_t, int *);
 
 /* File: input.c  --- lexical definitions.  */
 
@@ -425,6 +424,7 @@ void output_init (void);
 void output_exit (void);
 void output_text (const char *, int);
 void divert_text (struct obstack *, const char *, int, int);
+bool shipout_string_trunc (struct obstack *, const char *, size_t, int *);
 void make_diversion (int);
 void insert_diversion (int);
 void insert_file (FILE *);
diff --git a/src/macro.c b/src/macro.c
index b81697a..366584a 100644
--- a/src/macro.c
+++ b/src/macro.c
@@ -1212,23 +1212,27 @@ arg_print (struct obstack *obs, macro_arguments *argv, 
unsigned int index,
     {
       if (quote_each && max_len)
        len = *max_len;
-      if (use_sep && obstack_print (obs, sep, sep_len, plen))
+      if (use_sep && shipout_string_trunc (obs, sep, sep_len, plen))
        return true;
       use_sep = true;
       token = arg_token (argv, i, NULL);
       switch (TOKEN_DATA_TYPE (token))
        {
        case TOKEN_TEXT:
-         if (quotes && obstack_print (obs, quotes->str1, quotes->len1, plen))
+         if (quotes && shipout_string_trunc (obs, quotes->str1, quotes->len1,
+                                             plen))
            return true;
-         if (obstack_print (obs, TOKEN_DATA_TEXT (token),
-                            TOKEN_DATA_LEN (token), &len) && !quote_each)
+         if (shipout_string_trunc (obs, TOKEN_DATA_TEXT (token),
+                                   TOKEN_DATA_LEN (token), &len)
+             && !quote_each)
            return true;
-         if (quotes && obstack_print (obs, quotes->str2, quotes->len2, plen))
+         if (quotes && shipout_string_trunc (obs, quotes->str2, quotes->len2,
+                                             plen))
            return true;
          break;
        case TOKEN_COMP:
-         if (quotes && obstack_print (obs, quotes->str1, quotes->len1, plen))
+         if (quotes && shipout_string_trunc (obs, quotes->str1, quotes->len1,
+                                             plen))
            return true;
          chain = token->u.u_c.chain;
          done = false;
@@ -1237,8 +1241,8 @@ arg_print (struct obstack *obs, macro_arguments *argv, 
unsigned int index,
              switch (chain->type)
                {
                case CHAIN_STR:
-                 if (obstack_print (obs, chain->u.u_s.str, chain->u.u_s.len,
-                                    &len))
+                 if (shipout_string_trunc (obs, chain->u.u_s.str,
+                                           chain->u.u_s.len, &len))
                    done = true;
                  break;
                case CHAIN_ARGV:
@@ -1256,7 +1260,8 @@ arg_print (struct obstack *obs, macro_arguments *argv, 
unsigned int index,
            }
          if (done && !quote_each)
            return true;
-         if (quotes && obstack_print (obs, quotes->str2, quotes->len2, plen))
+         if (quotes && shipout_string_trunc (obs, quotes->str2, quotes->len2,
+                                             plen))
            return true;
          break;
        case TOKEN_FUNC:
diff --git a/src/output.c b/src/output.c
index 73a0e47..56ac1f4 100644
--- a/src/output.c
+++ b/src/output.c
@@ -571,6 +571,35 @@ divert_text (struct obstack *obs, const char *text, int 
length, int line)
        }
     }
 }
+
+/* Dump the string STR of length LEN to the obstack OBS.  If LEN is
+   SIZE_MAX, use strlen (STR) instead.  If MAX_LEN is non-NULL,
+   truncate the dump at MAX_LEN bytes and return true if MAX_LEN was
+   reached; otherwise, return false and update MAX_LEN as
+   appropriate.  */
+bool
+shipout_string_trunc (struct obstack *obs, const char *str, size_t len,
+                     int *max_len)
+{
+  int max = max_len ? *max_len : INT_MAX;
+
+  if (len == SIZE_MAX)
+    len = strlen (str);
+  if (len < max)
+    {
+      obstack_grow (obs, str, len);
+      max -= len;
+    }
+  else
+    {
+      obstack_grow (obs, str, max);
+      obstack_grow (obs, "...", 3);
+      max = 0;
+    }
+  if (max_len)
+    *max_len = max;
+  return max == 0;
+}
 
 /* Functions for use by diversions.  */
 
-- 
1.5.4


>From 9d400bc11d96c313d041e73b8f7b9a2d069d1ae5 Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Sat, 23 Feb 2008 09:58:03 -0700
Subject: [PATCH] Use size_t consistently for string length truncation.

* src/m4.h (max_debug_argument_length): Change type to size_t.
(shipout_string_trunc, arg_print): Change parameter type.
* src/debug.c (trace_format, trace_pre): Adjust all callers.
* src/input.c (input_print): Likewise.
* src/m4.c (max_debug_argument_length, main): Likewise.
* src/macro.c (arg_print): Likewise.
* src/output.c (shipout_string_trunc): Likewise.
Reported by Ralf Wildenhues.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog    |   10 ++++++++++
 src/debug.c  |    6 +++---
 src/input.c  |    2 +-
 src/m4.c     |    9 +++++----
 src/m4.h     |    6 +++---
 src/macro.c  |    4 ++--
 src/output.c |    4 ++--
 7 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 2211052..f867f1f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2008-02-23  Eric Blake  <address@hidden>
 
+       Use size_t consistently for string length truncation.
+       * src/m4.h (max_debug_argument_length): Change type to size_t.
+       (shipout_string_trunc, arg_print): Change parameter type.
+       * src/debug.c (trace_format, trace_pre): Adjust all callers.
+       * src/input.c (input_print): Likewise.
+       * src/m4.c (max_debug_argument_length, main): Likewise.
+       * src/macro.c (arg_print): Likewise.
+       * src/output.c (shipout_string_trunc): Likewise.
+       Reported by Ralf Wildenhues.
+
        s/obstack_print/shipout_string_trunc/.
        * src/m4.h (obstack_print): Rename...
        (shipout_string_trunc): ...to this, to leave obstack_ prefix for
diff --git a/src/debug.c b/src/debug.c
index 1c0c99b..46e1306 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -248,7 +248,7 @@ trace_format (const char *fmt, ...)
   char ch;
   int d;
   const char *s;
-  int maxlen;
+  size_t maxlen;
 
   va_start (args, fmt);
 
@@ -260,7 +260,7 @@ trace_format (const char *fmt, ...)
       if (ch == '\0')
        break;
 
-      maxlen = INT_MAX;
+      maxlen = SIZE_MAX;
       switch (*fmt++)
        {
        case 'B':
@@ -364,7 +364,7 @@ trace_pre (const char *name, int id, macro_arguments *argv)
 
   if (arg_argc (argv) > 1 && (debug_level & DEBUG_TRACE_ARGS))
     {
-      int len = max_debug_argument_length;
+      size_t len = max_debug_argument_length;
       trace_format ("(");
       arg_print (&trace, argv, 1,
                 (debug_level & DEBUG_TRACE_QUOTE) ? &curr_quote : NULL,
diff --git a/src/input.c b/src/input.c
index e2d332a..9d8b8f3 100644
--- a/src/input.c
+++ b/src/input.c
@@ -680,7 +680,7 @@ pop_wrapup (void)
 void
 input_print (struct obstack *obs, const input_block *input)
 {
-  int maxlen = max_debug_argument_length;
+  size_t maxlen = max_debug_argument_length;
   token_chain *chain;
 
   assert (input);
diff --git a/src/m4.c b/src/m4.c
index 0ace6dc..fe8c548 100644
--- a/src/m4.c
+++ b/src/m4.c
@@ -47,7 +47,7 @@ int no_gnu_extensions = 0;
 int prefix_all_builtins = 0;
 
 /* Max length of arguments in trace output (-lsize).  */
-int max_debug_argument_length = INT_MAX;
+size_t max_debug_argument_length = SIZE_MAX;
 
 /* Suppress warnings about missing arguments.  */
 int suppress_warnings = 0;
@@ -572,9 +572,10 @@ main (int argc, char *const *argv, char *const *envp)
        break;
 
       case 'l':
-       max_debug_argument_length = atoi (optarg);
-       if (max_debug_argument_length <= 0)
-         max_debug_argument_length = INT_MAX;
+       {
+         int tmp = atoi (optarg);
+         max_debug_argument_length = tmp <= 0 ? SIZE_MAX : (size_t) tmp;
+       }
        break;
 
       case 'o':
diff --git a/src/m4.h b/src/m4.h
index 7694ba0..7e35acc 100644
--- a/src/m4.h
+++ b/src/m4.h
@@ -129,7 +129,7 @@ extern int debug_level;                     /* -d */
 extern size_t hash_table_size;         /* -H */
 extern int no_gnu_extensions;          /* -G */
 extern int prefix_all_builtins;                /* -P */
-extern int max_debug_argument_length;  /* -l */
+extern size_t max_debug_argument_length;/* -l */
 extern int suppress_warnings;          /* -Q */
 extern int warning_status;             /* -E */
 extern int nesting_limit;              /* -L */
@@ -424,7 +424,7 @@ void output_init (void);
 void output_exit (void);
 void output_text (const char *, int);
 void divert_text (struct obstack *, const char *, int, int);
-bool shipout_string_trunc (struct obstack *, const char *, size_t, int *);
+bool shipout_string_trunc (struct obstack *, const char *, size_t, size_t *);
 void make_diversion (int);
 void insert_diversion (int);
 void insert_file (FILE *);
@@ -500,7 +500,7 @@ size_t arg_len (macro_arguments *, unsigned int);
 builtin_func *arg_func (macro_arguments *, unsigned int);
 struct obstack *arg_scratch (void);
 bool arg_print (struct obstack *, macro_arguments *, unsigned int,
-               const string_pair *, bool, const char *, int *, bool);
+               const string_pair *, bool, const char *, size_t *, bool);
 macro_arguments *make_argv_ref (macro_arguments *, const char *, size_t,
                                bool, bool);
 void push_arg (struct obstack *, macro_arguments *, unsigned int);
diff --git a/src/macro.c b/src/macro.c
index 366584a..0846f8d 100644
--- a/src/macro.c
+++ b/src/macro.c
@@ -1194,9 +1194,9 @@ arg_scratch (void)
 bool
 arg_print (struct obstack *obs, macro_arguments *argv, unsigned int index,
           const string_pair *quotes, bool flatten, const char *sep,
-          int *max_len, bool quote_each)
+          size_t *max_len, bool quote_each)
 {
-  int len = max_len ? *max_len : INT_MAX;
+  size_t len = max_len ? *max_len : INT_MAX;
   unsigned int i;
   token_data *token;
   token_chain *chain;
diff --git a/src/output.c b/src/output.c
index 56ac1f4..7b2d6de 100644
--- a/src/output.c
+++ b/src/output.c
@@ -579,9 +579,9 @@ divert_text (struct obstack *obs, const char *text, int 
length, int line)
    appropriate.  */
 bool
 shipout_string_trunc (struct obstack *obs, const char *str, size_t len,
-                     int *max_len)
+                     size_t *max_len)
 {
-  int max = max_len ? *max_len : INT_MAX;
+  size_t max = max_len ? *max_len : INT_MAX;
 
   if (len == SIZE_MAX)
     len = strlen (str);
-- 
1.5.4


reply via email to

[Prev in Thread] Current Thread [Next in Thread]