tExpose local repository to the config file - repo - list/download/sync packs with remote repositories
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit c9a46b26415259bce16fe70e56f262674c2c3f14
 (DIR) parent f041e2995a070bdc5a4c72b757ec8d2649e1ba70
 (HTM) Author: z3bra <contactatz3bradotorg>
       Date:   Fri, 16 Dec 2016 20:19:38 +0100
       
       Expose local repository to the config file
       
       Diffstat:
         M parse.y                             |      12 +++++++++---
         M repo.c                              |      11 ++++++-----
         M repo.h                              |       3 +--
       
       3 files changed, 16 insertions(+), 10 deletions(-)
       ---
 (DIR) diff --git a/parse.y b/parse.y
       t@@ -49,6 +49,7 @@ static int lungetc(int);
        static int findeol(void);
        
        static struct repos *repos = NULL;
       +static char         *local = NULL;
        
        typedef struct {
                union {
       t@@ -59,7 +60,7 @@ typedef struct {
        } YYSTYPE;
        %}
        
       -%token REPO ERROR
       +%token REPO LOCAL ERROR
        %token <v.string> STRING
        %token <v.number> NUMBER
        %%
       t@@ -75,6 +76,9 @@ grammar                : /* empty */
        main                : REPO STRING {
                                addrepo(repos, $2);
                        }
       +                | LOCAL STRING {
       +                        strncpy(local, $2, PATH_MAX);
       +                }
                        ;
        %%
        
       t@@ -109,7 +113,8 @@ lookup(char *s)
        {
                /* this has to be sorted always */
                static const struct keywords keywords[] = {
       -                { "repo", REPO }
       +                { "local", LOCAL },
       +                { "repo",  REPO  }
                };
                const struct keywords *p;
        
       t@@ -370,7 +375,7 @@ popfile(void)
        }
        
        int
       -parseconf(struct repos *rlist, const char *filename)
       +parseconf(struct repos *rlist, char *localrepo, const char *filename)
        {
                int errors = 0;
        
       t@@ -381,6 +386,7 @@ parseconf(struct repos *rlist, const char *filename)
                topfile = file;
        
                repos = rlist;
       +        local = localrepo;
        
                yyparse();
                errors = file->errors;
 (DIR) diff --git a/repo.c b/repo.c
       t@@ -141,7 +141,8 @@ main (int argc, char *argv[])
        {
                int   fflag, lflag, sflag;
                char *argv0, *n;
       -        char cfgfile[PATH_MAX] = DEFCFGFILE;
       +        char  cfgfile[PATH_MAX] = DEFCFGFILE;
       +        char  localrepo[PATH_MAX] = DEFLOCALREPO;
                char  fn[PATH_MAX], url[PATH_MAX];
                FILE *fd;
                struct stat sb;
       t@@ -179,10 +180,10 @@ main (int argc, char *argv[])
                }ARGEND;
        
                if (!stat(cfgfile, &sb))
       -                parseconf(&rlist, cfgfile);
       +                parseconf(&rlist, localrepo, cfgfile);
        
                if (sflag) {
       -                snprintf(fn, PATH_MAX, "%s/%s", DEFLOCALREPO, DEFLISTFILE);
       +                snprintf(fn, PATH_MAX, "%s/%s", localrepo, DEFLISTFILE);
                        fd = fopen(fn, "w");
                        if (!fd) {
                                perror(fn);
       t@@ -195,7 +196,7 @@ main (int argc, char *argv[])
                        fclose(fd);
                }
        
       -        repolist(&plist, DEFLOCALREPO);
       +        repolist(&plist, localrepo);
        
                if (lflag) {
                        TAILQ_FOREACH(p, &plist, entries) {
       t@@ -207,7 +208,7 @@ main (int argc, char *argv[])
                while ((n = *(argv++))) {
                        TAILQ_FOREACH(p, &plist, entries) {
                                if (!strncmp(p->name, n, PATH_MAX)) {
       -                                snprintf(fn, PATH_MAX, "%s/%s", DEFLOCALREPO, basename(p->url));
       +                                snprintf(fn, PATH_MAX, "%s/%s", localrepo, basename(p->url));
                                        if (!stat(fn, &sb) && !fflag) {
                                                puts(fn);
                                                continue;
 (DIR) diff --git a/repo.h b/repo.h
       t@@ -19,8 +19,7 @@ struct repo {
        };
        TAILQ_HEAD(repos, repo);
        
       - 
        struct pack *addpack(struct packs *, char *, char *, char *);
        struct repo *addrepo(struct repos *, char *);
        int repolist(struct packs *, char *);
       -int parseconf(struct repos *, const char *);
       +int parseconf(struct repos *, char *, const char *);