PERFORCE change 177895 for review
Garrett Cooper
gcooper at FreeBSD.org
Fri May 7 11:25:07 UTC 2010
http://p4web.freebsd.org/@@177895?ac=10
Change 177895 by gcooper at gcooper-bayonetta on 2010/05/07 11:24:07
u
Affected files ...
.. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/updating/main.c#5 edit
Differences ...
==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/usr.sbin/pkg_install/updating/main.c#5 (text+ko) ====
@@ -150,13 +150,21 @@
n = strlcpy(tmp_file + n, "/", sizeof(tmp_file) - n);
n = strlcat(tmp_file + n, pkgdbdir->d_name,
sizeof(tmp_file) - n);
- if (stat(tmp_file, &attribute) == -1) {
- fprintf(stderr, "can't open %s: %s\n",
- tmp_file, strerror(errno));
- return EXIT_FAILURE;
+ /*
+ * XXX (gcooper): convert code to use
+ * fstat(2), open(2), etc to avoid race
+ * conditions.
+ */
+ if (stat(tmp_file, &attribute) == -1)
+ err(EXIT_FAILURE,
+ "could not stat %s",
+ tmp_file);
+ if (S_ISREG(attribute.st_mode)) {
+ /* XXX (gcooper): drop continue. */
+ (void)closedir(dir);
+ continue;
}
- if (attribute.st_mode & S_IFREG)
- continue;
+ /* XXX (gcooper): check return codes. */
(void)strlcat(tmp_file + n, "/",
sizeof(tmp_file) - n);
(void)strlcat(tmp_file + n, CONTENTS_FNAME,
@@ -165,8 +173,10 @@
/* Open +CONTENT file */
fd = fopen(tmp_file, "r");
if (fd == NULL) {
- fprintf(stderr, "warning: can't open %s: %s\n",
- tmp_file, strerror(errno));
+ /* XXX (gcooper): drop continue. */
+ (void)closedir(dir);
+ warn("can't open %s: %s",
+ tmp_file);
continue;
}
@@ -186,20 +196,29 @@
(void)exit(EXIT_FAILURE);
if (pname[strlen(pname) - 1] == '\n')
pname[strlen(pname) - 1] = '\0';
+ /*
+ * XXX (gcooper): check
+ * return code.
+ */
strlcpy (curr->name, pname, strlen(pname)+1);
curr->next = head;
head = curr;
}
}
- if (ferror(fd))
- err(EXIT_FAILURE,
- "error reading input");
+ if (ferror(fd)) {
+ serrno = errno;
+ (void)fclose(fd);
+ (void)closedir(dir);
+ errx(EXIT_FAILURE,
+ "error reading input: %s",
+ strerror(serrno));
+ }
(void)fclose(fd);
}
}
- closedir(dir);
+ (void) closedir(dir);
}
}
@@ -223,17 +242,18 @@
if (tmpline1 != NULL) {
curr = head;
while (curr != NULL) {
- tmpline2 = strstr(updatingline, curr->name);
+ tmpline2 = strstr(updatingline,
+ curr->name);
if (tmpline2 != NULL)
break;
curr = curr->next;
}
if (tmpline2 != NULL) {
/* If -d is set, check if entry is newer than the date. */
- if ((dflag == 1) && (strncmp(dateline, date, 8) < 0))
+ if ((dflag == 1) &&
+ (strncmp(dateline, date, 8) < 0))
continue;
- printf("%s", dateline);
- printf("%s", updatingline);
+ printf("%s%s", dateline, updatingline);
found = 1;
}
}
More information about the p4-projects
mailing list