mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-20 17:22:11 +01:00
This fixes #60543:
* glib/gutils.c (g_snprintf, g_vsnprintf): Switch to C99-[v]snprintf(). * tests/strfunc-test.c: Add some tests for g_snprintf().
This commit is contained in:
parent
3fa33317b7
commit
a99e75d0a8
@ -1,3 +1,11 @@
|
|||||||
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
|
This fixes #60543:
|
||||||
|
|
||||||
|
* glib/gutils.c (g_snprintf, g_vsnprintf): Switch to C99-[v]snprintf().
|
||||||
|
|
||||||
|
* tests/strfunc-test.c: Add some tests for g_snprintf().
|
||||||
|
|
||||||
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
|
This fixes #60543:
|
||||||
|
|
||||||
|
* glib/gutils.c (g_snprintf, g_vsnprintf): Switch to C99-[v]snprintf().
|
||||||
|
|
||||||
|
* tests/strfunc-test.c: Add some tests for g_snprintf().
|
||||||
|
|
||||||
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
|
This fixes #60543:
|
||||||
|
|
||||||
|
* glib/gutils.c (g_snprintf, g_vsnprintf): Switch to C99-[v]snprintf().
|
||||||
|
|
||||||
|
* tests/strfunc-test.c: Add some tests for g_snprintf().
|
||||||
|
|
||||||
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
|
This fixes #60543:
|
||||||
|
|
||||||
|
* glib/gutils.c (g_snprintf, g_vsnprintf): Switch to C99-[v]snprintf().
|
||||||
|
|
||||||
|
* tests/strfunc-test.c: Add some tests for g_snprintf().
|
||||||
|
|
||||||
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
|
This fixes #60543:
|
||||||
|
|
||||||
|
* glib/gutils.c (g_snprintf, g_vsnprintf): Switch to C99-[v]snprintf().
|
||||||
|
|
||||||
|
* tests/strfunc-test.c: Add some tests for g_snprintf().
|
||||||
|
|
||||||
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
|
This fixes #60543:
|
||||||
|
|
||||||
|
* glib/gutils.c (g_snprintf, g_vsnprintf): Switch to C99-[v]snprintf().
|
||||||
|
|
||||||
|
* tests/strfunc-test.c: Add some tests for g_snprintf().
|
||||||
|
|
||||||
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
|
This fixes #60543:
|
||||||
|
|
||||||
|
* glib/gutils.c (g_snprintf, g_vsnprintf): Switch to C99-[v]snprintf().
|
||||||
|
|
||||||
|
* tests/strfunc-test.c: Add some tests for g_snprintf().
|
||||||
|
|
||||||
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
|
This fixes #60543:
|
||||||
|
|
||||||
|
* glib/gutils.c (g_snprintf, g_vsnprintf): Switch to C99-[v]snprintf().
|
||||||
|
|
||||||
|
* tests/strfunc-test.c: Add some tests for g_snprintf().
|
||||||
|
|
||||||
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
* glib/gconvert.c, glib/grand.c, glib/ghash.c,
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
|
* glib/tmpl/string_utils.sgml: Correct docs for g_[v]snprintf.
|
||||||
|
|
||||||
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
2001-12-12 Matthias Clasen <matthiasc@poet.de>
|
||||||
|
|
||||||
* glib/tmpl/allocators.sgml, glib/tmpl/arrays.sgml,
|
* glib/tmpl/allocators.sgml, glib/tmpl/arrays.sgml,
|
||||||
|
@ -173,17 +173,28 @@ See also g_strdup_printf().
|
|||||||
<note>
|
<note>
|
||||||
<para>
|
<para>
|
||||||
In versions of GLib prior to 1.2.3, this function may return -1 if the output
|
In versions of GLib prior to 1.2.3, this function may return -1 if the output
|
||||||
was truncated, and the truncated string may not be nul-terminated.
|
was truncated, and the truncated string may not be nul-terminated.
|
||||||
|
In versions prior to 1.3.12, this function returns the length of the output
|
||||||
|
string.
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
<note>
|
||||||
|
<para>
|
||||||
|
The return value of g_snprintf() conforms to the <function>snprintf()</function>
|
||||||
|
function as standardized in ISO C99. Note that this is different from
|
||||||
|
traditional <function>snprintf()</function>, which returns the length of
|
||||||
|
the output string.
|
||||||
</para>
|
</para>
|
||||||
</note>
|
</note>
|
||||||
|
|
||||||
@string: the buffer to hold the output.
|
@string: the buffer to hold the output.
|
||||||
@n: the maximum number of characters to produce (including the terminating null
|
@n: the maximum number of characters to produce (including the terminating nul
|
||||||
character).
|
character).
|
||||||
@format: the format string. See the <function>sprintf()</function>
|
@format: the format string. See the <function>sprintf()</function>.
|
||||||
documentation.
|
documentation.
|
||||||
@Varargs: the arguments to insert in the output.
|
@Varargs: the arguments to insert in the output.
|
||||||
@Returns: the length of the output string.
|
@Returns: the number of characters which would be produced if the buffer was
|
||||||
|
large enough.
|
||||||
|
|
||||||
|
|
||||||
<!-- ##### FUNCTION g_vsnprintf ##### -->
|
<!-- ##### FUNCTION g_vsnprintf ##### -->
|
||||||
@ -200,16 +211,27 @@ See also g_strdup_vprintf().
|
|||||||
<para>
|
<para>
|
||||||
In versions of GLib prior to 1.2.3, this function may return -1 if the output
|
In versions of GLib prior to 1.2.3, this function may return -1 if the output
|
||||||
was truncated, and the truncated string may not be nul-terminated.
|
was truncated, and the truncated string may not be nul-terminated.
|
||||||
|
In versions prior to 1.3.12, this function returns the length of the output
|
||||||
|
string.
|
||||||
|
</para>
|
||||||
|
</note>
|
||||||
|
<note>
|
||||||
|
<para>
|
||||||
|
The return value of g_vsnprintf() conforms to the <function>vsnprintf()</function>
|
||||||
|
function as standardized in ISO C99. Note that this is different from
|
||||||
|
traditional <function>vsnprintf()</function>, which returns the length of
|
||||||
|
the output string.
|
||||||
</para>
|
</para>
|
||||||
</note>
|
</note>
|
||||||
|
|
||||||
@string: the buffer to hold the output.
|
@string: the buffer to hold the output.
|
||||||
@n: the maximum number of characters to produce (including the terminating null
|
@n: the maximum number of characters to produce (including the terminating nul
|
||||||
character).
|
character).
|
||||||
@format: the format string. See the <function>sprintf()</function>
|
@format: the format string. See the <function>sprintf()</function>
|
||||||
documentation.
|
documentation.
|
||||||
@args: the list of arguments to insert in the output.
|
@args: the list of arguments to insert in the output.
|
||||||
@Returns: the length of the output string.
|
@Returns: the number of characters which would be produced if the buffer was
|
||||||
|
large enough.
|
||||||
|
|
||||||
|
|
||||||
<!-- ##### FUNCTION g_printf_string_upper_bound ##### -->
|
<!-- ##### FUNCTION g_printf_string_upper_bound ##### -->
|
||||||
|
@ -341,44 +341,14 @@ g_snprintf (gchar *str,
|
|||||||
gchar const *fmt,
|
gchar const *fmt,
|
||||||
...)
|
...)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_VSNPRINTF
|
|
||||||
va_list args;
|
va_list args;
|
||||||
gint retval;
|
gint retval;
|
||||||
|
|
||||||
g_return_val_if_fail (str != NULL, 0);
|
|
||||||
g_return_val_if_fail (n > 0, 0);
|
|
||||||
g_return_val_if_fail (fmt != NULL, 0);
|
|
||||||
|
|
||||||
va_start (args, fmt);
|
va_start (args, fmt);
|
||||||
retval = vsnprintf (str, n, fmt, args);
|
retval = g_vsnprintf (str, n, fmt, args);
|
||||||
va_end (args);
|
va_end (args);
|
||||||
|
|
||||||
if (retval < 0)
|
|
||||||
{
|
|
||||||
str[n-1] = '\0';
|
|
||||||
retval = strlen (str);
|
|
||||||
}
|
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
#else /* !HAVE_VSNPRINTF */
|
|
||||||
gchar *printed;
|
|
||||||
va_list args;
|
|
||||||
|
|
||||||
g_return_val_if_fail (str != NULL, 0);
|
|
||||||
g_return_val_if_fail (n > 0, 0);
|
|
||||||
g_return_val_if_fail (fmt != NULL, 0);
|
|
||||||
|
|
||||||
va_start (args, fmt);
|
|
||||||
printed = g_strdup_vprintf (fmt, args);
|
|
||||||
va_end (args);
|
|
||||||
|
|
||||||
strncpy (str, printed, n);
|
|
||||||
str[n-1] = '\0';
|
|
||||||
|
|
||||||
g_free (printed);
|
|
||||||
|
|
||||||
return strlen (str);
|
|
||||||
#endif /* !HAVE_VSNPRINTF */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
gint
|
||||||
@ -387,37 +357,30 @@ g_vsnprintf (gchar *str,
|
|||||||
gchar const *fmt,
|
gchar const *fmt,
|
||||||
va_list args)
|
va_list args)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_VSNPRINTF
|
#ifdef HAVE_VSNPRINTF_C99
|
||||||
gint retval;
|
g_return_val_if_fail (n == 0 || str != NULL, 0);
|
||||||
|
|
||||||
g_return_val_if_fail (str != NULL, 0);
|
|
||||||
g_return_val_if_fail (n > 0, 0);
|
|
||||||
g_return_val_if_fail (fmt != NULL, 0);
|
g_return_val_if_fail (fmt != NULL, 0);
|
||||||
|
|
||||||
retval = vsnprintf (str, n, fmt, args);
|
return vsnprintf (str, n, fmt, args);
|
||||||
|
#else /* !HAVE_VSNPRINTF_C99 */
|
||||||
if (retval < 0)
|
|
||||||
{
|
|
||||||
str[n-1] = '\0';
|
|
||||||
retval = strlen (str);
|
|
||||||
}
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
#else /* !HAVE_VSNPRINTF */
|
|
||||||
gchar *printed;
|
gchar *printed;
|
||||||
|
gint retval;
|
||||||
g_return_val_if_fail (str != NULL, 0);
|
|
||||||
g_return_val_if_fail (n > 0, 0);
|
g_return_val_if_fail (n == 0 || str != NULL, 0);
|
||||||
g_return_val_if_fail (fmt != NULL, 0);
|
g_return_val_if_fail (fmt != NULL, 0);
|
||||||
|
|
||||||
printed = g_strdup_vprintf (fmt, args);
|
printed = g_strdup_vprintf (fmt, args);
|
||||||
strncpy (str, printed, n);
|
retval = strlen (printed);
|
||||||
str[n-1] = '\0';
|
if (n > 0)
|
||||||
|
{
|
||||||
|
strncpy (str, printed, n - 1);
|
||||||
|
str[n-1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
g_free (printed);
|
g_free (printed);
|
||||||
|
|
||||||
return strlen (str);
|
return retval;
|
||||||
#endif /* !HAVE_VSNPRINTF */
|
#endif /* !HAVE_VSNPRINTF_C99 */
|
||||||
}
|
}
|
||||||
|
|
||||||
guint
|
guint
|
||||||
|
@ -383,5 +383,15 @@ main (int argc,
|
|||||||
|
|
||||||
#undef S
|
#undef S
|
||||||
|
|
||||||
|
{
|
||||||
|
gchar buf[5];
|
||||||
|
|
||||||
|
TEST (NULL, 3 == g_snprintf (buf, 0, "%s", "abc"));
|
||||||
|
TEST (NULL, 3 == g_snprintf (NULL,0, "%s", "abc"));
|
||||||
|
TEST (NULL, 3 == g_snprintf (buf, 5, "%s", "abc"));
|
||||||
|
TEST (NULL, 4 == g_snprintf (buf, 5, "%s", "abcd"));
|
||||||
|
TEST (NULL, 9 == g_snprintf (buf, 5, "%s", "abcdefghi"));
|
||||||
|
}
|
||||||
|
|
||||||
return any_failed;
|
return any_failed;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user