aboutsummaryrefslogtreecommitdiffstats
path: root/common/stringop.c
diff options
context:
space:
mode:
authorLibravatar Simon Ser <contact@emersion.fr>2023-02-28 16:00:28 +0100
committerLibravatar Simon Ser <contact@emersion.fr>2023-04-14 18:34:54 +0200
commitaab4c9da5fb4138ca5f07df8bd8b698d02242a62 (patch)
tree4f26a160ebce948ca29855da4f05fa42e3c5e815 /common/stringop.c
parentUse output_match_name_or_id() in workspace functions (diff)
downloadsway-aab4c9da5fb4138ca5f07df8bd8b698d02242a62.tar.gz
sway-aab4c9da5fb4138ca5f07df8bd8b698d02242a62.tar.zst
sway-aab4c9da5fb4138ca5f07df8bd8b698d02242a62.zip
Add format_str() and vformat_str()
Simple helpers to allocate and format a string.
Diffstat (limited to 'common/stringop.c')
-rw-r--r--common/stringop.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/common/stringop.c b/common/stringop.c
index 7fb3fe12..c503143a 100644
--- a/common/stringop.c
+++ b/common/stringop.c
@@ -1,5 +1,6 @@
1#define _POSIX_C_SOURCE 200809L 1#define _POSIX_C_SOURCE 200809L
2#include <ctype.h> 2#include <ctype.h>
3#include <stdarg.h>
3#include <stdbool.h> 4#include <stdbool.h>
4#include <stdio.h> 5#include <stdio.h>
5#include <stdlib.h> 6#include <stdlib.h>
@@ -328,3 +329,35 @@ bool expand_path(char **path) {
328 wordfree(&p); 329 wordfree(&p);
329 return true; 330 return true;
330} 331}
332
333char *vformat_str(const char *fmt, va_list args) {
334 char *str = NULL;
335 va_list args_copy;
336 va_copy(args_copy, args);
337
338 int len = vsnprintf(NULL, 0, fmt, args);
339 if (len < 0) {
340 sway_log_errno(SWAY_ERROR, "vsnprintf(\"%s\") failed", fmt);
341 goto out;
342 }
343
344 str = malloc(len + 1);
345 if (str == NULL) {
346 sway_log_errno(SWAY_ERROR, "malloc() failed");
347 goto out;
348 }
349
350 vsnprintf(str, len + 1, fmt, args_copy);
351
352out:
353 va_end(args_copy);
354 return str;
355}
356
357char *format_str(const char *fmt, ...) {
358 va_list args;
359 va_start(args, fmt);
360 char *str = vformat_str(fmt, args);
361 va_end(args);
362 return str;
363}