PERFORCE change 177900 for review
Garrett Cooper
gcooper at FreeBSD.org
Fri May 7 12:52:35 UTC 2010
http://p4web.freebsd.org/@@177900?ac=10
Change 177900 by gcooper at gcooper-bayonetta on 2010/05/07 12:51:53
1. Make code more robust by dealing with potential error cases when
archive_read_new(3) fails.
2. Also, free the archive object after the read is done, if it was
properly initialized.
Affected files ...
.. //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/lib/libpkg/file.c#4 edit
Differences ...
==== //depot/projects/soc2007/gcooper-pkg_install-enhancements-simplified/lib/libpkg/file.c#4 (text+ko) ====
@@ -389,31 +389,38 @@
printf("%s: will extract %s from %s\n",
__func__, file, pkg_name_humanized);
- archive = archive_read_new();
- archive_read_support_compression_all(archive);
- archive_read_support_format_tar(archive);
+ if ((archive = archive_read_new()) != NULL) {
+
+ archive_read_support_compression_all(archive);
+ archive_read_support_format_tar(archive);
+
+ /*
+ * Avoid potential race conditions with
+ * archive_read_open_filename(3), by opening the file
+ * beforehand.
+ */
+ if (pkg == NULL)
+ archive_fd = fileno(stdin);
+ else
+ archive_fd = open(pkg, O_RDONLY);
- /*
- * Avoid potential race conditions with archive_read_open_filename(3),
- * by opening the file beforehand.
- */
- if (pkg == NULL)
- archive_fd = fileno(stdin);
- else
- archive_fd = open(pkg, O_RDONLY);
+ }
+ if (archive == NULL) {
+ error = archive_error_string(archive);
+ warnx("%s: unable to open the package from %s: %s",
+ __func__, pkg_name_humanized, error);
+ }
/* The initial open failed */
- if (archive_fd == -1)
+ else if (archive_fd == -1)
warn("%s: unable to open the package from %s",
__func__, pkg_name_humanized);
/* archive(3) failed to open the file. */
else if (archive_read_open_fd(archive, archive_fd,
ARCHIVE_DEFAULT_BYTES_PER_BLOCK) != ARCHIVE_OK) {
-
error = archive_error_string(archive);
warnx("%s: unable to open the package from %s: %s",
__func__, pkg_name_humanized, error);
-
}
else
while (error == NULL && found_match == FALSE &&
@@ -452,8 +459,9 @@
}
- archive_read_finish(archive);
+ if (archive != NULL)
+ archive_read_finish(archive);
/* Close any open descriptors. */
if (0 <= archive_fd)
close(archive_fd);
@@ -499,21 +507,30 @@
pkg_name_humanized, __func__, file_expr);
}
- archive = archive_read_new();
- archive_read_support_compression_all(archive);
- archive_read_support_format_tar(archive);
+ if ((archive = archive_read_new()) != NULL) {
+
+ archive_read_support_compression_all(archive);
+ archive_read_support_format_tar(archive);
+
+ /*
+ * Avoid potential race conditions with
+ * archive_read_open_filename(3), by opening the file
+ * beforehand.
+ */
+ if (pkg == NULL)
+ archive_fd = fileno(stdin);
+ else
+ archive_fd = open(pkg, O_RDONLY);
- /*
- * Avoid potential race conditions with archive_read_open_filename(3),
- * by opening the file beforehand.
- */
- if (pkg == NULL)
- archive_fd = fileno(stdin);
- else
- archive_fd = open(pkg, O_RDONLY);
+ }
+ if (archive == NULL) {
+ error = archive_error_string(archive);
+ warnx("%s: unable to open the package from %s: %s",
+ __func__, pkg_name_humanized, error);
+ }
/* The initial open failed */
- if (archive_fd == -1)
+ else if (archive_fd == -1)
warn("%s: unable to open the package from %s",
__func__, pkg_name_humanized);
else if (archive_read_open_fd(archive, archive_fd,
@@ -556,8 +573,8 @@
}
serrno = errno;
- archive_read_finish(archive);
-
+ if (archive != NULL)
+ archive_read_finish(archive);
/* Close any open descriptors. */
if (0 <= archive_fd)
close(archive_fd);
More information about the p4-projects
mailing list