If known, callers can pass the line size to this function in order to
avoid an strlen call. Otherwise, they simply pass 0 and
_alpm_strip_newline will do the call instead.

Signed-off-by: Dave Reisner <dreis...@archlinux.org>
---
 lib/libalpm/be_local.c   |   14 +++++++-------
 lib/libalpm/be_package.c |    2 +-
 lib/libalpm/be_sync.c    |    8 ++++----
 lib/libalpm/util.c       |    8 +++++---
 4 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c
index 30e59d0..ee805b9 100644
--- a/lib/libalpm/be_local.c
+++ b/lib/libalpm/be_local.c
@@ -496,7 +496,7 @@ char *_alpm_local_db_pkgpath(alpm_db_t *db, alpm_pkg_t 
*info,
 
 #define READ_NEXT() do { \
        if(fgets(line, sizeof(line), fp) == NULL && !feof(fp)) goto error; \
-       _alpm_strip_newline(line); \
+       _alpm_strip_newline(line, 0); \
 } while(0)
 
 #define READ_AND_STORE(f) do { \
@@ -509,7 +509,7 @@ char *_alpm_local_db_pkgpath(alpm_db_t *db, alpm_pkg_t 
*info,
        if(fgets(line, sizeof(line), fp) == NULL) {\
                if(!feof(fp)) goto error; else break; \
        } \
-       if(_alpm_strip_newline(line) == 0) break; \
+       if(_alpm_strip_newline(line, 0) == 0) break; \
        STRDUP(linedup, line, goto error); \
        f = alpm_list_add(f, linedup); \
 } while(1) /* note the while(1) and not (0) */
@@ -518,7 +518,7 @@ char *_alpm_local_db_pkgpath(alpm_db_t *db, alpm_pkg_t 
*info,
        if(fgets(line, sizeof(line), fp) == NULL) {\
                if(!feof(fp)) goto error; else break; \
        } \
-       if(_alpm_strip_newline(line) == 0) break; \
+       if(_alpm_strip_newline(line, 0) == 0) break; \
        f = alpm_list_add(f, _alpm_splitdep(line)); \
 } while(1) /* note the while(1) and not (0) */
 
@@ -564,7 +564,7 @@ static int local_db_read(alpm_pkg_t *info, alpm_dbinfrq_t 
inforeq)
                        if(fgets(line, sizeof(line), fp) == NULL && !feof(fp)) {
                                goto error;
                        }
-                       if(_alpm_strip_newline(line) == 0) {
+                       if(_alpm_strip_newline(line, 0) == 0) {
                                /* length of stripped line was zero */
                                continue;
                        }
@@ -651,13 +651,13 @@ static int local_db_read(alpm_pkg_t *info, alpm_dbinfrq_t 
inforeq)
                }
                free(path);
                while(fgets(line, sizeof(line), fp)) {
-                       _alpm_strip_newline(line);
+                       _alpm_strip_newline(line, 0);
                        if(strcmp(line, "%FILES%") == 0) {
                                size_t files_count = 0, files_size = 0, len;
                                alpm_file_t *files = NULL;
 
                                while(fgets(line, sizeof(line), fp) &&
-                                               (len = 
_alpm_strip_newline(line))) {
+                                               (len = 
_alpm_strip_newline(line, 0))) {
                                        if(files_count >= files_size) {
                                                size_t old_size = files_size;
                                                if(files_size == 0) {
@@ -691,7 +691,7 @@ static int local_db_read(alpm_pkg_t *info, alpm_dbinfrq_t 
inforeq)
                                info->files.count = files_count;
                                info->files.files = files;
                        } else if(strcmp(line, "%BACKUP%") == 0) {
-                               while(fgets(line, sizeof(line), fp) && 
_alpm_strip_newline(line)) {
+                               while(fgets(line, sizeof(line), fp) && 
_alpm_strip_newline(line, 0)) {
                                        alpm_backup_t *backup;
                                        CALLOC(backup, 1, 
sizeof(alpm_backup_t), goto error);
                                        if(_alpm_split_backup(line, &backup)) {
diff --git a/lib/libalpm/be_package.c b/lib/libalpm/be_package.c
index 0d296a8..dd027f5 100644
--- a/lib/libalpm/be_package.c
+++ b/lib/libalpm/be_package.c
@@ -168,7 +168,7 @@ static int parse_descfile(alpm_handle_t *handle, struct 
archive *a, alpm_pkg_t *
 
        /* loop until we reach EOF or other error */
        while((ret = _alpm_archive_fgets(a, &buf)) == ARCHIVE_OK) {
-               size_t len = _alpm_strip_newline(buf.line);
+               size_t len = _alpm_strip_newline(buf.line, buf.real_line_size);
 
                linenum++;
                key = buf.line;
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index 02f087a..29ef190 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -482,7 +482,7 @@ cleanup:
 #define READ_NEXT() do { \
        if(_alpm_archive_fgets(archive, &buf) != ARCHIVE_OK) goto error; \
        line = buf.line; \
-       _alpm_strip_newline(line); \
+       _alpm_strip_newline(line, buf.real_line_size); \
 } while(0)
 
 #define READ_AND_STORE(f) do { \
@@ -493,14 +493,14 @@ cleanup:
 #define READ_AND_STORE_ALL(f) do { \
        char *linedup; \
        if(_alpm_archive_fgets(archive, &buf) != ARCHIVE_OK) goto error; \
-       if(_alpm_strip_newline(buf.line) == 0) break; \
+       if(_alpm_strip_newline(buf.line, buf.real_line_size) == 0) break; \
        STRDUP(linedup, buf.line, goto error); \
        f = alpm_list_add(f, linedup); \
 } while(1) /* note the while(1) and not (0) */
 
 #define READ_AND_SPLITDEP(f) do { \
        if(_alpm_archive_fgets(archive, &buf) != ARCHIVE_OK) goto error; \
-       if(_alpm_strip_newline(buf.line) == 0) break; \
+       if(_alpm_strip_newline(buf.line, buf.real_line_size) == 0) break; \
        f = alpm_list_add(f, _alpm_splitdep(line)); \
 } while(1) /* note the while(1) and not (0) */
 
@@ -539,7 +539,7 @@ static int sync_db_read(alpm_db_t *db, struct archive 
*archive,
                int ret;
                while((ret = _alpm_archive_fgets(archive, &buf)) == ARCHIVE_OK) 
{
                        char *line = buf.line;
-                       if(_alpm_strip_newline(line) == 0) {
+                       if(_alpm_strip_newline(line, buf.real_line_size) == 0) {
                                /* length of stripped line was zero */
                                continue;
                        }
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index 8fd7a10..4877ff5 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -195,15 +195,17 @@ cleanup:
 
 /** Trim trailing newlines from a string (if any exist).
  * @param str a single line of text
+ * @param len size of str, if known, else 0
  * @return the length of the trimmed string
  */
-size_t _alpm_strip_newline(char *str)
+size_t _alpm_strip_newline(char *str, size_t len)
 {
-       size_t len;
        if(*str == '\0') {
                return 0;
        }
-       len = strlen(str);
+       if(len == 0) {
+               len = strlen(str);
+       }
        while(len > 0 && str[len - 1] == '\n') {
                len--;
        }
-- 
1.7.10.4


Reply via email to