version 1.37, 2015/04/01 01:03:55 |
version 1.38, 2015/04/11 05:24:30 |
Line 848 string_match(const void *p, const void * |
|
Line 848 string_match(const void *p, const void * |
|
* if any of the references in its meta data file is more recent. |
* if any of the references in its meta data file is more recent. |
* We have to track the latestdir on a per-process basis. |
* We have to track the latestdir on a per-process basis. |
*/ |
*/ |
|
#define LCWD_VNAME_FMT ".meta.%d.lcwd" |
#define LDIR_VNAME_FMT ".meta.%d.ldir" |
#define LDIR_VNAME_FMT ".meta.%d.ldir" |
|
|
/* |
/* |
Line 873 meta_oodate(GNode *gn, Boolean oodate) |
|
Line 874 meta_oodate(GNode *gn, Boolean oodate) |
|
{ |
{ |
static char *tmpdir = NULL; |
static char *tmpdir = NULL; |
static char cwd[MAXPATHLEN]; |
static char cwd[MAXPATHLEN]; |
|
char lcwd_vname[64]; |
char ldir_vname[64]; |
char ldir_vname[64]; |
|
char lcwd[MAXPATHLEN]; |
char latestdir[MAXPATHLEN]; |
char latestdir[MAXPATHLEN]; |
char fname[MAXPATHLEN]; |
char fname[MAXPATHLEN]; |
char fname1[MAXPATHLEN]; |
char fname1[MAXPATHLEN]; |
char fname2[MAXPATHLEN]; |
char fname2[MAXPATHLEN]; |
|
char fname3[MAXPATHLEN]; |
char *p; |
char *p; |
char *cp; |
char *cp; |
char *link_src; |
char *link_src; |
Line 929 meta_oodate(GNode *gn, Boolean oodate) |
|
Line 933 meta_oodate(GNode *gn, Boolean oodate) |
|
err(1, "Could not get current working directory"); |
err(1, "Could not get current working directory"); |
cwdlen = strlen(cwd); |
cwdlen = strlen(cwd); |
} |
} |
|
strlcpy(lcwd, cwd, sizeof(lcwd)); |
|
strlcpy(latestdir, cwd, sizeof(latestdir)); |
|
|
if (!tmpdir) { |
if (!tmpdir) { |
tmpdir = getTmpdir(); |
tmpdir = getTmpdir(); |
Line 1012 meta_oodate(GNode *gn, Boolean oodate) |
|
Line 1018 meta_oodate(GNode *gn, Boolean oodate) |
|
char *tp; |
char *tp; |
|
|
if (lastpid > 0) { |
if (lastpid > 0) { |
/* We need to remember this. */ |
/* We need to remember these. */ |
|
Var_Set(lcwd_vname, lcwd, VAR_GLOBAL, 0); |
Var_Set(ldir_vname, latestdir, VAR_GLOBAL, 0); |
Var_Set(ldir_vname, latestdir, VAR_GLOBAL, 0); |
} |
} |
|
snprintf(lcwd_vname, sizeof(lcwd_vname), LCWD_VNAME_FMT, pid); |
snprintf(ldir_vname, sizeof(ldir_vname), LDIR_VNAME_FMT, pid); |
snprintf(ldir_vname, sizeof(ldir_vname), LDIR_VNAME_FMT, pid); |
lastpid = pid; |
lastpid = pid; |
ldir = Var_Value(ldir_vname, VAR_GLOBAL, &tp); |
ldir = Var_Value(ldir_vname, VAR_GLOBAL, &tp); |
Line 1022 meta_oodate(GNode *gn, Boolean oodate) |
|
Line 1030 meta_oodate(GNode *gn, Boolean oodate) |
|
strlcpy(latestdir, ldir, sizeof(latestdir)); |
strlcpy(latestdir, ldir, sizeof(latestdir)); |
if (tp) |
if (tp) |
free(tp); |
free(tp); |
} else |
} |
strlcpy(latestdir, cwd, sizeof(latestdir)); |
ldir = Var_Value(lcwd_vname, VAR_GLOBAL, &tp); |
|
if (ldir) { |
|
strlcpy(lcwd, ldir, sizeof(lcwd)); |
|
if (tp) |
|
free(tp); |
|
} |
} |
} |
/* Skip past the pid. */ |
/* Skip past the pid. */ |
if (strsep(&p, " ") == NULL) |
if (strsep(&p, " ") == NULL) |
continue; |
continue; |
#ifdef DEBUG_META_MODE |
#ifdef DEBUG_META_MODE |
if (DEBUG(META)) |
if (DEBUG(META)) |
fprintf(debug_file, "%s: %d: cwd=%s ldir=%s\n", fname, lineno, cwd, latestdir); |
fprintf(debug_file, "%s: %d: %d: %c: cwd=%s lcwd=%s ldir=%s\n", |
|
fname, lineno, |
|
pid, buf[0], cwd, lcwd, latestdir); |
#endif |
#endif |
break; |
break; |
} |
} |
Line 1040 meta_oodate(GNode *gn, Boolean oodate) |
|
Line 1055 meta_oodate(GNode *gn, Boolean oodate) |
|
/* Process according to record type. */ |
/* Process according to record type. */ |
switch (buf[0]) { |
switch (buf[0]) { |
case 'X': /* eXit */ |
case 'X': /* eXit */ |
|
Var_Delete(lcwd_vname, VAR_GLOBAL); |
Var_Delete(ldir_vname, VAR_GLOBAL); |
Var_Delete(ldir_vname, VAR_GLOBAL); |
lastpid = 0; /* no need to save ldir_vname */ |
lastpid = 0; /* no need to save ldir_vname */ |
break; |
break; |
Line 1051 meta_oodate(GNode *gn, Boolean oodate) |
|
Line 1067 meta_oodate(GNode *gn, Boolean oodate) |
|
|
|
child = atoi(p); |
child = atoi(p); |
if (child > 0) { |
if (child > 0) { |
|
snprintf(cldir, sizeof(cldir), LCWD_VNAME_FMT, child); |
|
Var_Set(cldir, lcwd, VAR_GLOBAL, 0); |
snprintf(cldir, sizeof(cldir), LDIR_VNAME_FMT, child); |
snprintf(cldir, sizeof(cldir), LDIR_VNAME_FMT, child); |
Var_Set(cldir, latestdir, VAR_GLOBAL, 0); |
Var_Set(cldir, latestdir, VAR_GLOBAL, 0); |
|
#ifdef DEBUG_META_MODE |
|
if (DEBUG(META)) |
|
fprintf(debug_file, "%s: %d: %d: cwd=%s lcwd=%s ldir=%s\n", |
|
fname, lineno, |
|
child, cwd, lcwd, latestdir); |
|
#endif |
} |
} |
} |
} |
break; |
break; |
|
|
case 'C': /* Chdir */ |
case 'C': /* Chdir */ |
/* Update the latest directory. */ |
/* Update lcwd and latest directory. */ |
strlcpy(latestdir, p, sizeof(latestdir)); |
strlcpy(latestdir, p, sizeof(latestdir)); |
|
strlcpy(lcwd, p, sizeof(lcwd)); |
|
Var_Set(lcwd_vname, lcwd, VAR_GLOBAL, 0); |
|
Var_Set(ldir_vname, lcwd, VAR_GLOBAL, 0); |
|
#ifdef DEBUG_META_MODE |
|
if (DEBUG(META)) |
|
fprintf(debug_file, "%s: %d: cwd=%s ldir=%s\n", fname, lineno, cwd, lcwd); |
|
#endif |
break; |
break; |
|
|
case 'M': /* renaMe */ |
case 'M': /* renaMe */ |
Line 1208 meta_oodate(GNode *gn, Boolean oodate) |
|
Line 1239 meta_oodate(GNode *gn, Boolean oodate) |
|
snprintf(fname1, sizeof(fname1), "%s/%s", latestdir, p); |
snprintf(fname1, sizeof(fname1), "%s/%s", latestdir, p); |
sdirs[sdx++] = fname1; |
sdirs[sdx++] = fname1; |
|
|
if (strcmp(latestdir, cwd) != 0) { |
if (strcmp(latestdir, lcwd) != 0) { |
/* Check vs cwd */ |
/* Check vs lcwd */ |
snprintf(fname2, sizeof(fname2), "%s/%s", cwd, p); |
snprintf(fname2, sizeof(fname2), "%s/%s", lcwd, p); |
sdirs[sdx++] = fname2; |
sdirs[sdx++] = fname2; |
} |
} |
|
if (strcmp(lcwd, cwd) != 0) { |
|
/* Check vs cwd */ |
|
snprintf(fname3, sizeof(fname3), "%s/%s", cwd, p); |
|
sdirs[sdx++] = fname3; |
|
} |
} |
} |
sdirs[sdx++] = NULL; |
sdirs[sdx++] = NULL; |
|
|
Line 1251 meta_oodate(GNode *gn, Boolean oodate) |
|
Line 1287 meta_oodate(GNode *gn, Boolean oodate) |
|
oodate = TRUE; |
oodate = TRUE; |
} |
} |
} |
} |
|
if (buf[0] == 'E') { |
|
/* previous latestdir is no longer relevant */ |
|
strlcpy(latestdir, lcwd, sizeof(latestdir)); |
|
} |
break; |
break; |
default: |
default: |
break; |
break; |