void usage(void);
-int main(int argc, char * argv[])
+int
+main(int argc, char * argv[])
{
struct stat sb;
char *newcontent = NULL;
dst = argv[1];
- for (i=2; i < argc; i++) {
+ for (i = 2; i < argc; i++) {
newcontentlength += strlen(argv[i]) + 1 /* space or newline */;
}
newcontentlength += 1; /* NUL */
newcontent = malloc(newcontentlength);
- if (newcontent == NULL)
+ if (newcontent == NULL) {
err(EX_UNAVAILABLE, "malloc() failed");
+ }
newcontent[0] = '\0';
- for (i=2; i < argc; i++) {
+ for (i = 2; i < argc; i++) {
strlcat(newcontent, argv[i], newcontentlength);
if (i < argc - 1) {
strlcat(newcontent, " ", newcontentlength);
}
dstfd = open(dst, O_RDWR | O_CREAT | O_APPEND, DEFFILEMODE);
- if (dstfd < 0)
+ if (dstfd < 0) {
err(EX_NOINPUT, "open(%s)", dst);
+ }
ret = fstat(dstfd, &sb);
- if (ret < 0)
+ if (ret < 0) {
err(EX_NOINPUT, "fstat(%s)", dst);
+ }
- if (!S_ISREG(sb.st_mode))
+ if (!S_ISREG(sb.st_mode)) {
err(EX_USAGE, "%s is not a regular file", dst);
+ }
if (sb.st_size != newcontentlength) {
/* obvious new content must be different than old */
}
oldcontent = malloc(newcontentlength);
- if (oldcontent == NULL)
+ if (oldcontent == NULL) {
err(EX_UNAVAILABLE, "malloc(%lu) failed", newcontentlength);
+ }
readsize = read(dstfd, oldcontent, newcontentlength);
- if (readsize == -1)
+ if (readsize == -1) {
err(EX_UNAVAILABLE, "read() failed");
- else if (readsize != newcontentlength)
+ } else if (readsize != newcontentlength) {
errx(EX_UNAVAILABLE, "short read of file");
+ }
if (0 == memcmp(oldcontent, newcontent, newcontentlength)) {
/* binary comparison succeeded, just exit */
free(oldcontent);
ret = close(dstfd);
- if (ret < 0)
+ if (ret < 0) {
err(EX_UNAVAILABLE, "close() failed");
+ }
exit(0);
}
replace:
ret = ftruncate(dstfd, 0);
- if (ret < 0)
+ if (ret < 0) {
err(EX_UNAVAILABLE, "ftruncate() failed");
+ }
writesize = write(dstfd, newcontent, newcontentlength);
- if (writesize == -1)
+ if (writesize == -1) {
err(EX_UNAVAILABLE, "write() failed");
- else if (writesize != newcontentlength)
+ } else if (writesize != newcontentlength) {
errx(EX_UNAVAILABLE, "short write of file");
+ }
ret = close(dstfd);
- if (ret < 0)
+ if (ret < 0) {
err(EX_NOINPUT, "close(dst)");
+ }
return 0;
}
-void usage(void)
+void
+usage(void)
{
fprintf(stderr, "Usage: %s <dst> <new> <contents> <...>\n",
- getprogname());
+ getprogname());
exit(EX_USAGE);
}