version 1.28, 2015/10/25 20:18:37 |
version 1.29, 2015/10/26 14:08:47 |
|
|
|
|
if (inplace != NULL) { |
if (inplace != NULL) { |
if (pledge("stdio rpath wpath cpath fattr", NULL) == -1) |
if (pledge("stdio rpath wpath cpath fattr", NULL) == -1) |
err(1, "pledge"); |
error(1, "pledge"); |
} else { |
} else { |
if (pledge("stdio rpath wpath cpath", NULL) == -1) |
if (pledge("stdio rpath wpath cpath", NULL) == -1) |
err(1, "pledge"); |
error(1, "pledge"); |
} |
} |
|
|
/* First usage case; script is the first arg */ |
/* First usage case; script is the first arg */ |
|
|
process(); |
process(); |
cfclose(prog, NULL); |
cfclose(prog, NULL); |
if (fclose(stdout)) |
if (fclose(stdout)) |
err(FATAL, "stdout: %s", strerror(errno)); |
error(FATAL, "stdout: %s", strerror(errno)); |
exit (rval); |
exit (rval); |
} |
} |
|
|
|
|
switch (script->type) { |
switch (script->type) { |
case CU_FILE: |
case CU_FILE: |
if ((f = fopen(script->s, "r")) == NULL) |
if ((f = fopen(script->s, "r")) == NULL) |
err(FATAL, |
error(FATAL, |
"%s: %s", script->s, strerror(errno)); |
"%s: %s", script->s, strerror(errno)); |
fname = script->s; |
fname = script->s; |
state = ST_FILE; |
state = ST_FILE; |
|
|
/* stdin? */ |
/* stdin? */ |
if (files->fname == NULL) { |
if (files->fname == NULL) { |
if (inplace != NULL) |
if (inplace != NULL) |
err(FATAL, "-i may not be used with stdin"); |
error(FATAL, "-i may not be used with stdin"); |
infile = stdin; |
infile = stdin; |
fname = "stdin"; |
fname = "stdin"; |
outfile = stdout; |
outfile = stdout; |
|
|
fclose(infile); |
fclose(infile); |
if (*oldfname != '\0') { |
if (*oldfname != '\0') { |
if (rename(fname, oldfname) != 0) { |
if (rename(fname, oldfname) != 0) { |
err(WARNING, "rename()"); |
error(WARNING, "rename()"); |
unlink(tmpfname); |
unlink(tmpfname); |
exit(1); |
exit(1); |
} |
} |
|
|
fname = files->fname; |
fname = files->fname; |
if (inplace != NULL) { |
if (inplace != NULL) { |
if (lstat(fname, &sb) != 0) |
if (lstat(fname, &sb) != 0) |
err(1, "%s: %s", fname, |
error(1, "%s: %s", fname, |
strerror(errno ? errno : EIO)); |
strerror(errno ? errno : EIO)); |
if (!S_ISREG(sb.st_mode)) |
if (!S_ISREG(sb.st_mode)) |
err(FATAL, "%s: %s %s", fname, |
error(FATAL, "%s: %s %s", fname, |
"in-place editing only", |
"in-place editing only", |
"works for regular files"); |
"works for regular files"); |
if (*inplace != '\0') { |
if (*inplace != '\0') { |
|
|
len = strlcat(oldfname, inplace, |
len = strlcat(oldfname, inplace, |
sizeof(oldfname)); |
sizeof(oldfname)); |
if (len > sizeof(oldfname)) |
if (len > sizeof(oldfname)) |
err(FATAL, "%s: name too long", fname); |
error(FATAL, "%s: name too long", fname); |
} |
} |
len = snprintf(tmpfname, sizeof(tmpfname), "%s/sedXXXXXXXXXX", |
len = snprintf(tmpfname, sizeof(tmpfname), "%s/sedXXXXXXXXXX", |
dirname(fname)); |
dirname(fname)); |
if (len >= sizeof(tmpfname)) |
if (len >= sizeof(tmpfname)) |
err(FATAL, "%s: name too long", fname); |
error(FATAL, "%s: name too long", fname); |
if ((fd = mkstemp(tmpfname)) == -1) |
if ((fd = mkstemp(tmpfname)) == -1) |
err(FATAL, "%s", fname); |
error(FATAL, "%s", fname); |
if ((outfile = fdopen(fd, "w")) == NULL) { |
if ((outfile = fdopen(fd, "w")) == NULL) { |
unlink(tmpfname); |
unlink(tmpfname); |
err(FATAL, "%s", fname); |
error(FATAL, "%s", fname); |
} |
} |
fchown(fileno(outfile), sb.st_uid, sb.st_gid); |
fchown(fileno(outfile), sb.st_uid, sb.st_gid); |
fchmod(fileno(outfile), sb.st_mode & ALLPERMS); |
fchmod(fileno(outfile), sb.st_mode & ALLPERMS); |
|
|
outfname = "stdout"; |
outfname = "stdout"; |
} |
} |
if ((infile = fopen(fname, "r")) == NULL) { |
if ((infile = fopen(fname, "r")) == NULL) { |
err(WARNING, "%s", strerror(errno)); |
error(WARNING, "%s", strerror(errno)); |
rval = 1; |
rval = 1; |
continue; |
continue; |
} |
} |
|
|
*/ |
*/ |
p = fgetln(infile, &len); |
p = fgetln(infile, &len); |
if (ferror(infile)) |
if (ferror(infile)) |
err(FATAL, "%s: %s", fname, strerror(errno ? errno : EIO)); |
error(FATAL, "%s: %s", fname, strerror(errno ? errno : EIO)); |
if (len != 0 && p[len - 1] == '\n') { |
if (len != 0 && p[len - 1] == '\n') { |
sp->append_newline = 1; |
sp->append_newline = 1; |
len--; |
len--; |