commit:     8d4df32d3b04482a072375fd8c4545b4b356de0a
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Sun Jan  5 15:31:26 2020 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Sun Jan  5 15:59:27 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=8d4df32d

libq/tree: distinguish between empty and absent file in tree_pkg_meta_get

Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 libq/tree.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/libq/tree.c b/libq/tree.c
index 0c05dc5..bb3aa69 100644
--- a/libq/tree.c
+++ b/libq/tree.c
@@ -995,11 +995,12 @@ tree_pkg_meta_get_int(tree_pkg_ctx *pkg_ctx, size_t 
offset, const char *keyn)
                        struct stat s;
                        size_t pos;
                        size_t len;
+                       char *p;
                        tree_pkg_meta *m = pkg_ctx->meta;
 
                        if (fd < 0)
                                return NULL;
-                       if (fstat(fd, &s) != 0 || s.st_size == 0) {
+                       if (fstat(fd, &s) != 0) {
                                close(fd);
                                return NULL;
                        }
@@ -1010,24 +1011,23 @@ tree_pkg_meta_get_int(tree_pkg_ctx *pkg_ctx, size_t 
offset, const char *keyn)
 
                        /* TODO: this is an exact copy from 
tree_read_file_binpkg_xpak_cb */
                        if (len - pos < (size_t)(s.st_size + 1)) {
-                               char *old_data = m->Q__data;
+                               p = m->Q__data;
                                len += (((s.st_size + 1) / BUFSIZ) + 1) * 
BUFSIZ;
                                m->Q__data = xrealloc(m->Q__data, len);
                                m->Q__md5_ = (char *)len;
 
                                /* re-position existing keys */
-                               if (old_data != NULL && m->Q__data != old_data) 
{
+                               if (p != NULL && m->Q__data != p) {
                                        char **newdata = (char **)m;
                                        int elems = sizeof(tree_pkg_meta) / 
sizeof(char *);
                                        while (elems-- > 1)  /* skip Q__data 
itself */
                                                if (newdata[elems] != NULL)
-                                                       newdata[elems] =
-                                                               m->Q__data + 
(newdata[elems] - old_data);
+                                                       newdata[elems] = 
m->Q__data + (newdata[elems] - p);
                                }
                        }
 
-                       if (read(fd, &m->Q__data[pos], s.st_size) == 
(ssize_t)s.st_size) {
-                               char *p = *key = m->Q__data + pos;
+                       p = *key = m->Q__data + pos;
+                       if (read(fd, p, s.st_size) == (ssize_t)s.st_size) {
                                p[s.st_size] = '\0';
                                while (s.st_size > 0 && 
isspace((int)p[s.st_size - 1]))
                                        p[--s.st_size] = '\0';

Reply via email to