version 1.5, 2011/12/12 02:00:49 |
version 1.6, 2011/12/16 08:04:34 |
|
|
exit(EXIT_FAILURE); \ |
exit(EXIT_FAILURE); \ |
} while (/* CONSTCOND */0) |
} while (/* CONSTCOND */0) |
|
|
static int indexhtml(char *, char *); |
static int indexhtml(char *, size_t, char *, size_t); |
static int manup(const struct manpaths *, char *); |
static int manup(const struct manpaths *, char *); |
static int mkpath(char *, mode_t, mode_t); |
static int mkpath(char *, mode_t, mode_t); |
static int treecpy(char *, char *, char *); |
static int treecpy(char *, char *); |
static int update(char *, char *, char *); |
static int update(char *, char *); |
static void usage(void); |
static void usage(void); |
|
|
static const char *progname; |
static const char *progname; |
|
|
* Returns -1 on fatal error, 1 on success. |
* Returns -1 on fatal error, 1 on success. |
*/ |
*/ |
static int |
static int |
indexhtml(char *base, char *dst) |
indexhtml(char *src, size_t ssz, char *dst, size_t dsz) |
{ |
{ |
DB *idx; |
DB *idx; |
DBT key, val; |
DBT key, val; |
size_t sz; |
|
int c, rc; |
int c, rc; |
unsigned int fl; |
unsigned int fl; |
const char *f, *cp; |
const char *f, *cp; |
Line 210 indexhtml(char *base, char *dst) |
|
Line 209 indexhtml(char *base, char *dst) |
|
char fname[MAXPATHLEN]; |
char fname[MAXPATHLEN]; |
pid_t pid; |
pid_t pid; |
|
|
sz = strlen(base); |
|
pid = -1; |
pid = -1; |
|
|
xstrlcpy(fname, dst, MAXPATHLEN); |
xstrlcpy(fname, dst, MAXPATHLEN); |
Line 235 indexhtml(char *base, char *dst) |
|
Line 233 indexhtml(char *base, char *dst) |
|
if (NULL == memchr(f, '\0', val.size - (f - cp))) |
if (NULL == memchr(f, '\0', val.size - (f - cp))) |
break; |
break; |
|
|
base[(int)sz] = '\0'; |
src[(int)ssz] = dst[(int)dsz] = '\0'; |
|
|
xstrlcat(base, "/", MAXPATHLEN); |
xstrlcat(dst, "/", MAXPATHLEN); |
xstrlcat(base, f, MAXPATHLEN); |
xstrlcat(dst, f, MAXPATHLEN); |
|
|
if (-1 == (rc = isnewer(base, f))) { |
xstrlcat(src, "/", MAXPATHLEN); |
|
xstrlcat(src, f, MAXPATHLEN); |
|
|
|
if (-1 == (rc = isnewer(dst, src))) { |
fprintf(stderr, "%s: File missing\n", f); |
fprintf(stderr, "%s: File missing\n", f); |
break; |
break; |
} else if (0 == rc) |
} else if (0 == rc) |
continue; |
continue; |
|
|
d = strrchr(base, '/'); |
d = strrchr(dst, '/'); |
assert(NULL != d); |
assert(NULL != d); |
*d = '\0'; |
*d = '\0'; |
|
|
if (-1 == mkpath(base, 0755, 0755)) { |
if (-1 == mkpath(dst, 0755, 0755)) { |
perror(base); |
perror(dst); |
break; |
break; |
} |
} |
|
|
*d = '/'; |
*d = '/'; |
|
|
if ( ! filecpy(base, f)) |
if ( ! filecpy(dst, src)) |
break; |
break; |
if (verbose) |
if (verbose) |
printf("%s\n", base); |
printf("%s\n", dst); |
} |
} |
|
|
(*idx->close)(idx); |
(*idx->close)(idx); |
Line 279 indexhtml(char *base, char *dst) |
|
Line 280 indexhtml(char *base, char *dst) |
|
* Return -1 on fatal error and 1 if the update went well. |
* Return -1 on fatal error and 1 if the update went well. |
*/ |
*/ |
static int |
static int |
update(char *base, char *dst, char *src) |
update(char *dst, char *src) |
{ |
{ |
size_t dsz, ssz; |
size_t dsz, ssz; |
|
|
Line 304 update(char *base, char *dst, char *src) |
|
Line 305 update(char *base, char *dst, char *src) |
|
if (verbose) |
if (verbose) |
printf("%s\n", dst); |
printf("%s\n", dst); |
|
|
dst[(int)dsz] = '\0'; |
dst[(int)dsz] = src[(int)ssz] = '\0'; |
|
|
return(indexhtml(base, dst)); |
return(indexhtml(src, ssz, dst, dsz)); |
} |
} |
|
|
/* |
/* |
Line 316 update(char *base, char *dst, char *src) |
|
Line 317 update(char *base, char *dst, char *src) |
|
* shouldn't be listed), and 1 if the update went well. |
* shouldn't be listed), and 1 if the update went well. |
*/ |
*/ |
static int |
static int |
treecpy(char *base, char *dst, char *src) |
treecpy(char *dst, char *src) |
{ |
{ |
size_t dsz, ssz; |
size_t dsz, ssz; |
int rc; |
int rc; |
Line 333 treecpy(char *base, char *dst, char *src) |
|
Line 334 treecpy(char *base, char *dst, char *src) |
|
dst[(int)dsz] = src[(int)ssz] = '\0'; |
dst[(int)dsz] = src[(int)ssz] = '\0'; |
|
|
if (1 == rc) |
if (1 == rc) |
return(update(base, dst, src)); |
return(update(dst, src)); |
|
|
xstrlcat(src, "/mandoc.db", MAXPATHLEN); |
xstrlcat(src, "/mandoc.db", MAXPATHLEN); |
xstrlcat(dst, "/mandoc.db", MAXPATHLEN); |
xstrlcat(dst, "/mandoc.db", MAXPATHLEN); |
Line 345 treecpy(char *base, char *dst, char *src) |
|
Line 346 treecpy(char *base, char *dst, char *src) |
|
|
|
dst[(int)dsz] = src[(int)ssz] = '\0'; |
dst[(int)dsz] = src[(int)ssz] = '\0'; |
|
|
return(update(base, dst, src)); |
return(update(dst, src)); |
} |
} |
|
|
/* |
/* |
Line 383 manup(const struct manpaths *dirs, char *base) |
|
Line 384 manup(const struct manpaths *dirs, char *base) |
|
|
|
for (i = 0; i < dirs->sz; i++) { |
for (i = 0; i < dirs->sz; i++) { |
path = dirs->paths[i]; |
path = dirs->paths[i]; |
dst[(int)sz] = base[(int)sz] = '\0'; |
dst[(int)sz] = '\0'; |
xstrlcat(dst, path, MAXPATHLEN); |
xstrlcat(dst, path, MAXPATHLEN); |
if (-1 == mkpath(dst, 0755, 0755)) { |
if (-1 == mkpath(dst, 0755, 0755)) { |
perror(dst); |
perror(dst); |
Line 391 manup(const struct manpaths *dirs, char *base) |
|
Line 392 manup(const struct manpaths *dirs, char *base) |
|
} |
} |
|
|
xstrlcpy(src, path, MAXPATHLEN); |
xstrlcpy(src, path, MAXPATHLEN); |
if (-1 == (c = treecpy(base, dst, src))) |
if (-1 == (c = treecpy(dst, src))) |
break; |
break; |
else if (0 == c) |
else if (0 == c) |
continue; |
continue; |