pike.git/
src/
stralloc.c
Branch:
Tag:
Non-build tags
All tags
No tags
2004-11-06
2004-11-06 17:55:34 by Henrik Grubbström (Grubba) <grubba@grubba.org>
7b9fd1ec3a146951740c2e0319cb7977e70a0e77 (
38
lines) (+
36
/-
2
)
[
Show
|
Annotate
]
Branch:
7.9
string_builder_vsprintf() should now support %ws, %ls and %lls.
Rev: src/stralloc.c:1.185
2:
|| This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information.
-
|| $Id: stralloc.c,v 1.
184
2004/11/06 17:
34
:
02
grubba Exp $
+
|| $Id: stralloc.c,v 1.
185
2004/11/06 17:
55:
34 grubba Exp $
*/ #include "global.h"
2397:
case 'h': flags |= APPEND_WIDTH_HALF; continue;
+
+
case 'w': /* Same as l, but for %s. */
case 'l': if (flags & APPEND_WIDTH_LONG) { flags |= APPEND_WIDTH_LONG_LONG;
2418:
} break; case 'S':
+
/* Note: On some platforms this is an alias for %ls, so if you
+
* want to output wchar_t strings, use %ls instead!
+
*/
{ struct pike_string *str = va_arg(args, struct pike_string *); size_t len = str->len;
2438:
} break; case 's':
-
{
+
if (flags & APPEND_WIDTH_LONG)
{
+
/* Wide string: %ws, %ls or %lls
+
*/
+
PCHARP str;
+
size_t len;
+
if ((flags & APPEND_WIDTH_LONG)== APPEND_WIDTH_LONG) {
+
str = MKPCHARP(va_arg(args, p_wchar1 *), 1);
+
} else {
+
str = MKPCHARP(va_arg(args, p_wchar2 *), 2);
+
}
+
len = pcharp_strlen(str);
+
if (precision && precision < len) len = precision;
+
if (min_width > len) {
+
if (flags & APPEND_LEFT) {
+
string_builder_append(s, str, len);
+
string_builder_fill(s, min_width - len, MKPCHARP(" ", 0),
+
4, 0);
+
} else {
+
string_builder_fill(s, min_width - len, MKPCHARP(" ", 0),
+
4, 0);
+
string_builder_append(s, str, len);
+
}
+
} else {
+
string_builder_append(s, str, len);
+
}
+
} else {
const char *str = va_arg(args, char *); size_t len = strlen(str); if (precision && precision < len) len = precision;
2487:
flags | APPEND_SIGNED, min_width, precision); break;
+
+
/* FIMXE: TODO: Doubles (ie 'a', 'e', 'E', 'f', 'g', 'G'). */
+
default: Pike_fatal("string_builder_vsprintf(): Invalid formatting method: " "'%c' 0x%x.\n", fmt[-1], fmt[-1]);