posix-xprintf-functions.patch from patch #6230.
authorBen Pfaff <blp@gnu.org>
Sat, 13 Oct 2007 04:35:25 +0000 (04:35 +0000)
committerBen Pfaff <blp@gnu.org>
Sat, 13 Oct 2007 04:35:25 +0000 (04:35 +0000)
Add fprintf-posix, printf-posix, printf-safe,
snprintf-posix, sprintf-posix, vasprintf-posxi, vfprintf-posix,
vprintf-posix, vsnprintf-posix, and vsprintf-posix modules, which
allow us to use C99 format specifiers (e.g. 'z') in *printf.
Also, changed many formerly casted arguments in *printf calls to
use one of these format specifiers and drop the cast.

22 files changed:
ChangeLog
Smake
src/data/datasheet.c
src/data/por-file-reader.c
src/data/sys-file-reader.c
src/language/data-io/file-handle.q
src/language/data-io/get.c
src/language/data-io/placement-parser.c
src/language/data-io/print.c
src/language/dictionary/modify-variables.c
src/language/dictionary/rename-variables.c
src/language/dictionary/sys-file-info.c
src/language/lexer/lexer.c
src/language/stats/aggregate.c
src/language/stats/autorecode.c
src/language/stats/npar.q
src/language/stats/oneway.q
src/language/stats/t-test.q
src/language/tests/float-format.c
src/language/tests/moments-test.c
src/language/xforms/recode.c
tests/automake.mk

index e18976e8907b78fe866daaac45b916e29b4e23b1..7e1e8ea95441f9833c7f12548f322220973047d6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2007-10-12  Ben Pfaff  <blp@gnu.org>
+
+       * Smake: Add fprintf-posix, printf-posix, printf-safe,
+       snprintf-posix, sprintf-posix, vasprintf-posxi, vfprintf-posix,
+       vprintf-posix, vsnprintf-posix, and vsprintf-posix modules, which
+       allow us to use C99 format specifiers (e.g. 'z') in *printf.
+       Also, changed many formerly casted arguments in *printf calls to
+       use one of these format specifiers and drop the cast.
 2007-10-11  Ben Pfaff  <blp@gnu.org>
 
        * Smake: Drop alloca, alloca-opt modules as we don't use them
diff --git a/Smake b/Smake
index edb247e8fb417626d2e1b4f90cc0631169e597d7..21e6a22410a6131f0c3944850eed6e075d7e9064 100644 (file)
--- a/Smake
+++ b/Smake
@@ -13,6 +13,7 @@ GNULIB_MODULES = \
        dirname \
        exit \
        fpieee \
+       fprintf-posix \
        full-read \
        full-write \
         fseeko \
@@ -37,9 +38,13 @@ GNULIB_MODULES = \
        memset \
        minmax \
        mkstemp \
+       printf-posix \
+       printf-safe \
        progname \
        relocatable-prog \
        snprintf \
+       snprintf-posix \
+       sprintf-posix \
        stdarg \
        stdbool \
        stdint \
@@ -57,7 +62,12 @@ GNULIB_MODULES = \
        tmpfile \
        unistd \
        unlocked-io \
+       vasprintf-posix \
+       vfprintf-posix \
+       vprintf-posix \
        vsnprintf \
+       vsnprintf-posix \
+       vsprintf-posix \
        xalloc \
        xalloc-die \
        xmalloca \
index 4115cf02dd1935a4562376c78bc75f1d977700fc..842e9c3adf426ffbfccec1405ed46520b088fa6d 100644 (file)
@@ -1374,8 +1374,8 @@ check_datasheet (struct mc *mc, struct datasheet *ds,
     mc_error (mc, "row count (%lu) does not match expected (%zu)",
               (unsigned long int) datasheet_get_row_cnt (ds), row_cnt);
   else if (column_cnt != datasheet_get_column_cnt (ds))
-    mc_error (mc, "column count (%lu) does not match expected (%zu)",
-              (unsigned long int) datasheet_get_column_cnt (ds), column_cnt);
+    mc_error (mc, "column count (%zu) does not match expected (%zu)",
+              datasheet_get_column_cnt (ds), column_cnt);
   else
     {
       size_t row, col;
index 4636d5fb806cf82b81124f0515c96a9f89feb965..37ae23351a03fb332a4009381c6847cd30de2e40 100644 (file)
@@ -515,9 +515,9 @@ read_version_data (struct pfm_reader *r, struct pfm_read_info *info)
 
   /* Validate file. */
   if (strlen (date) != 8)
-    error (r, _("Bad date string length %d."), (int) strlen (date));
+    error (r, _("Bad date string length %zu."), strlen (date));
   if (strlen (time) != 6)
-    error (r, _("Bad time string length %d."), (int) strlen (time));
+    error (r, _("Bad time string length %zu."), strlen (time));
 
   /* Save file info. */
   if (info != NULL)
index baa0c0e617d048dc64a791693c4bd476f5294bb3..de9ae0d655f831e7097f696581bca5164ca8be8d 100644 (file)
@@ -509,8 +509,8 @@ read_variable_record (struct sfm_reader *r, struct dictionary *dict,
 
       len = read_int (r);
       if (len >= sizeof label)
-        sys_error (r, _("Variable %s has label of invalid length %u."),
-                   name, (unsigned int) len);
+        sys_error (r, _("Variable %s has label of invalid length %zu."),
+                   name, len);
       read_string (r, label, len + 1);
       var_set_label (var, label);
 
@@ -608,7 +608,7 @@ parse_format_spec (struct sfm_reader *r, unsigned int s,
   bool ok;
 
   if (!fmt_from_io (raw_type, &f.type))
-    sys_error (r, _("Unknown variable format %d."), (int) raw_type);
+    sys_error (r, _("Unknown variable format %"PRIu8"."), raw_type);
   f.w = w;
   f.d = d;
 
@@ -769,9 +769,9 @@ read_machine_integer_info (struct sfm_reader *r, size_t size, size_t count,
   int expected_integer_format;
 
   if (size != 4 || count != 8)
-    sys_error (r, _("Bad size (%u) or count (%u) field on record type 7, "
+    sys_error (r, _("Bad size (%zu) or count (%zu) field on record type 7, "
                     "subtype 3."),
-               (unsigned int) size, (unsigned int) count);
+                size, count);
 
   /* Save version info. */
   info->version_major = version_major;
@@ -819,8 +819,8 @@ read_machine_float_info (struct sfm_reader *r, size_t size, size_t count)
   double lowest = read_float (r);
 
   if (size != 8 || count != 3)
-    sys_error (r, _("Bad size (%u) or count (%u) on extension 4."),
-               (unsigned int) size, (unsigned int) count);
+    sys_error (r, _("Bad size (%zu) or count (%zu) on extension 4."),
+               size, count);
 
   if (sysmis != SYSMIS)
     sys_warn (r, _("File specifies unexpected value %g as SYSMIS."), sysmis);
@@ -841,8 +841,8 @@ read_display_parameters (struct sfm_reader *r, size_t size, size_t count,
   int i;
 
   if (count % 3 || n_vars != dict_get_var_cnt (dict))
-    sys_error (r, _("Bad size (%u) or count (%u) on extension 11."),
-               (unsigned int) size, (unsigned int) count);
+    sys_error (r, _("Bad size (%zu) or count (%zu) on extension 11."),
+               size, count);
 
   for (i = 0; i < n_vars; ++i)
     {
@@ -1082,8 +1082,8 @@ read_value_labels (struct sfm_reader *r,
   var_cnt = read_int (r);
   if (var_cnt < 1 || var_cnt > dict_get_var_cnt (dict))
     sys_error (r, _("Number of variables associated with a value label (%d) "
-                    "is not between 1 and the number of variables (%u)."),
-               var_cnt, (unsigned int) dict_get_var_cnt (dict));
+                    "is not between 1 and the number of variables (%zu)."),
+               var_cnt, dict_get_var_cnt (dict));
 
   /* Read the list of variables. */
   var = pool_nalloc (subpool, var_cnt, sizeof *var);
index 7845ca3337e82d5fdfa000c03e0dd674c38a95d2..71cc961f7227d4e1646a59d098fff9c4a87162d0 100644 (file)
@@ -96,12 +96,12 @@ cmd_file_handle (struct lexer *lexer, struct dataset *ds)
       if (cmd.n_lrecl[0] == LONG_MIN)
         msg (SE, _("Fixed-length records were specified on /RECFORM, but "
                    "record length was not specified on /LRECL.  "
-                   "Assuming %u-character records."),
-             (unsigned int) properties.record_width);
+                   "Assuming %zu-character records."),
+             properties.record_width);
       else if (cmd.n_lrecl[0] < 1)
         msg (SE, _("Record length (%ld) must be at least one byte.  "
-                   "Assuming %u-character records."),
-             cmd.n_lrecl[0], (unsigned int) properties.record_width);
+                   "Assuming %zu-character records."),
+             cmd.n_lrecl[0], properties.record_width);
       else
         properties.record_width = cmd.n_lrecl[0];
       break;
index e34ea79923191761b46edc2cc085e37992aca419..574656b9d62380a531b46b94f024f0401d3ecdb0 100644 (file)
@@ -564,10 +564,10 @@ rename_variables (struct lexer *lexer, struct dictionary *dict)
        goto done;
       if (nn != nv)
        {
-         msg (SE, _("Number of variables on left side of `=' (%d) does not "
-                     "match number of variables on right side (%d), in "
+         msg (SE, _("Number of variables on left side of `=' (%zu) does not "
+                     "match number of variables on right side (%zu), in "
                      "parenthesized group %d of RENAME subcommand."),
-              (unsigned) (nv - old_nv), (unsigned) (nn - old_nv), group);
+              nv - old_nv, nn - old_nv, group);
          goto done;
        }
       if (!lex_force_match (lexer, ')'))
index bdd204da6b6d87e573a94948de02f9f361724dd6..679049d73dd463dadc56e022066fad726d2f2ea7 100644 (file)
@@ -82,9 +82,9 @@ parse_var_placements (struct lexer *lexer, struct pool *pool, size_t var_cnt, bo
 
       if (assignment_cnt != var_cnt)
         {
-          msg (SE, _("Number of variables specified (%d) "
-                     "differs from number of variable formats (%d)."),
-               (int) var_cnt, (int) assignment_cnt);
+          msg (SE, _("Number of variables specified (%zu) "
+                     "differs from number of variable formats (%zu)."),
+               var_cnt, assignment_cnt);
           return false;
         }
 
@@ -115,8 +115,8 @@ fixed_parse_columns (struct lexer *lexer, struct pool *pool, size_t var_cnt, boo
   if ((lc - fc + 1) % var_cnt)
     {
       msg (SE, _("The %d columns %d-%d "
-                "can't be evenly divided into %u fields."),
-          lc - fc + 1, fc, lc, (unsigned int) var_cnt);
+                "can't be evenly divided into %zu fields."),
+          lc - fc + 1, fc, lc, var_cnt);
       return false;
     }
 
index 67dfa1290aab8a1bdd8754b77632e21269500640..8ec63c4d4f2431a392bae04446c01516fee85563 100644 (file)
@@ -256,9 +256,9 @@ parse_specs (struct lexer *lexer, struct pool *tmp_pool, struct print_trns *trns
     }
 
   if (trns->record_cnt != 0 && trns->record_cnt != record)
-    msg (SW, _("Output calls for %d records but %u specified on RECORDS "
+    msg (SW, _("Output calls for %d records but %zu specified on RECORDS "
                "subcommand."),
-         record, (unsigned int) trns->record_cnt);
+         record, trns->record_cnt);
   trns->record_cnt = record;
 
   return true;
index d9a72f3549eab1b61086b4322b06b9b44a55fe4c..9fc6fa55c452c3a03ffeba7e7e6633c376f48bc2 100644 (file)
@@ -206,9 +206,8 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds)
              if (prev_nv_1 != vm.rename_cnt)
                {
                  msg (SE, _("Differing number of variables in old name list "
-                      "(%d) and in new name list (%d)."),
-                      (int) (vm.rename_cnt - prev_nv_2),
-                       (int) (prev_nv_1 - prev_nv_2));
+                             "(%zu) and in new name list (%zu)."),
+                      vm.rename_cnt - prev_nv_2, prev_nv_1 - prev_nv_2);
                  for (i = 0; i < prev_nv_1; i++)
                    free (vm.new_names[i]);
                  free (vm.new_names);
index 3179efda3748498090a7a8603165adffc86ae8d7..90117ff69ede1ea6a33b1cb7a4aa65761dbe0ba3 100644 (file)
@@ -74,9 +74,8 @@ cmd_rename_variables (struct lexer *lexer, struct dataset *ds)
           size_t i;
 
          msg (SE, _("Differing number of variables in old name list "
-                     "(%d) and in new name list (%d)."),
-              (int) (rename_cnt - prev_nv_2),
-               (int) (prev_nv_1 - prev_nv_2));
+                     "(%zu) and in new name list (%zu)."),
+              rename_cnt - prev_nv_2, prev_nv_1 - prev_nv_2);
          for (i = 0; i < prev_nv_1; i++)
            free (rename_new_names[i]);
          free (rename_new_names);
index 48703b4a76f68ef59e0412f23e6324f201a9b352..2369b99ec809d92679b21e9c69ae186ea346e101 100644 (file)
@@ -130,8 +130,7 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED)
             : info.float_format == FLOAT_Z_LONG ? _("IBM 390 Hex Long.")
             : _("Unknown."));
   tab_text (t, 0, 5, TAB_LEFT, _("Variables:"));
-  tab_text (t, 1, 5, TAB_LEFT | TAT_PRINTF, "%u",
-            (unsigned int) dict_get_var_cnt (d));
+  tab_text (t, 1, 5, TAB_LEFT | TAT_PRINTF, "%zu", dict_get_var_cnt (d));
   tab_text (t, 0, 6, TAB_LEFT, _("Cases:"));
   tab_text (t, 1, 6, TAB_LEFT | TAT_PRINTF,
             info.case_cnt == -1 ? _("Unknown") : "%ld",
@@ -424,8 +423,8 @@ display_variables (const struct variable **vl, size_t n, int as)
             }
          if (as != AS_NAMES)
            {
-             tab_text (t, pc, r, TAT_PRINTF, "%d",
-                        (int) var_get_dict_index (v) + 1);
+             tab_text (t, pc, r, TAT_PRINTF, "%zu",
+                        var_get_dict_index (v) + 1);
              tab_hline (t, TAL_1, 0, nc - 1, r);
            }
          r++;
@@ -459,7 +458,7 @@ describe_variable (const struct variable *v, struct tab_table *t, int r, int as)
 
   /* Put the name, var label, and position into the first row. */
   tab_text (t, 0, r, TAB_LEFT, var_get_name (v));
-  tab_text (t, 3, r, TAT_PRINTF, "%d", (int) var_get_dict_index (v) + 1);
+  tab_text (t, 3, r, TAT_PRINTF, "%zu", var_get_dict_index (v) + 1);
 
   if (as == AS_DICTIONARY && var_has_label (v))
     {
@@ -647,7 +646,7 @@ display_vectors (const struct dictionary *dict, int sorted)
           char fmt_string[FMT_STRING_LEN_MAX + 1];
           fmt_to_string (var_get_print_format (var), fmt_string);
 
-          tab_text (t, 1, row, TAB_RIGHT | TAT_PRINTF, "%d", (int) j + 1);
+          tab_text (t, 1, row, TAB_RIGHT | TAT_PRINTF, "%zu", j + 1);
           tab_text (t, 2, row, TAB_LEFT, var_get_name (var));
           tab_text (t, 3, row, TAB_LEFT, fmt_string);
           row++;
index 2af520ac646cd94998708869ec6eecb3e3fa50e4..79657df7d52793ec2b9cc8f385947de13bac3203 100644 (file)
@@ -1069,9 +1069,9 @@ convert_numeric_string_to_char_string (struct lexer *lexer,
 
   byte_cnt = ds_length (&lexer->tokstr) / chars_per_byte;
   if (ds_length (&lexer->tokstr) % chars_per_byte)
-    msg (SE, _("String of %s digits has %d characters, which is not a "
+    msg (SE, _("String of %s digits has %zu characters, which is not a "
               "multiple of %d."),
-        base_name, (int) ds_length (&lexer->tokstr), chars_per_byte);
+        base_name, ds_length (&lexer->tokstr), chars_per_byte);
 
   p = ds_cstr (&lexer->tokstr);
   for (i = 0; i < byte_cnt; i++)
@@ -1207,8 +1207,8 @@ finish:
 
   if (ds_length (&lexer->tokstr) > 255)
     {
-      msg (SE, _("String exceeds 255 characters in length (%d characters)."),
-          (int) ds_length (&lexer->tokstr));
+      msg (SE, _("String exceeds 255 characters in length (%zu characters)."),
+          ds_length (&lexer->tokstr));
       ds_truncate (&lexer->tokstr, 255);
     }
 
index b464a2890c7285c33474e3f82e2d26356232e912..c9d68d35da70867fccfaf92f0b7f5a1b08322f86 100644 (file)
@@ -485,8 +485,8 @@ parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict, s
                  }
                 else
                   {
-                   msg (SE, _("Missing argument %d to %s."),
-                         (int) i + 1, function->name);
+                   msg (SE, _("Missing argument %zu to %s."),
+                         i + 1, function->name);
                    goto error;
                  }
 
@@ -516,9 +516,9 @@ parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict, s
             like `unknown variable t'. */
          if (n_src != n_dest)
            {
-             msg (SE, _("Number of source variables (%u) does not match "
-                        "number of target variables (%u)."),
-                  (unsigned) n_src, (unsigned) n_dest);
+             msg (SE, _("Number of source variables (%zu) does not match "
+                        "number of target variables (%zu)."),
+                   n_src, n_dest);
              goto error;
            }
 
index 8b64ff3df14361247bcaf749c47483e8f00aaa50..af9280b557c5669e4ec0033de09b8c17ca4c2e9d 100644 (file)
@@ -133,9 +133,9 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds)
     {
       size_t i;
 
-      msg (SE, _("Source variable count (%u) does not match "
-                 "target variable count (%u)."),
-           (unsigned) arc.var_cnt, (unsigned) dst_cnt);
+      msg (SE, _("Source variable count (%zu) does not match "
+                 "target variable count (%zu)."),
+           arc.var_cnt, dst_cnt);
 
       for (i = 0; i < dst_cnt; i++)
         free (arc.dst_names[i]);
index a49dec0b9a5233c62653ca62c6632a93bae5a885..688ce2379bc103eaed0ce6f1b230a951053f0743 100644 (file)
@@ -423,8 +423,8 @@ parse_two_sample_related_test (struct lexer *lexer,
        {
          if ( n_vlist1 != n_vlist2)
            msg (SE, _("PAIRED was specified but the number of variables "
-                      "preceding WITH (%d) did not match the number "
-                      "following (%d)."), (int) n_vlist1, (int) n_vlist2);
+                      "preceding WITH (%zu) did not match the number "
+                      "following (%zu)."), n_vlist1, n_vlist2);
 
          test_parameters->n_pairs = n_vlist1 ;
        }
index d10dbb5b6b311f14dbdeb9fbde1b947fb141152d..8215d6b85434b39c2886e14e5760ee5f7d237d43 100644 (file)
@@ -175,8 +175,7 @@ output_oneway(void)
        sum += subc_list_double_at(&cmd.dl_contrast[i],j);
 
       if ( sum != 0.0 )
-       msg(SW,_("Coefficients for contrast %d do not total zero"),
-            (int) i + 1);
+       msg(SW,_("Coefficients for contrast %zu do not total zero"), i + 1);
     }
 
   if ( stat_tables & STAT_DESC )
index 79e5bf6167cb42aeef71137a7fadd98e6000bfe3..23237072c4651a24868e411fa60fb355b667b78d 100644 (file)
@@ -484,9 +484,9 @@ tts_custom_pairs (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *cm
        {
          free (vars);
          msg (SE, _("PAIRED was specified but the number of variables "
-                    "preceding WITH (%d) did not match the number "
-                    "following (%d)."),
-              (int) n_before_WITH, (int) n_after_WITH );
+                    "preceding WITH (%zu) did not match the number "
+                    "following (%zu)."),
+               n_before_WITH, n_after_WITH);
          return 0;
        }
       n_pairs_local = n_before_WITH;
index 9e6f777cfc5eb75bf965a25338b6e24c828c0dc2..fed19479d2fe8043ee1a060e88b49b2fc4221c3e 100644 (file)
@@ -121,8 +121,9 @@ parse_fp (struct lexer *lexer, struct fp *fp)
         {
           if (length != float_get_size (fp->format))
             {
-              msg (SE, _("%d-byte string needed but %d-byte string supplied."),
-                   (int) float_get_size (fp->format), (int) length);
+              msg (SE, _("%zu-byte string needed but %zu-byte string "
+                         "supplied."),
+                   float_get_size (fp->format), length);
               return false;
             }
           assert (length <= sizeof fp->data);
index 0e10b7fdab67b96b2698a402f2c9dc665660ccde..91a679394ca20a22a8bc3d9927c1f4bb7678861d 100644 (file)
@@ -123,7 +123,7 @@ cmd_debug_moments (struct lexer *lexer, struct dataset *ds UNUSED)
   fprintf (stderr, "W=%.3f", weight);
   for (i = 0; i < 4; i++)
     {
-      fprintf (stderr, " M%d=", (int) i + 1);
+      fprintf (stderr, " M%zu=", i + 1);
       if (M[i] == SYSMIS)
         fprintf (stderr, "sysmis");
       else if (fabs (M[i]) <= 0.0005)
index 08bece5dd689a069b0e5f2548aedd710b1ebf313..f4ae92f43e4c5161578468b1ce86712ea2077933 100644 (file)
@@ -436,10 +436,10 @@ parse_dst_vars (struct lexer *lexer, struct recode_trns *trns,
 
       if (name_cnt != trns->var_cnt)
         {
-          msg (SE, _("%u variable(s) cannot be recoded into "
-                     "%u variable(s).  Specify the same number "
+          msg (SE, _("%zu variable(s) cannot be recoded into "
+                     "%zu variable(s).  Specify the same number "
                      "of variables as source and target variables."),
-               (unsigned) trns->var_cnt, (unsigned) name_cnt);
+               trns->var_cnt, name_cnt);
           return false;
         }
 
index 5e6e2369cd38b68100608fa3b70083e618d2e741..58400ac0749c8e7da4d7b6a86c33907104c583f5 100644 (file)
@@ -161,6 +161,7 @@ tests_libpspp_ll_test_SOURCES = \
        src/libpspp/ll.c \
        src/libpspp/ll.h \
        tests/libpspp/ll-test.c
+tests_libpspp_ll_test_LDADD = gl/libgl.la @LIBINTL@
 
 tests_libpspp_llx_test_SOURCES = \
        src/libpspp/ll.c \
@@ -168,6 +169,7 @@ tests_libpspp_llx_test_SOURCES = \
        src/libpspp/llx.c \
        src/libpspp/llx.h \
        tests/libpspp/llx-test.c
+tests_libpspp_llx_test_LDADD = gl/libgl.la @LIBINTL@
 
 tests_libpspp_heap_test_SOURCES = \
        src/libpspp/heap.c \