tLoad packs from repo file - repo - list/download/sync packs with remote repositories
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) commit 88561a75de8adb2f555403958572a5167d9ea575
(DIR) parent 255d98c6c20cb6db83a1a61e7c9bf8d7630baed5
(HTM) Author: z3bra <willyatmailoodotorg>
Date: Sat, 10 Dec 2016 09:55:34 +0100
Load packs from repo file
Diffstat:
M repo.c | 65 ++++++++++++++++++++++++-------
1 file changed, 50 insertions(+), 15 deletions(-)
---
(DIR) diff --git a/repo.c b/repo.c
t@@ -3,8 +3,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/types.h>
+#include <sys/queue.h>
#include <sys/stat.h>
+#include <sys/types.h>
#include <unistd.h>
#include <curl/curl.h>
t@@ -16,13 +17,17 @@
#define REMOTEREPO "http://localhost"
struct pack {
- char *name;
- char *version;
- char *filename;
+ char name[LINE_MAX];
+ char version[LINE_MAX];
+ char filename[PATH_MAX];
+ SLIST_ENTRY(pack) entries;
};
+SLIST_HEAD(packs, pack);
void usage(char *);
int mkdir_parents(char *, mode_t);
+struct pack *pack_load(char *);
+int local_load(struct packs *, char *);
int local_list(char *);
int remote_sync(char *, char *);
t@@ -57,13 +62,35 @@ mkdir_parents(char *path, mode_t mode)
return mkdir(tmp, mode);
}
+struct pack *
+pack_load(char *repoline)
+{
+ int r = 0;
+ struct pack *p = NULL;
+
+ p = malloc(sizeof(struct pack));
+ if (!p) {
+ perror("malloc");
+ return NULL;
+ }
+
+ r = sscanf(repoline, "%s\t%s\t%s", p->name, p->version, p->filename);
+ if (r < 3) {
+ fprintf(stderr, "error parsing line: %s\n", repoline);
+ free(p);
+ p = NULL;
+ }
+
+ return p;
+}
+
int
-local_list(char *local)
+local_load(struct packs *plist, char *local)
{
- int ret = 0;
ssize_t len = 0;
char *fn;
char buf[LINE_MAX] = "";
+ struct pack *p = NULL;
FILE *list;
len = strlen(local) + strlen(LISTFILE);
t@@ -81,17 +108,25 @@ local_list(char *local)
return -1;
}
- while ((len = fread(buf, 1, LINE_MAX, list))) {
- if (len < 0) {
- perror("fread");
- return ret = -1;
- }
- fwrite(buf, 1, len, stdout);
+ while (fgets(buf, LINE_MAX, list)) {
+ p = pack_load(buf);
+ if (p)
+ SLIST_INSERT_HEAD(plist, p, entries);
+ p = NULL;
}
+ return 0;
+}
- fclose(list);
- free(fn);
- return ret;
+int
+local_list(char *local)
+{
+ struct packs plist;
+ struct pack *p = NULL;
+ local_load(&plist, local);
+ SLIST_FOREACH(p, &plist, entries) {
+ printf("%s\t%s\n", p->name, p->version);
+ }
+ return 0;
}
int