aboutsummaryrefslogtreecommitdiffstats
path: root/service/src/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'service/src/util.c')
-rw-r--r--service/src/util.c66
1 files changed, 62 insertions, 4 deletions
diff --git a/service/src/util.c b/service/src/util.c
index 946bc19..7d3317b 100644
--- a/service/src/util.c
+++ b/service/src/util.c
@@ -29,14 +29,14 @@ aprintf(const char *fmtstr, ...)
va_copy(cpy, ap);
va_start(cpy, fmtstr);
- nb = vsnprintf(NULL, 0, fmtstr, ap);
+ nb = vsnprintf(NULL, 0, fmtstr, cpy);
va_end(cpy);
- if (nb <= 0) die("encountered invalid fmtstr!\n");
+ if (nb <= 0) die("Invalid fmtstr!\n");
+ str = checkp(malloc(nb+1));
- str = checkp(malloc(nb));
va_start(ap, fmtstr);
- nb = vsnprintf(str, nb, fmtstr, ap);
+ nb = vsnprintf(str, nb+1, fmtstr, ap);
va_end(ap);
return str;
@@ -71,4 +71,62 @@ mhash(const char *filename, int len)
return buf;
}
+void
+freadstr(FILE *f, char **dst)
+{
+ size_t start, len;
+ char c;
+
+ start = ftell(f);
+ while ((c = fgetc(f)) != EOF && c) len++;
+
+ *dst = calloc(len + 1, 1);
+ fread(*dst, len, 1, f);
+}
+
+void
+fputstr(FILE *f, char *s)
+{
+ fprintf(f, "%s", s);
+ fputc(0, f);
+}
+
+const char*
+ask(const char *fmtstr, ...)
+{
+ static char linebuf[256];
+ va_list ap;
+ int fail;
+
+ va_start(ap, fmtstr);
+ vprintf(fmtstr, ap);
+ va_end(ap);
+
+ fail = !fgets(linebuf, sizeof(linebuf), stdin);
+
+ if (!fail) linebuf[strlen(linebuf) - 1] = '\0';
+
+ return fail ? "" : linebuf;
+}
+
+void
+dump(const char *filename)
+{
+ char buf[256];
+ FILE *f;
+ int nb;
+
+ if (!(f = fopen(filename, "r"))) return;
+
+ while ((nb = fread(buf, 1, sizeof(buf), f)))
+ printf("%.*s\n", nb, buf);
+
+ fclose(f);
+}
+
+int
+strpfcmp(const char *prefix, const char *str)
+{
+ return strncmp(prefix, str, strlen(prefix));
+}