util/stringops: add strfmt_arena()
This commit is contained in:
parent
787773a53b
commit
d84a94d2f8
2 changed files with 33 additions and 2 deletions
|
@ -117,6 +117,34 @@ char* strfmt(const char *fmt, ...) {
|
|||
return str;
|
||||
}
|
||||
|
||||
char* vstrfmt_arena(MemArena *arena, const char *fmt, va_list args) {
|
||||
size_t buf_size = strlen(fmt) * 2;
|
||||
char *buf = marena_alloc(arena, buf_size);
|
||||
|
||||
va_list nargs;
|
||||
va_copy(nargs, args);
|
||||
int written = vsnprintf(buf, buf_size, fmt, nargs);
|
||||
va_end(nargs);
|
||||
|
||||
buf = marena_realloc(arena, buf, buf_size, written + 1);
|
||||
|
||||
if(written >= buf_size) {
|
||||
buf_size = written + 1;
|
||||
written = vsnprintf(buf, buf_size, fmt, args);
|
||||
assert(written == buf_size - 1);
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
char* strfmt_arena(MemArena *arena, const char *fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
char *str = vstrfmt_arena(arena, fmt, args);
|
||||
va_end(args);
|
||||
return str;
|
||||
}
|
||||
|
||||
char* strftimealloc(const char *fmt, const struct tm *timeinfo) {
|
||||
size_t sz_allocated = 64;
|
||||
|
||||
|
|
|
@ -9,11 +9,12 @@
|
|||
#pragma once
|
||||
#include "taisei.h"
|
||||
|
||||
#include "memory/arena.h"
|
||||
#include "systime.h"
|
||||
|
||||
#include <time.h>
|
||||
#include <SDL.h>
|
||||
|
||||
#include "systime.h"
|
||||
|
||||
#define UNICODE_UNKNOWN 0xFFFD
|
||||
#define UNICODE_BOM_NATIVE 0xFEFF
|
||||
#define UNICODE_BOM_SWAPPED 0xFFFE
|
||||
|
@ -55,6 +56,8 @@ void stralloc(char **dest, const char *src);
|
|||
char* strjoin(const char *first, ...) attr_sentinel attr_returns_allocated;
|
||||
char* vstrfmt(const char *fmt, va_list args) attr_returns_allocated;
|
||||
char* strfmt(const char *fmt, ...) attr_printf(1, 2) attr_returns_allocated;
|
||||
char* vstrfmt_arena(MemArena *arena, const char *fmt, va_list args) attr_returns_allocated;
|
||||
char* strfmt_arena(MemArena *arena, const char *fmt, ...) attr_printf(2, 3) attr_returns_allocated;
|
||||
char* strappend(char **dst, const char *src);
|
||||
char* strftimealloc(const char *fmt, const struct tm *timeinfo) attr_returns_allocated;
|
||||
void expand_escape_sequences(char *str);
|
||||
|
|
Loading…
Reference in a new issue