︙ | | | ︙ | |
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#endif
#import "OFString.h"
#import "OFLocale.h"
#import "OFInitializationFailedException.h"
#define MAX_SUBFORMAT_LEN 64
#ifndef HAVE_ASPRINTF
/*
* (v)asprintf might be declared, but HAVE_ASPRINTF not defined because
* configure determined it is broken. In this case, we must make sure there is
* no name clash.
*/
# define asprintf asprintf_
# define vasprintf vasprintf_
#endif
struct context {
const char *format;
size_t formatLen;
char subformat[MAX_SUBFORMAT_LEN + 1];
size_t subformatLen;
va_list arguments;
char *buffer;
size_t bufferLen;
size_t i, last;
enum {
StateString,
|
|
|
|
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#endif
#import "OFString.h"
#import "OFLocale.h"
#import "OFInitializationFailedException.h"
#define maxSubformatLen 64
#ifndef HAVE_ASPRINTF
/*
* (v)asprintf might be declared, but HAVE_ASPRINTF not defined because
* configure determined it is broken. In this case, we must make sure there is
* no name clash.
*/
# define asprintf asprintf_
# define vasprintf vasprintf_
#endif
struct context {
const char *format;
size_t formatLen;
char subformat[maxSubformatLen + 1];
size_t subformatLen;
va_list arguments;
char *buffer;
size_t bufferLen;
size_t i, last;
enum {
StateString,
|
︙ | | | ︙ | |
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
return true;
}
static bool
appendSubformat(struct context *ctx, const char *subformat,
size_t subformatLen)
{
if (ctx->subformatLen + subformatLen > MAX_SUBFORMAT_LEN)
return false;
memcpy(ctx->subformat + ctx->subformatLen, subformat, subformatLen);
ctx->subformatLen += subformatLen;
ctx->subformat[ctx->subformatLen] = 0;
return true;
|
|
|
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
return true;
}
static bool
appendSubformat(struct context *ctx, const char *subformat,
size_t subformatLen)
{
if (ctx->subformatLen + subformatLen > maxSubformatLen)
return false;
memcpy(ctx->subformat + ctx->subformatLen, subformat, subformatLen);
ctx->subformatLen += subformatLen;
ctx->subformat[ctx->subformatLen] = 0;
return true;
|
︙ | | | ︙ | |
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
|
free(tmp);
return false;
}
free(tmp);
}
memset(ctx->subformat, 0, MAX_SUBFORMAT_LEN);
ctx->subformatLen = 0;
ctx->lengthModifier = LengthModifierNone;
ctx->useLocale = false;
ctx->last = ctx->i + 1;
ctx->state = StateString;
|
|
|
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
|
free(tmp);
return false;
}
free(tmp);
}
memset(ctx->subformat, 0, maxSubformatLen);
ctx->subformatLen = 0;
ctx->lengthModifier = LengthModifierNone;
ctx->useLocale = false;
ctx->last = ctx->i + 1;
ctx->state = StateString;
|
︙ | | | ︙ | |
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
|
int
OFVASPrintF(char **string, const char *format, va_list arguments)
{
struct context ctx;
ctx.format = format;
ctx.formatLen = strlen(format);
memset(ctx.subformat, 0, MAX_SUBFORMAT_LEN + 1);
ctx.subformatLen = 0;
va_copy(ctx.arguments, arguments);
ctx.bufferLen = 0;
ctx.last = 0;
ctx.state = StateString;
ctx.lengthModifier = LengthModifierNone;
ctx.useLocale = false;
|
|
|
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
|
int
OFVASPrintF(char **string, const char *format, va_list arguments)
{
struct context ctx;
ctx.format = format;
ctx.formatLen = strlen(format);
memset(ctx.subformat, 0, maxSubformatLen + 1);
ctx.subformatLen = 0;
va_copy(ctx.arguments, arguments);
ctx.bufferLen = 0;
ctx.last = 0;
ctx.state = StateString;
ctx.lengthModifier = LengthModifierNone;
ctx.useLocale = false;
|
︙ | | | ︙ | |