i18n: New function recode_string_len().
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 13 Feb 2011 00:37:10 +0000 (16:37 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 20 Mar 2011 16:41:55 +0000 (09:41 -0700)
src/libpspp/i18n.c
src/libpspp/i18n.h
tests/libpspp/i18n-test.c

index 13a46a53c46cc86a19ac80228b4ebd14c035d7e5..29148a0e7a9789cf9cbee7c5d6ac764c83f8ff10 100644 (file)
@@ -110,6 +110,17 @@ recode_string (const char *to, const char *from,
   return recode_string_pool (to, from, text, length, NULL);
 }
 
+/* Returns the length, in bytes, of the string that a similar recode_string()
+   call would return. */
+size_t
+recode_string_len (const char *to, const char *from,
+                   const char *text, int length)
+{
+  char *s = recode_string (to, from, text, length);
+  size_t len = strlen (s);
+  free (s);
+  return len;
+}
 
 /* Uses CONV to convert the INBYTES starting at IP into the OUTBYTES starting
    at OP, and appends a null terminator to the output.
index 2f55a6903d3848617ded2744ee1f5426c22d9805..78a97378cb75dcbae05f2e58db62785ea33622d7 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2006, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2010, 2011 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -41,6 +41,9 @@ char *recode_string_pool (const char *to, const char *from,
 struct substring recode_substring_pool (const char *to, const char *from,
                                         struct substring text, struct pool *);
 
+size_t recode_string_len (const char *to, const char *from,
+                          const char *text, int len);
+
 bool valid_encoding (const char *enc);
 
 char get_system_decimal (void);
index f2bead96f78e6bd1412e2bc925c4bbbf43407b9d..03b96f2e431ba9a4ad993cc7dc93856afdd743af 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2011 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 
 #include "libpspp/i18n.h"
 
+#undef NDEBUG
+#include <assert.h>
+
 int
 main (int argc, char *argv[])
 {
@@ -40,6 +44,7 @@ main (int argc, char *argv[])
   i18n_init ();
   s = recode_string (argv[2], argv[1], argv[3], -1);
   puts (s);
+  assert (strlen (s) == recode_string_len (argv[2], argv[1], argv[3], -1));
   free (s);
 
   return 0;