[pacman-dev] [PATCH 1/5] add real_line_size to alpm_read_buffer

Dave Reisner dreisner at archlinux.org
Wed Jun 13 14:00:39 EDT 2012


We inevitably call strlen() or similar on the line returned from
_alpm_archive_fgets(), so include the line size of the interesting line
in the struct.

Signed-off-by: Dave Reisner <dreisner at archlinux.org>
---
 lib/libalpm/util.c |    4 ++--
 lib/libalpm/util.h |    3 ++-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index 996d7f4..8fd7a10 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -1009,7 +1009,7 @@ int _alpm_archive_fgets(struct archive *a, struct archive_read_buffer *b)
 		}
 
 		if(eol) {
-			size_t len = (size_t)(eol - b->block_offset);
+			size_t len = b->real_line_size = (size_t)(eol - b->block_offset);
 			memcpy(b->line_offset, b->block_offset, len);
 			b->line_offset[len] = '\0';
 			b->block_offset = eol + 1;
@@ -1017,7 +1017,7 @@ int _alpm_archive_fgets(struct archive *a, struct archive_read_buffer *b)
 			return ARCHIVE_OK;
 		} else {
 			/* we've looked through the whole block but no newline, copy it */
-			size_t len = (size_t)(b->block + b->block_size - b->block_offset);
+			size_t len = b->real_line_size = (size_t)(b->block + b->block_size - b->block_offset);
 			memcpy(b->line_offset, b->block_offset, len);
 			b->line_offset += len;
 			b->block_offset = b->block + b->block_size;
diff --git a/lib/libalpm/util.h b/lib/libalpm/util.h
index 87d51ea..9bcd59e 100644
--- a/lib/libalpm/util.h
+++ b/lib/libalpm/util.h
@@ -97,6 +97,7 @@ struct archive_read_buffer {
 	char *line_offset;
 	size_t line_size;
 	size_t max_line_size;
+	size_t real_line_size;
 
 	char *block;
 	char *block_offset;
@@ -108,7 +109,7 @@ struct archive_read_buffer {
 int _alpm_makepath(const char *path);
 int _alpm_makepath_mode(const char *path, mode_t mode);
 int _alpm_copyfile(const char *src, const char *dest);
-size_t _alpm_strip_newline(char *str);
+size_t _alpm_strip_newline(char *str, size_t len);
 
 int _alpm_open_archive(alpm_handle_t *handle, const char *path,
 		struct stat *buf, struct archive **archive, alpm_errno_t error);
-- 
1.7.10.4



More information about the pacman-dev mailing list