svn commit: r191165 - head/lib/libarchive

Tim Kientzle kientzle at FreeBSD.org
Fri Apr 17 00:39:36 UTC 2009


Author: kientzle
Date: Fri Apr 17 00:39:35 2009
New Revision: 191165
URL: http://svn.freebsd.org/changeset/base/191165

Log:
  Merge from libarchive.googlecode.com:  If we're
  given an empty filename, just invoke write_open_fd()
  instead of re-implementing the code to use stdout.

Modified:
  head/lib/libarchive/archive_write_open_filename.c

Modified: head/lib/libarchive/archive_write_open_filename.c
==============================================================================
--- head/lib/libarchive/archive_write_open_filename.c	Fri Apr 17 00:30:56 2009	(r191164)
+++ head/lib/libarchive/archive_write_open_filename.c	Fri Apr 17 00:39:35 2009	(r191165)
@@ -71,24 +71,18 @@ archive_write_open_filename(struct archi
 {
 	struct write_file_data *mine;
 
-	if (filename == NULL || filename[0] == '\0') {
-		mine = (struct write_file_data *)malloc(sizeof(*mine));
-		if (mine == NULL) {
-			archive_set_error(a, ENOMEM, "No memory");
-			return (ARCHIVE_FATAL);
-		}
-		mine->filename[0] = '\0'; /* Record that we're using stdout. */
-	} else {
-		mine = (struct write_file_data *)malloc(sizeof(*mine) + strlen(filename));
-		if (mine == NULL) {
-			archive_set_error(a, ENOMEM, "No memory");
-			return (ARCHIVE_FATAL);
-		}
-		strcpy(mine->filename, filename);
+	if (filename == NULL || filename[0] == '\0')
+		return (archive_write_open_fd(a, 1));
+
+	mine = (struct write_file_data *)malloc(sizeof(*mine) + strlen(filename));
+	if (mine == NULL) {
+		archive_set_error(a, ENOMEM, "No memory");
+		return (ARCHIVE_FATAL);
 	}
+	strcpy(mine->filename, filename);
 	mine->fd = -1;
 	return (archive_write_open(a, mine,
-		    file_open, file_write, file_close));
+		file_open, file_write, file_close));
 }
 
 static int
@@ -104,21 +98,11 @@ file_open(struct archive *a, void *clien
 	/*
 	 * Open the file.
 	 */
-	if (mine->filename[0] != '\0') {
-		mine->fd = open(mine->filename, flags, 0666);
-		if (mine->fd < 0) {
-			archive_set_error(a, errno, "Failed to open '%s'",
-			    mine->filename);
-			return (ARCHIVE_FATAL);
-		}
-	} else {
-		/*
-		 * NULL filename is stdout.
-		 */
-		mine->fd = 1;
-		/* By default, pad archive when writing to stdout. */
-		if (archive_write_get_bytes_in_last_block(a) < 0)
-			archive_write_set_bytes_in_last_block(a, 0);
+	mine->fd = open(mine->filename, flags, 0666);
+	if (mine->fd < 0) {
+		archive_set_error(a, errno, "Failed to open '%s'",
+		    mine->filename);
+		return (ARCHIVE_FATAL);
 	}
 
 	if (fstat(mine->fd, &st) != 0) {
@@ -172,8 +156,7 @@ file_close(struct archive *a, void *clie
 	struct write_file_data	*mine = (struct write_file_data *)client_data;
 
 	(void)a; /* UNUSED */
-	if (mine->filename[0] != '\0')
-		close(mine->fd);
+	close(mine->fd);
 	free(mine);
 	return (ARCHIVE_OK);
 }


More information about the svn-src-head mailing list