tried to do better scrolling; don't like the result
[k8sterm.git] / src / utils.c
blob773da6a2ade51912b185cef087318bdb94644771
1 ////////////////////////////////////////////////////////////////////////////////
2 // utilities
3 static void trimstr (char *s) {
4 char *e;
5 //
6 while (*s && isspace(*s)) ++s;
7 for (e = s+strlen(s); e > s; --e) if (!isspace(e[-1])) break;
8 if (e <= s) *s = 0; else *e = 0;
12 static char *SPrintfVA (const char *fmt, va_list vaorig) {
13 char *buf = NULL;
14 int olen, len = 128;
16 buf = malloc(len);
17 if (buf == NULL) { fprintf(stderr, "\nFATAL: out of memory!\n"); abort(); }
18 for (;;) {
19 char *nb;
20 va_list va;
22 va_copy(va, vaorig);
23 olen = vsnprintf(buf, len, fmt, va);
24 va_end(va);
25 if (olen >= 0 && olen < len) return buf;
26 if (olen < 0) olen = len*2-1;
27 nb = realloc(buf, olen+1);
28 if (nb == NULL) { fprintf(stderr, "\nFATAL: out of memory!\n"); abort(); }
29 buf = nb;
30 len = olen+1;
35 static __attribute__((format(printf,1,2))) char *SPrintf (const char *fmt, ...) {
36 char *buf = NULL;
37 va_list va;
39 va_start(va, fmt);
40 buf = SPrintfVA(fmt, va);
41 va_end(va);
42 return buf;
46 K8TERM_API __attribute__((noreturn)) __attribute__((format(printf,1,2))) void k8t_die (const char *errstr, ...) {
47 va_list ap;
49 fprintf(stderr, "FATAL: ");
50 va_start(ap, errstr);
51 vfprintf(stderr, errstr, ap);
52 va_end(ap);
53 fprintf(stderr, "\n");
54 exit(EXIT_FAILURE);