summaryrefslogtreecommitdiff
path: root/net.c
diff options
context:
space:
mode:
authorwrmr2024-11-03 02:48:05 -0500
committerwrmr2024-11-03 02:48:05 -0500
commit3e9c75318b0eb1114fb7361dbc467990674804b6 (patch)
tree504efbb2fe56c4700055ec584170cb77237c732a /net.c
parent610808a5902adad751a4acdbcc310803a51fed5d (diff)
start working on fetching
Diffstat (limited to 'net.c')
-rw-r--r--net.c44
1 files changed, 38 insertions, 6 deletions
diff --git a/net.c b/net.c
index 73f50d4..e90d3c0 100644
--- a/net.c
+++ b/net.c
@@ -1,5 +1,8 @@
#include <string.h>
+#include <stdio.h>
+
#include "net.h"
+#include "err.h"
int net_addr(const char *url, struct addr *adr, enum protocol prot_default) {
char *prot_mark;
@@ -24,11 +27,40 @@ int net_addr(const char *url, struct addr *adr, enum protocol prot_default) {
} else {
adr->prot = prot_default;
}
- adr->type = TYPE_PLAIN;
- adr->host_len = 0;
- size_t n = strlen(url);
- if (n > PATH_MAX) return -1;
- adr->path_len = n;
- memcpy(adr->path, url, n);
+
+ if (adr->prot == PROT_FILE) {
+ adr->type = TYPE_PLAIN;
+ adr->host_len = 0;
+ size_t n = strlen(url);
+ if (n >= PATH_MAX) return -1;
+ adr->path_len = n;
+ memcpy(adr->path, url, n + 1);
+ } else {
+ return -1;
+ }
+
return 0;
}
+
+int net_fetch(const struct addr *adr, struct buf *buf) {
+ switch (adr->prot) {
+ case PROT_FILE:
+ {
+ FILE *f = fopen(adr->path, "r/o");
+ if (!f) {
+ perr("file not found");
+ return -1;
+ }
+ buf_init(buf, 1024);
+ char b[256];
+ while (fgets(b, sizeof b, f)) {
+ buf_cat(buf, b, strlen(b));
+ }
+ buf_catc(buf, 0);
+ fclose(f);
+ }
+ return 0;
+ default:
+ return -1;
+ }
+}