tMove sscanf() logic in local_load() functions - repo - list/download/sync packs with remote repositories
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit dd25eabbe37570395ca70bfdf9f0c60d62a27691
 (DIR) parent be9bf8a9d75a32005bdd5cb7f9d50b04416f84a6
 (HTM) Author: z3bra <contactatz3bradotorg>
       Date:   Thu, 15 Dec 2016 18:42:10 +0100
       
       Move sscanf() logic in local_load() functions
       
       Diffstat:
         M repo.c                              |      30 ++++++++++++++++--------------
       
       1 file changed, 16 insertions(+), 14 deletions(-)
       ---
 (DIR) diff --git a/repo.c b/repo.c
       t@@ -30,7 +30,7 @@ struct repo {
        TAILQ_HEAD(repos, repo);
        
        void usage(char *);
       -struct pack *pack_load(char *);
       +struct pack *pack_load(struct packs *, char *, char *, char *);
        struct repo *add_repo(struct repos *, char *);
        int local_load(struct packs *, char *);
        int remote_sync(char *, FILE *);
       t@@ -43,9 +43,8 @@ usage(char *name)
        }
        
        struct pack *
       -pack_load(char *repoline)
       +pack_load(struct packs *plist, char *name, char *version, char *url)
        {
       -        int r = 0;
                struct pack *p = NULL;
        
                p = malloc(sizeof(struct pack));
       t@@ -54,12 +53,11 @@ pack_load(char *repoline)
                        return NULL;
                }
        
       -        r = sscanf(repoline, "%s\t%s\t%s", p->name, p->version, p->url);
       -        if (r < 3) {
       -                fprintf(stderr, "error parsing line: %s\n", repoline);
       -                free(p);
       -                p = NULL;
       -        }
       +        strncpy(p->url, url, sizeof(p->url));
       +        strncpy(p->name, name, sizeof(p->name));
       +        strncpy(p->version, version, sizeof(p->version));
       +
       +        TAILQ_INSERT_TAIL(plist, p, entries);
        
                return p;
        }
       t@@ -89,9 +87,11 @@ add_repo(struct repos *rlist, char *url)
        int
        local_load(struct packs *plist, char *local)
        {
       +        int r = 0;
                char fn[PATH_MAX] = "";
                char buf[LINE_MAX] = "";
       -        struct pack *p = NULL;
       +
       +        char n[LINE_MAX], v[LINE_MAX], u[PATH_MAX];
                FILE *list;
        
                snprintf(fn, PATH_MAX, "%s/%s", local, LISTFILE);
       t@@ -102,10 +102,12 @@ local_load(struct packs *plist, char *local)
                }
        
                while (fgets(buf, LINE_MAX, list)) {
       -                p = pack_load(buf);
       -                if (p)
       -                        TAILQ_INSERT_TAIL(plist, p, entries);
       -                p = NULL;
       +                r = sscanf(buf, "%s\t%s\t%s", n, v, u);
       +                if (r < 3) {
       +                        perror(fn);
       +                        exit(1);
       +                }
       +                pack_load(plist, n, v, u);
                }
                fclose(list);
                return 0;