diff util.c @ 3:215c0c3b3609

misc: use JSON everywhere (scictl/sciwebd)
author David Demelier <markand@malikania.fr>
date Mon, 14 Jun 2021 22:08:24 +0200
parents 5fa3d2f479b2
children
line wrap: on
line diff
--- a/util.c	Thu Jun 10 10:39:21 2021 +0200
+++ b/util.c	Mon Jun 14 22:08:24 2021 +0200
@@ -16,18 +16,18 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
+#include <sys/stat.h>
 #include <assert.h>
 #include <err.h>
+#include <fcntl.h>
 #include <libgen.h>
 #include <limits.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 
-#include <zstd.h>
-
-#include "base64.h"
 #include "util.h"
 
 void *
@@ -122,28 +122,15 @@
 	return ret;
 }
 
-size_t
-util_split(char *line, const char **args, size_t max, char delim)
+FILE *
+util_fmemopen(void *buf, size_t size, const char *mode)
 {
-	size_t idx;
-
-	if (!*line)
-		return 0;
-
-	for (idx = 0; idx < max; ++idx) {
-		char *sp = strchr(line, delim);
+	FILE *fp;
 
-		if (!sp || idx + 1 >= max) {
-			args[idx++] = line;
-			break;
-		}
+	if (!(fp = fmemopen(buf, size, mode)))
+		err(1, "fmemopen");
 
-		*sp = '\0';
-		args[idx] = line;
-		line = sp + 1;
-	}
-
-	return idx;
+	return fp;
 }
 
 char *
@@ -163,67 +150,27 @@
 }
 
 char *
-util_zbase64_enc(const char *src)
+util_read(const char *path)
 {
-	assert(src);
-
-	char *zstd, *b64;
-	size_t zstdsz, b64sz, len;
+	int fd;
+	struct stat st;
+	char *ret;
 
-	len = strlen(src);
-	zstdsz = ZSTD_compressBound(len);
-	zstd = util_malloc(zstdsz);
+	if ((fd = open(path, O_RDONLY)) < 0)
+		return NULL;
+	if (fstat(fd, &st) < 0)
+		return close(fd), NULL;
 
-	if (ZSTD_isError(zstdsz = ZSTD_compress(zstd, zstdsz, src, len, 18))) {
-		free(zstd);
-		return NULL;
+	ret = util_calloc(1, st.st_size + 1);
+
+	if (read(fd, ret, st.st_size) != st.st_size) {
+		free(ret);
+		ret = NULL;
 	}
 
-	b64sz = B64_ENCODE_LENGTH(zstdsz);
-	b64 = util_calloc(1, b64sz + 1);
-	b64_encode(zstd, zstdsz, b64, b64sz);
-	free(zstd);
-
-	return b64;
-}
-
-char *
-util_zbase64_dec(const char *src)
-{
-	assert(src);
-
-	char *zstd, *text;
-	size_t zstdsz, textsz, len;
-
-	len = strlen(src);
-	zstdsz = B64_DECODE_LENGTH(len) + 1;
-	zstd = util_calloc(1, zstdsz);
+	close(fd);
 
-	if ((zstdsz = b64_decode(src, len, zstd, zstdsz)) == (size_t)-1) {
-		free(zstd);
-		return NULL;
-	}
-
-	switch ((textsz = ZSTD_getFrameContentSize(zstd, zstdsz))) {
-	case ZSTD_CONTENTSIZE_UNKNOWN:
-	case ZSTD_CONTENTSIZE_ERROR:
-		free(zstd);
-		return NULL;
-	default:
-		break;
-	}
-
-	text = util_calloc(1, textsz + 1);
-
-	if (ZSTD_isError((textsz = ZSTD_decompress(text, textsz, zstd, zstdsz)))) {
-		free(zstd);
-		free(text);
-		return NULL;
-	}
-
-	free(zstd);
-
-	return text;
+	return ret;
 }
 
 const char *