Move read_configuration from distromatic.c to functions.c
This commit is contained in:
parent
36ed99b46e
commit
d220dd75b0
@ -101,21 +101,10 @@ static int clearRecursionFlag(struct headerList *headerlist);
|
|||||||
static int resolveRecursiveDependencies(
|
static int resolveRecursiveDependencies(
|
||||||
struct headerList *headerlist);
|
struct headerList *headerlist);
|
||||||
|
|
||||||
struct configTag*
|
|
||||||
findRepositoryByTag(const char *tag);
|
|
||||||
|
|
||||||
static int read_configuration(const char *confFile, const char *tag);
|
|
||||||
|
|
||||||
int compareRequiredList(const void *ptr1, const void *ptr2);
|
int compareRequiredList(const void *ptr1, const void *ptr2);
|
||||||
|
|
||||||
int handleObsoletedPackages(struct configTag *ct, int arch);
|
int handleObsoletedPackages(struct configTag *ct, int arch);
|
||||||
|
|
||||||
static struct configDefaults configdefaults;
|
|
||||||
static struct configTag *firstconfigtag = NULL, *configtag = NULL;
|
|
||||||
|
|
||||||
static const unsigned int bufsize = 1024;
|
|
||||||
static const unsigned int maxlinelenght = 1024;
|
|
||||||
|
|
||||||
static const char *copyright[] = {
|
static const char *copyright[] = {
|
||||||
PROGRAMNAME " version " PROGRAMVERSION,
|
PROGRAMNAME " version " PROGRAMVERSION,
|
||||||
"Copyright (C) 2004-2013 by Silvan Calarco <silvan.calarco@mambasoft.it>",
|
"Copyright (C) 2004-2013 by Silvan Calarco <silvan.calarco@mambasoft.it>",
|
||||||
@ -848,268 +837,6 @@ resolveRecursiveDependencies(struct headerList *headerlist)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct configTag*
|
|
||||||
findRepositoryByTag(const char *tag)
|
|
||||||
{
|
|
||||||
struct configTag *ct = firstconfigtag;
|
|
||||||
|
|
||||||
while ((ct) && (strncmp(ct->tag,tag,PATH_MAX))) ct = ct->next;
|
|
||||||
|
|
||||||
if (ct) return ct; else return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
read_configuration(const char *confFile, const char *tag)
|
|
||||||
{
|
|
||||||
FILE *fin;
|
|
||||||
|
|
||||||
char *vartok, *valuetok;
|
|
||||||
char input[maxlinelenght];
|
|
||||||
char buf[bufsize];
|
|
||||||
int i, j, curraltrep = 0;
|
|
||||||
|
|
||||||
struct configTag *newconfigtag, *currconfigtag = NULL;
|
|
||||||
struct Packager *currmaintainer;
|
|
||||||
|
|
||||||
if ((fin = fopen(confFile, "r")) == NULL) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int configsection = 0;
|
|
||||||
configdefaults.html_basedir = NULL;
|
|
||||||
|
|
||||||
configdefaults.arch[0] = DEFAULT_ARCH;
|
|
||||||
for (i = 1; i<ARCHS_MAX; i++)
|
|
||||||
configdefaults.arch[i] = NULL;
|
|
||||||
|
|
||||||
while (fgets(input, maxlinelenght, fin)) {
|
|
||||||
|
|
||||||
if (input[0] == '#') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
vartok = (char *) strtok(input, "=\n");
|
|
||||||
if (!vartok) { /* skip blank lines */
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
strip_separators(vartok, " \t\n");
|
|
||||||
|
|
||||||
valuetok = (char *) strtok(NULL, "\n");
|
|
||||||
strip_separators(valuetok, " \t\n");
|
|
||||||
|
|
||||||
if ((vartok[0]=='[') && (vartok[strlen(vartok)-1]==']')) {
|
|
||||||
/* found a `[defaults]' tag */
|
|
||||||
if (!strncmp(&vartok[1], "defaults", strlen(vartok)-2)) {
|
|
||||||
configsection = CONF_DEFAULTS_SECTION;
|
|
||||||
} else if (!strncmp(&vartok[1], "maintainers", strlen(vartok)-2)) {
|
|
||||||
configsection = CONF_MAINTAINERS_SECTION;
|
|
||||||
} else {
|
|
||||||
configsection = CONF_REP_SECTION;
|
|
||||||
|
|
||||||
newconfigtag = malloc(sizeof(struct configTag));
|
|
||||||
if (!newconfigtag) {
|
|
||||||
fprintf(stderr, "The system is out of memory\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
newconfigtag->tag =
|
|
||||||
(char *) strndup(&vartok[1], strlen(vartok) - 2);
|
|
||||||
newconfigtag->repository_dir = NULL;
|
|
||||||
newconfigtag->repository_source_dir = NULL;
|
|
||||||
curraltrep = 0;
|
|
||||||
for (i = 0; i<ALT_REPS_MAX; i++) newconfigtag->repository[i] = NULL;
|
|
||||||
newconfigtag->html_dir = NULL;
|
|
||||||
newconfigtag->download_prefix = NULL;
|
|
||||||
newconfigtag->download_dir = NULL;
|
|
||||||
newconfigtag->showfile_prefix = NULL;
|
|
||||||
for (i = 0; i<ARCHS_MAX; i++) {
|
|
||||||
newconfigtag->arch[i] = configdefaults.arch[i];
|
|
||||||
newconfigtag->headerlist[i] = NULL;
|
|
||||||
newconfigtag->filetree[i]=NULL;
|
|
||||||
for (j = 0; j<PROVIDEDLIST_IDX_SIZE; j++)
|
|
||||||
newconfigtag->providedlist_idx[i][j]=NULL;
|
|
||||||
}
|
|
||||||
newconfigtag->configdefaults = &configdefaults;
|
|
||||||
newconfigtag->headersourcelist = NULL;
|
|
||||||
|
|
||||||
if (configdefaults.html_basedir) {
|
|
||||||
strncpy(buf, configdefaults.html_basedir, bufsize);
|
|
||||||
strncat(buf, newconfigtag->tag, bufsize);
|
|
||||||
strncat(buf, "/", bufsize);
|
|
||||||
newconfigtag->html_dir = (char *) strdup(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((!tag) || (!strcmp(newconfigtag->tag, tag))) {
|
|
||||||
configtag = newconfigtag;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!currconfigtag) {
|
|
||||||
firstconfigtag = newconfigtag;
|
|
||||||
} else {
|
|
||||||
currconfigtag->next = newconfigtag;
|
|
||||||
}
|
|
||||||
currconfigtag = newconfigtag;
|
|
||||||
}
|
|
||||||
} else if (configsection == CONF_REP_SECTION) {
|
|
||||||
/* we are reading inside a repository section... */
|
|
||||||
if (!strcmp(vartok, "REPOSITORY_DIR")) {
|
|
||||||
currconfigtag->repository_dir =
|
|
||||||
(char *) strdup(valuetok);
|
|
||||||
} else if (!strcmp(vartok, "PARENT")) {
|
|
||||||
currconfigtag->repository[curraltrep]=findRepositoryByTag(valuetok);
|
|
||||||
if (!currconfigtag->repository[curraltrep]) {
|
|
||||||
fprintf(stderr,"Error: repository %s requested in %s was not previously configured; aborting.\n",
|
|
||||||
valuetok, currconfigtag->tag);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
curraltrep++;
|
|
||||||
} else if (!strcmp(vartok, "HTML_DIR")) {
|
|
||||||
currconfigtag->html_dir = (char *) strdup(valuetok);
|
|
||||||
} else if (!strcmp(vartok, "DOWNLOAD_PREFIX")) {
|
|
||||||
currconfigtag->download_prefix = (char *) strdup(valuetok);
|
|
||||||
} else if (!strcmp(vartok, "DOWNLOAD_DIR")) {
|
|
||||||
currconfigtag->download_dir = (char *) strdup(valuetok);
|
|
||||||
} else if (!strcmp(vartok, "SHOWFILE_PREFIX")) {
|
|
||||||
currconfigtag->showfile_prefix = (char *) strdup(valuetok);
|
|
||||||
} else if (!strcmp(vartok, "REPOSITORY_SOURCE_DIR")) {
|
|
||||||
currconfigtag->repository_source_dir =
|
|
||||||
(char *) strdup(valuetok);
|
|
||||||
} else if (!strcmp(vartok, "DESCRIPTION")) {
|
|
||||||
currconfigtag->description =
|
|
||||||
(char *) strdup(valuetok);
|
|
||||||
} else if (!strcmp(vartok, "ARCHS")) {
|
|
||||||
vartok = (char *) strtok(valuetok, " ");
|
|
||||||
i = 0;
|
|
||||||
while ((vartok) && (i < ARCHS_MAX)) {
|
|
||||||
currconfigtag->arch[i] = malloc(sizeof vartok);
|
|
||||||
if (!currconfigtag->arch[i]) {
|
|
||||||
fprintf(stderr, "The system is out of memory\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
strcpy(currconfigtag->arch[i], vartok);
|
|
||||||
vartok = strtok(NULL, " ");
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if (vartok) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"Error: exceeding number of archs defined; maximum is %d.",ARCHS_MAX);
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
currconfigtag->arch[i] = NULL;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fprintf(stderr, "Undefined token: %s\n", vartok);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
} else if (configsection == CONF_DEFAULTS_SECTION) {
|
|
||||||
/* we are in the default section */
|
|
||||||
if (!strcmp(vartok, "HTML_BASEDIR")) {
|
|
||||||
configdefaults.html_basedir =
|
|
||||||
(char *) strdup(valuetok);
|
|
||||||
} else if (!strcmp(vartok, "DISTRIBUTION_NAME")) {
|
|
||||||
configdefaults.distribution_name =
|
|
||||||
(char *) strdup(valuetok);
|
|
||||||
} else if (!strcmp(vartok, "URL_ADDRESS")) {
|
|
||||||
configdefaults.url_address =
|
|
||||||
(char *) strdup(valuetok);
|
|
||||||
} else if (!strcmp(vartok, "URL_PREFIX")) {
|
|
||||||
configdefaults.url_prefix =
|
|
||||||
(char *) strdup(valuetok);
|
|
||||||
} else if (!strcmp(vartok, "URL_DIR")) {
|
|
||||||
configdefaults.url_dir =
|
|
||||||
(char *) strdup(valuetok);
|
|
||||||
} else if (!strcmp(vartok, "ARCHS")) {
|
|
||||||
vartok = (char *) strtok(valuetok, " ");
|
|
||||||
i = 0;
|
|
||||||
while ((vartok) && (i < ARCHS_MAX)) {
|
|
||||||
configdefaults.arch[i] = malloc(sizeof vartok);
|
|
||||||
if (!configdefaults.arch[i]) {
|
|
||||||
fprintf(stderr, "The system is out of memory\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
strcpy(configdefaults.arch[i], vartok);
|
|
||||||
vartok = strtok(NULL, " ");
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if (vartok) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"Error: exceeding number of archs defined; maximum is %d.",ARCHS_MAX);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fprintf(stderr,
|
|
||||||
"Invalid token for `defaults' tag: %s\n",
|
|
||||||
vartok);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
} else if (configsection == CONF_MAINTAINERS_SECTION) {
|
|
||||||
|
|
||||||
/* find or create maintainer */
|
|
||||||
currmaintainer = getPackagerByName(vartok, 1);
|
|
||||||
|
|
||||||
if (!currmaintainer) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"Error: cannot create maintainers; aborting.");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
currmaintainer->role |= PACKAGER_ROLE_MAINTAINER;
|
|
||||||
|
|
||||||
vartok = (char *) strtok(valuetok, "\"");
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while ((currmaintainer->alias[i]) && (i < PACKAGER_MAXALIASES)) i++;
|
|
||||||
|
|
||||||
while ((vartok) && (i < PACKAGER_MAXALIASES)) {
|
|
||||||
currmaintainer->alias[i]=strdup(vartok);
|
|
||||||
vartok = strtok(NULL, "\"");
|
|
||||||
vartok = strtok(NULL, "\"");
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if (vartok) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"Error: exceeding number of aliases defined for maintainer %s.",currmaintainer->name);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* check for errors and complete previous tag infos */
|
|
||||||
for(currconfigtag = firstconfigtag; currconfigtag;
|
|
||||||
currconfigtag = currconfigtag->next) {
|
|
||||||
|
|
||||||
if (!currconfigtag->repository_dir) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"REPOSITORY_DIR not given for tag %s\n",
|
|
||||||
currconfigtag->tag);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!currconfigtag->repository_source_dir) {
|
|
||||||
strncpy(buf, currconfigtag->repository_dir, bufsize);
|
|
||||||
strncat(buf, "/SRPMS.base/", bufsize);
|
|
||||||
currconfigtag->repository_source_dir =
|
|
||||||
(char *) strdup(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
currconfigtag->repository_level=0;
|
|
||||||
|
|
||||||
for (i = 0; i < ALT_REPS_MAX; i++) {
|
|
||||||
if (currconfigtag->repository[i]) {
|
|
||||||
currconfigtag->repository_level=i+1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
currconfigtag->repository[currconfigtag->repository_level]=currconfigtag;
|
|
||||||
|
|
||||||
if (!currconfigtag->description)
|
|
||||||
currconfigtag->description=currconfigtag->tag;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fclose(fin);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *threadArchScan(void* arg) {
|
void *threadArchScan(void* arg) {
|
||||||
int arch = *(int *)arg;
|
int arch = *(int *)arg;
|
||||||
|
|
||||||
|
264
src/functions.c
264
src/functions.c
@ -69,8 +69,272 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "functions.h"
|
||||||
|
#include "distromatic.h"
|
||||||
|
#include "changelog.h"
|
||||||
|
|
||||||
static int debug_log = 0;
|
static int debug_log = 0;
|
||||||
|
|
||||||
|
struct configTag* findRepositoryByTag(const char *tag)
|
||||||
|
{
|
||||||
|
struct configTag *ct = firstconfigtag;
|
||||||
|
|
||||||
|
while ((ct) && (strncmp(ct->tag,tag,PATH_MAX))) ct = ct->next;
|
||||||
|
|
||||||
|
if (ct) return ct; else return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int read_configuration(const char *confFile, const char *tag)
|
||||||
|
{
|
||||||
|
FILE *fin;
|
||||||
|
|
||||||
|
char *vartok, *valuetok;
|
||||||
|
char input[PATH_MAX];
|
||||||
|
char buf[PATH_MAX];
|
||||||
|
int i, j, curraltrep = 0;
|
||||||
|
|
||||||
|
struct configTag *newconfigtag, *currconfigtag = NULL;
|
||||||
|
struct Packager *currmaintainer;
|
||||||
|
|
||||||
|
if ((fin = fopen(confFile, "r")) == NULL) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int configsection = 0;
|
||||||
|
configdefaults.html_basedir = NULL;
|
||||||
|
|
||||||
|
configdefaults.arch[0] = DEFAULT_ARCH;
|
||||||
|
for (i = 1; i<ARCHS_MAX; i++)
|
||||||
|
configdefaults.arch[i] = NULL;
|
||||||
|
|
||||||
|
while (fgets(input, PATH_MAX, fin)) {
|
||||||
|
|
||||||
|
if (input[0] == '#') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
vartok = (char *) strtok(input, "=\n");
|
||||||
|
if (!vartok) { /* skip blank lines */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
strip_separators(vartok, " \t\n");
|
||||||
|
|
||||||
|
valuetok = (char *) strtok(NULL, "\n");
|
||||||
|
strip_separators(valuetok, " \t\n");
|
||||||
|
|
||||||
|
if ((vartok[0]=='[') && (vartok[strlen(vartok)-1]==']')) {
|
||||||
|
/* found a `[defaults]' tag */
|
||||||
|
if (!strncmp(&vartok[1], "defaults", strlen(vartok)-2)) {
|
||||||
|
configsection = CONF_DEFAULTS_SECTION;
|
||||||
|
} else if (!strncmp(&vartok[1], "maintainers", strlen(vartok)-2)) {
|
||||||
|
configsection = CONF_MAINTAINERS_SECTION;
|
||||||
|
} else {
|
||||||
|
configsection = CONF_REP_SECTION;
|
||||||
|
|
||||||
|
newconfigtag = malloc(sizeof(struct configTag));
|
||||||
|
if (!newconfigtag) {
|
||||||
|
fprintf(stderr, "The system is out of memory\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
newconfigtag->tag =
|
||||||
|
(char *) strndup(&vartok[1], strlen(vartok) - 2);
|
||||||
|
newconfigtag->repository_dir = NULL;
|
||||||
|
newconfigtag->repository_source_dir = NULL;
|
||||||
|
curraltrep = 0;
|
||||||
|
for (i = 0; i<ALT_REPS_MAX; i++) newconfigtag->repository[i] = NULL;
|
||||||
|
newconfigtag->html_dir = NULL;
|
||||||
|
newconfigtag->download_prefix = NULL;
|
||||||
|
newconfigtag->download_dir = NULL;
|
||||||
|
newconfigtag->showfile_prefix = NULL;
|
||||||
|
for (i = 0; i<ARCHS_MAX; i++) {
|
||||||
|
newconfigtag->arch[i] = configdefaults.arch[i];
|
||||||
|
newconfigtag->headerlist[i] = NULL;
|
||||||
|
newconfigtag->filetree[i]=NULL;
|
||||||
|
for (j = 0; j<PROVIDEDLIST_IDX_SIZE; j++)
|
||||||
|
newconfigtag->providedlist_idx[i][j]=NULL;
|
||||||
|
}
|
||||||
|
newconfigtag->configdefaults = &configdefaults;
|
||||||
|
newconfigtag->headersourcelist = NULL;
|
||||||
|
|
||||||
|
if (configdefaults.html_basedir) {
|
||||||
|
strncpy(buf, configdefaults.html_basedir, PATH_MAX);
|
||||||
|
strncat(buf, newconfigtag->tag, PATH_MAX);
|
||||||
|
strncat(buf, "/", PATH_MAX);
|
||||||
|
newconfigtag->html_dir = (char *) strdup(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((!tag) || (!strcmp(newconfigtag->tag, tag))) {
|
||||||
|
configtag = newconfigtag;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!currconfigtag) {
|
||||||
|
firstconfigtag = newconfigtag;
|
||||||
|
} else {
|
||||||
|
currconfigtag->next = newconfigtag;
|
||||||
|
}
|
||||||
|
currconfigtag = newconfigtag;
|
||||||
|
}
|
||||||
|
} else if (configsection == CONF_REP_SECTION) {
|
||||||
|
/* we are reading inside a repository section... */
|
||||||
|
if (!strcmp(vartok, "REPOSITORY_DIR")) {
|
||||||
|
currconfigtag->repository_dir =
|
||||||
|
(char *) strdup(valuetok);
|
||||||
|
} else if (!strcmp(vartok, "PARENT")) {
|
||||||
|
currconfigtag->repository[curraltrep]=findRepositoryByTag(valuetok);
|
||||||
|
if (!currconfigtag->repository[curraltrep]) {
|
||||||
|
fprintf(stderr,"Error: repository %s requested in %s was not previously configured; aborting.\n",
|
||||||
|
valuetok, currconfigtag->tag);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
curraltrep++;
|
||||||
|
} else if (!strcmp(vartok, "HTML_DIR")) {
|
||||||
|
currconfigtag->html_dir = (char *) strdup(valuetok);
|
||||||
|
} else if (!strcmp(vartok, "DOWNLOAD_PREFIX")) {
|
||||||
|
currconfigtag->download_prefix = (char *) strdup(valuetok);
|
||||||
|
} else if (!strcmp(vartok, "DOWNLOAD_DIR")) {
|
||||||
|
currconfigtag->download_dir = (char *) strdup(valuetok);
|
||||||
|
} else if (!strcmp(vartok, "SHOWFILE_PREFIX")) {
|
||||||
|
currconfigtag->showfile_prefix = (char *) strdup(valuetok);
|
||||||
|
} else if (!strcmp(vartok, "REPOSITORY_SOURCE_DIR")) {
|
||||||
|
currconfigtag->repository_source_dir =
|
||||||
|
(char *) strdup(valuetok);
|
||||||
|
} else if (!strcmp(vartok, "DESCRIPTION")) {
|
||||||
|
currconfigtag->description =
|
||||||
|
(char *) strdup(valuetok);
|
||||||
|
} else if (!strcmp(vartok, "ARCHS")) {
|
||||||
|
vartok = (char *) strtok(valuetok, " ");
|
||||||
|
i = 0;
|
||||||
|
while ((vartok) && (i < ARCHS_MAX)) {
|
||||||
|
currconfigtag->arch[i] = malloc(sizeof vartok);
|
||||||
|
if (!currconfigtag->arch[i]) {
|
||||||
|
fprintf(stderr, "The system is out of memory\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
strcpy(currconfigtag->arch[i], vartok);
|
||||||
|
vartok = strtok(NULL, " ");
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (vartok) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"Error: exceeding number of archs defined; maximum is %d.",ARCHS_MAX);
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
currconfigtag->arch[i] = NULL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Undefined token: %s\n", vartok);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if (configsection == CONF_DEFAULTS_SECTION) {
|
||||||
|
/* we are in the default section */
|
||||||
|
if (!strcmp(vartok, "HTML_BASEDIR")) {
|
||||||
|
configdefaults.html_basedir =
|
||||||
|
(char *) strdup(valuetok);
|
||||||
|
} else if (!strcmp(vartok, "DISTRIBUTION_NAME")) {
|
||||||
|
configdefaults.distribution_name =
|
||||||
|
(char *) strdup(valuetok);
|
||||||
|
} else if (!strcmp(vartok, "URL_ADDRESS")) {
|
||||||
|
configdefaults.url_address =
|
||||||
|
(char *) strdup(valuetok);
|
||||||
|
} else if (!strcmp(vartok, "URL_PREFIX")) {
|
||||||
|
configdefaults.url_prefix =
|
||||||
|
(char *) strdup(valuetok);
|
||||||
|
} else if (!strcmp(vartok, "URL_DIR")) {
|
||||||
|
configdefaults.url_dir =
|
||||||
|
(char *) strdup(valuetok);
|
||||||
|
} else if (!strcmp(vartok, "ARCHS")) {
|
||||||
|
vartok = (char *) strtok(valuetok, " ");
|
||||||
|
i = 0;
|
||||||
|
while ((vartok) && (i < ARCHS_MAX)) {
|
||||||
|
configdefaults.arch[i] = malloc(sizeof vartok);
|
||||||
|
if (!configdefaults.arch[i]) {
|
||||||
|
fprintf(stderr, "The system is out of memory\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
strcpy(configdefaults.arch[i], vartok);
|
||||||
|
vartok = strtok(NULL, " ");
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (vartok) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"Error: exceeding number of archs defined; maximum is %d.",ARCHS_MAX);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fprintf(stderr,
|
||||||
|
"Invalid token for `defaults' tag: %s\n",
|
||||||
|
vartok);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if (configsection == CONF_MAINTAINERS_SECTION) {
|
||||||
|
|
||||||
|
/* find or create maintainer */
|
||||||
|
currmaintainer = getPackagerByName(vartok, 1);
|
||||||
|
|
||||||
|
if (!currmaintainer) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"Error: cannot create maintainers; aborting.");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
currmaintainer->role |= PACKAGER_ROLE_MAINTAINER;
|
||||||
|
|
||||||
|
vartok = (char *) strtok(valuetok, "\"");
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while ((currmaintainer->alias[i]) && (i < PACKAGER_MAXALIASES)) i++;
|
||||||
|
|
||||||
|
while ((vartok) && (i < PACKAGER_MAXALIASES)) {
|
||||||
|
currmaintainer->alias[i]=strdup(vartok);
|
||||||
|
vartok = strtok(NULL, "\"");
|
||||||
|
vartok = strtok(NULL, "\"");
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (vartok) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"Error: exceeding number of aliases defined for maintainer %s.",currmaintainer->name);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* check for errors and complete previous tag infos */
|
||||||
|
for(currconfigtag = firstconfigtag; currconfigtag;
|
||||||
|
currconfigtag = currconfigtag->next) {
|
||||||
|
|
||||||
|
if (!currconfigtag->repository_dir) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"REPOSITORY_DIR not given for tag %s\n",
|
||||||
|
currconfigtag->tag);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!currconfigtag->repository_source_dir) {
|
||||||
|
strncpy(buf, currconfigtag->repository_dir, PATH_MAX);
|
||||||
|
strncat(buf, "/SRPMS.base/", PATH_MAX);
|
||||||
|
currconfigtag->repository_source_dir =
|
||||||
|
(char *) strdup(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
currconfigtag->repository_level=0;
|
||||||
|
|
||||||
|
for (i = 0; i < ALT_REPS_MAX; i++) {
|
||||||
|
if (currconfigtag->repository[i]) {
|
||||||
|
currconfigtag->repository_level=i+1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
currconfigtag->repository[currconfigtag->repository_level]=currconfigtag;
|
||||||
|
|
||||||
|
if (!currconfigtag->description)
|
||||||
|
currconfigtag->description=currconfigtag->tag;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fin);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
char **
|
char **
|
||||||
dupnargv(char **argv, int count)
|
dupnargv(char **argv, int count)
|
||||||
{
|
{
|
||||||
|
@ -19,6 +19,7 @@ struct configDefaults {
|
|||||||
char *url_dir;
|
char *url_dir;
|
||||||
char *arch[ARCHS_MAX];
|
char *arch[ARCHS_MAX];
|
||||||
};
|
};
|
||||||
|
static struct configDefaults configdefaults;
|
||||||
|
|
||||||
struct configTag {
|
struct configTag {
|
||||||
struct configDefaults *configdefaults;
|
struct configDefaults *configdefaults;
|
||||||
@ -40,5 +41,6 @@ struct configTag {
|
|||||||
struct headerStats stats;
|
struct headerStats stats;
|
||||||
struct configTag *next;
|
struct configTag *next;
|
||||||
};
|
};
|
||||||
|
static struct configTag *firstconfigtag = NULL, *configtag = NULL;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -20,6 +20,9 @@ typedef char sizeString[SSSIZE];
|
|||||||
#define LOG_DEBUG 4
|
#define LOG_DEBUG 4
|
||||||
#define LOG_MARK 8
|
#define LOG_MARK 8
|
||||||
|
|
||||||
|
int read_configuration(const char *confFile, const char *tag);
|
||||||
|
struct configTag* findRepositoryByTag(const char *tag);
|
||||||
|
|
||||||
char **dupnargv(char **argv, int count);
|
char **dupnargv(char **argv, int count);
|
||||||
void *memndup(void *memp, size_t size);
|
void *memndup(void *memp, size_t size);
|
||||||
void log_debug_set(int value);
|
void log_debug_set(int value);
|
||||||
|
Loading…
Reference in New Issue
Block a user