util/stringops: add strfmt_arena()

This commit is contained in:
Andrei Alexeyev 2024-09-07 11:19:23 +02:00
parent 787773a53b
commit d84a94d2f8
No known key found for this signature in database
GPG key ID: 72D26128040B9690
2 changed files with 33 additions and 2 deletions

View file

@ -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;

View file

@ -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);