aboutsummaryrefslogtreecommitdiffstats
path: root/service/src/util.c
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2021-05-10 15:05:25 +0200
committerLouis Burda <quent.burda@gmail.com>2021-05-10 15:05:25 +0200
commit2a8416eaa85af6348fe34859859a7fb39db2003d (patch)
treeaa05283f66bf509d75352dbddc8380ab56a27a46 /service/src/util.c
parent65a1a51121278e54e40e2a04ae096053d5a3c47d (diff)
downloadenowars5-service-stldoctor-2a8416eaa85af6348fe34859859a7fb39db2003d.tar.gz
enowars5-service-stldoctor-2a8416eaa85af6348fe34859859a7fb39db2003d.zip
save scan info and model, added vuln in load info, small tweaks
create result directory with serialized info struct and model file after successful scan, dont modify the stl file contents during parsing, EOF getc vuln to truncate loaded hash added in load_info
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));
+}