version 1.7, 1998/11/25 00:30:25 |
version 1.8, 1999/01/03 05:33:48 |
|
|
Reg2 LINENUM iline; |
Reg2 LINENUM iline; |
char lbuf[MAXLINELEN]; |
char lbuf[MAXLINELEN]; |
|
|
|
if (!filename || *filename == '\0') |
|
return FALSE; |
|
|
statfailed = stat(filename, &filestat); |
statfailed = stat(filename, &filestat); |
if (statfailed && ok_to_create_file) { |
if (statfailed && ok_to_create_file) { |
if (verbose) |
if (verbose) |
|
|
|| ((filestat.st_mode & 0022) == 0 && filestat.st_uid != myuid)) { |
|| ((filestat.st_mode & 0022) == 0 && filestat.st_uid != myuid)) { |
struct stat cstat; |
struct stat cstat; |
char *cs = Nullch; |
char *cs = Nullch; |
char *filebase; |
char *filebase, *filedir; |
int pathlen; |
|
|
|
filebase = basename(filename); |
filebase = basename(filename); |
pathlen = filebase - filename; |
filedir = dirname(filename); |
|
|
/* Put any leading path into `s'. |
/* Leave room in lbuf for the diff command. */ |
Leave room in lbuf for the diff command. */ |
|
s = lbuf + 20; |
s = lbuf + 20; |
strncpy(s, filename, pathlen); |
|
|
|
#define try(f, a1, a2) (Snprintf(s + pathlen, sizeof lbuf - (s + pathlen - lbuf), f, a1, a2), stat(s, &cstat) == 0) |
#define try(f, a1, a2, a3) (Snprintf(s, sizeof lbuf - 20, f, a1, a2, a3), stat(s, &cstat) == 0) |
if ( try("RCS/%s%s", filebase, RCSSUFFIX) |
if ( try("%s/RCS/%s%s", filedir, filebase, RCSSUFFIX) |
|| try("RCS/%s" , filebase, 0) |
|| try("%s/RCS/%s%s", filedir, filebase, "") |
|| try( "%s%s", filebase, RCSSUFFIX)) { |
|| try( "%s/%s%s", filedir, filebase, RCSSUFFIX)) { |
Snprintf(buf, sizeof buf, CHECKOUT, filename); |
Snprintf(buf, sizeof buf, CHECKOUT, filename); |
Snprintf(lbuf, sizeof lbuf, RCSDIFF, filename); |
Snprintf(lbuf, sizeof lbuf, RCSDIFF, filename); |
cs = "RCS"; |
cs = "RCS"; |
} else if ( try("SCCS/%s%s", SCCSPREFIX, filebase) |
} else if ( try("%s/SCCS/%s%s", filedir, SCCSPREFIX, filebase) |
|| try( "%s%s", SCCSPREFIX, filebase)) { |
|| try( "%s/%s%s", filedir, SCCSPREFIX, filebase)) { |
Snprintf(buf, sizeof buf, GET, s); |
Snprintf(buf, sizeof buf, GET, s); |
Snprintf(lbuf, sizeof lbuf, SCCSDIFF, s, filename); |
Snprintf(lbuf, sizeof lbuf, SCCSDIFF, s, filename); |
cs = "SCCS"; |
cs = "SCCS"; |