@@ -61,26 +61,26 @@ va_list arguments; char *buffer; size_t bufferLen; size_t i, last; enum { - STATE_STRING, - STATE_FORMAT_FLAGS, - STATE_FORMAT_FIELD_WIDTH, - STATE_FORMAT_LENGTH_MODIFIER, - STATE_FORMAT_CONVERSION_SPECIFIER + StateString, + StateFormatFlags, + StateFormatFieldWidth, + StateFormatLengthModifier, + StateFormatConversionSpecifier } state; enum { - LENGTH_MODIFIER_NONE, - LENGTH_MODIFIER_HH, - LENGTH_MODIFIER_H, - LENGTH_MODIFIER_L, - LENGTH_MODIFIER_LL, - LENGTH_MODIFIER_J, - LENGTH_MODIFIER_Z, - LENGTH_MODIFIER_T, - LENGTH_MODIFIER_CAPITAL_L + LengthModifierNone, + LengthModifierHH, + LengthModifierH, + LengthModifierL, + LengthModifierLL, + LengthModifierJ, + LengthModifierZ, + LengthModifierT, + LengthModifierCapitalL } lengthModifier; bool useLocale; }; #ifdef HAVE_ASPRINTF_L @@ -192,11 +192,11 @@ if (!appendSubformat(ctx, ctx->format + ctx->i, 1)) return false; ctx->last = ctx->i + 1; - ctx->state = STATE_FORMAT_FLAGS; + ctx->state = StateFormatFlags; } return true; } @@ -216,11 +216,11 @@ case ',': /* ObjFW extension: Use decimal point from locale */ ctx->useLocale = true; break; default: - ctx->state = STATE_FORMAT_FIELD_WIDTH; + ctx->state = StateFormatFieldWidth; ctx->i--; break; } @@ -233,11 +233,11 @@ if ((ctx->format[ctx->i] >= '0' && ctx->format[ctx->i] <= '9') || ctx->format[ctx->i] == '*' || ctx->format[ctx->i] == '.') { if (!appendSubformat(ctx, ctx->format + ctx->i, 1)) return false; } else { - ctx->state = STATE_FORMAT_LENGTH_MODIFIER; + ctx->state = StateFormatLengthModifier; ctx->i--; } return true; } @@ -252,16 +252,16 @@ ctx->format[ctx->i + 1] == 'h') { if (!appendSubformat(ctx, ctx->format + ctx->i, 2)) return false; ctx->i++; - ctx->lengthModifier = LENGTH_MODIFIER_HH; + ctx->lengthModifier = LengthModifierHH; } else { if (!appendSubformat(ctx, ctx->format + ctx->i, 1)) return false; - ctx->lengthModifier = LENGTH_MODIFIER_H; + ctx->lengthModifier = LengthModifierH; } break; case 'l': /* and also ll */ if (ctx->formatLen > ctx->i + 1 && @@ -273,16 +273,16 @@ if (!appendSubformat(ctx, "I64", 3)) return false; #endif ctx->i++; - ctx->lengthModifier = LENGTH_MODIFIER_LL; + ctx->lengthModifier = LengthModifierLL; } else { if (!appendSubformat(ctx, ctx->format + ctx->i, 1)) return false; - ctx->lengthModifier = LENGTH_MODIFIER_L; + ctx->lengthModifier = LengthModifierL; } break; case 'j': #if defined(OF_WINDOWS) @@ -294,11 +294,11 @@ #else if (!appendSubformat(ctx, ctx->format + ctx->i, 1)) return false; #endif - ctx->lengthModifier = LENGTH_MODIFIER_J; + ctx->lengthModifier = LengthModifierJ; break; case 'z': #if defined(OF_WINDOWS) if (sizeof(size_t) == 8) @@ -310,11 +310,11 @@ #else if (!appendSubformat(ctx, ctx->format + ctx->i, 1)) return false; #endif - ctx->lengthModifier = LENGTH_MODIFIER_Z; + ctx->lengthModifier = LengthModifierZ; break; case 't': #if defined(OF_WINDOWS) if (sizeof(ptrdiff_t) == 8) @@ -326,18 +326,18 @@ #else if (!appendSubformat(ctx, ctx->format + ctx->i, 1)) return false; #endif - ctx->lengthModifier = LENGTH_MODIFIER_T; + ctx->lengthModifier = LengthModifierT; break; case 'L': if (!appendSubformat(ctx, ctx->format + ctx->i, 1)) return false; - ctx->lengthModifier = LENGTH_MODIFIER_CAPITAL_L; + ctx->lengthModifier = LengthModifierCapitalL; break; #ifdef OF_WINDOWS case 'I': /* win32 strangeness (I64 instead of ll or j) */ if (ctx->formatLen > ctx->i + 2 && @@ -345,11 +345,11 @@ ctx->format[ctx->i + 2] == '4') { if (!appendSubformat(ctx, ctx->format + ctx->i, 3)) return false; ctx->i += 2; - ctx->lengthModifier = LENGTH_MODIFIER_LL; + ctx->lengthModifier = LengthModifierLL; } else ctx->i--; break; #endif @@ -356,21 +356,21 @@ #ifdef OF_IOS case 'q': /* iOS uses this for PRI?64 */ if (!appendSubformat(ctx, ctx->format + ctx->i, 1)) return false; - ctx->lengthModifier = LENGTH_MODIFIER_LL; + ctx->lengthModifier = LengthModifierLL; break; #endif default: ctx->i--; break; } - ctx->state = STATE_FORMAT_CONVERSION_SPECIFIER; + ctx->state = StateFormatConversionSpecifier; return true; } static bool formatConversionSpecifierState(struct context *ctx) @@ -384,11 +384,11 @@ if (!appendSubformat(ctx, ctx->format + ctx->i, 1)) return false; switch (ctx->format[ctx->i]) { case '@': - if (ctx->lengthModifier != LENGTH_MODIFIER_NONE) + if (ctx->lengthModifier != LengthModifierNone) return false; ctx->subformat[ctx->subformatLen - 1] = 's'; @try { @@ -409,11 +409,11 @@ @throw e; } break; case 'C': - if (ctx->lengthModifier != LENGTH_MODIFIER_NONE) + if (ctx->lengthModifier != LengthModifierNone) return false; ctx->subformat[ctx->subformatLen - 1] = 's'; { @@ -428,11 +428,11 @@ tmpLen = asprintf(&tmp, ctx->subformat, buffer); } break; case 'S': - if (ctx->lengthModifier != LENGTH_MODIFIER_NONE) + if (ctx->lengthModifier != LengthModifierNone) return false; ctx->subformat[ctx->subformatLen - 1] = 's'; { @@ -468,33 +468,33 @@ break; case 'd': case 'i': switch (ctx->lengthModifier) { - case LENGTH_MODIFIER_NONE: - case LENGTH_MODIFIER_HH: - case LENGTH_MODIFIER_H: + case LengthModifierNone: + case LengthModifierHH: + case LengthModifierH: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, int)); break; - case LENGTH_MODIFIER_L: + case LengthModifierL: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, long)); break; - case LENGTH_MODIFIER_LL: + case LengthModifierLL: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, long long)); break; - case LENGTH_MODIFIER_J: + case LengthModifierJ: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, intmax_t)); break; - case LENGTH_MODIFIER_Z: + case LengthModifierZ: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, ssize_t)); break; - case LENGTH_MODIFIER_T: + case LengthModifierT: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, ptrdiff_t)); break; default: return false; @@ -504,33 +504,33 @@ case 'o': case 'u': case 'x': case 'X': switch (ctx->lengthModifier) { - case LENGTH_MODIFIER_NONE: - case LENGTH_MODIFIER_HH: - case LENGTH_MODIFIER_H: + case LengthModifierNone: + case LengthModifierHH: + case LengthModifierH: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, unsigned int)); break; - case LENGTH_MODIFIER_L: + case LengthModifierL: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, unsigned long)); break; - case LENGTH_MODIFIER_LL: + case LengthModifierLL: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, unsigned long long)); break; - case LENGTH_MODIFIER_J: + case LengthModifierJ: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, uintmax_t)); break; - case LENGTH_MODIFIER_Z: + case LengthModifierZ: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, size_t)); break; - case LENGTH_MODIFIER_T: + case LengthModifierT: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, ptrdiff_t)); break; default: return false; @@ -544,12 +544,12 @@ case 'g': case 'G': case 'a': case 'A': switch (ctx->lengthModifier) { - case LENGTH_MODIFIER_NONE: - case LENGTH_MODIFIER_L: + case LengthModifierNone: + case LengthModifierL: #ifdef HAVE_ASPRINTF_L if (!ctx->useLocale) tmpLen = asprintf_l(&tmp, cLocale, ctx->subformat, va_arg(ctx->arguments, double)); @@ -556,11 +556,11 @@ else #endif tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, double)); break; - case LENGTH_MODIFIER_CAPITAL_L: + case LengthModifierCapitalL: #ifdef HAVE_ASPRINTF_L if (!ctx->useLocale) tmpLen = asprintf_l(&tmp, cLocale, ctx->subformat, va_arg(ctx->arguments, long double)); @@ -611,15 +611,15 @@ #endif break; case 'c': switch (ctx->lengthModifier) { - case LENGTH_MODIFIER_NONE: + case LengthModifierNone: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, int)); break; - case LENGTH_MODIFIER_L: + case LengthModifierL: #ifdef HAVE_WCHAR_H # if WINT_MAX >= INT_MAX tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, wint_t)); # else @@ -633,16 +633,16 @@ } break; case 's': switch (ctx->lengthModifier) { - case LENGTH_MODIFIER_NONE: + case LengthModifierNone: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, const char *)); break; #ifdef HAVE_WCHAR_T - case LENGTH_MODIFIER_L: + case LengthModifierL: tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, const wchar_t *)); break; #endif default: @@ -649,57 +649,57 @@ return false; } break; case 'p': - if (ctx->lengthModifier != LENGTH_MODIFIER_NONE) + if (ctx->lengthModifier != LengthModifierNone) return false; tmpLen = asprintf(&tmp, ctx->subformat, va_arg(ctx->arguments, void *)); break; case 'n': switch (ctx->lengthModifier) { - case LENGTH_MODIFIER_NONE: + case LengthModifierNone: *va_arg(ctx->arguments, int *) = (int)ctx->bufferLen; break; - case LENGTH_MODIFIER_HH: + case LengthModifierHH: *va_arg(ctx->arguments, signed char *) = (signed char)ctx->bufferLen; break; - case LENGTH_MODIFIER_H: + case LengthModifierH: *va_arg(ctx->arguments, short *) = (short)ctx->bufferLen; break; - case LENGTH_MODIFIER_L: + case LengthModifierL: *va_arg(ctx->arguments, long *) = (long)ctx->bufferLen; break; - case LENGTH_MODIFIER_LL: + case LengthModifierLL: *va_arg(ctx->arguments, long long *) = (long long)ctx->bufferLen; break; - case LENGTH_MODIFIER_J: + case LengthModifierJ: *va_arg(ctx->arguments, intmax_t *) = (intmax_t)ctx->bufferLen; break; - case LENGTH_MODIFIER_Z: + case LengthModifierZ: *va_arg(ctx->arguments, size_t *) = (size_t)ctx->bufferLen; break; - case LENGTH_MODIFIER_T: + case LengthModifierT: *va_arg(ctx->arguments, ptrdiff_t *) = (ptrdiff_t)ctx->bufferLen; break; default: return false; } break; case '%': - if (ctx->lengthModifier != LENGTH_MODIFIER_NONE) + if (ctx->lengthModifier != LengthModifierNone) return false; if (!appendString(ctx, "%", 1)) return false; @@ -720,15 +720,15 @@ free(tmp); } memset(ctx->subformat, 0, MAX_SUBFORMAT_LEN); ctx->subformatLen = 0; - ctx->lengthModifier = LENGTH_MODIFIER_NONE; + ctx->lengthModifier = LengthModifierNone; ctx->useLocale = false; ctx->last = ctx->i + 1; - ctx->state = STATE_STRING; + ctx->state = StateString; return true; } static bool (*states[])(struct context *) = { @@ -738,11 +738,11 @@ formatLengthModifierState, formatConversionSpecifierState }; int -of_vasprintf(char **string, const char *format, va_list arguments) +OFVASPrintF(char **string, const char *format, va_list arguments) { struct context ctx; ctx.format = format; ctx.formatLen = strlen(format); @@ -749,12 +749,12 @@ memset(ctx.subformat, 0, MAX_SUBFORMAT_LEN + 1); ctx.subformatLen = 0; va_copy(ctx.arguments, arguments); ctx.bufferLen = 0; ctx.last = 0; - ctx.state = STATE_STRING; - ctx.lengthModifier = LENGTH_MODIFIER_NONE; + ctx.state = StateString; + ctx.lengthModifier = LengthModifierNone; ctx.useLocale = false; if ((ctx.buffer = malloc(1)) == NULL) return -1; @@ -763,11 +763,11 @@ free(ctx.buffer); return -1; } } - if (ctx.state != STATE_STRING) { + if (ctx.state != StateString) { free(ctx.buffer); return -1; } if (!appendString(&ctx, ctx.format + ctx.last, @@ -779,18 +779,5 @@ ctx.buffer[ctx.bufferLen] = 0; *string = ctx.buffer; return (ctx.bufferLen <= INT_MAX ? (int)ctx.bufferLen : -1); } - -int -of_asprintf(char **string, const char *format, ...) -{ - va_list arguments; - int ret; - - va_start(arguments, format); - ret = of_vasprintf(string, format, arguments); - va_end(arguments); - - return ret; -}