Fix approxidate("never") to always return 0
[gitweb.git] / diffcore-order.c
index 7ad09461858aa6832b828df411fd1b736f035465..23e93852d8c701760d56e7e728dba7c08367fbe8 100644 (file)
@@ -14,6 +14,7 @@ static void prepare_order(const char *orderfile)
        void *map;
        char *cp, *endp;
        struct stat st;
+       size_t sz;
 
        if (order)
                return;
@@ -25,11 +26,12 @@ static void prepare_order(const char *orderfile)
                close(fd);
                return;
        }
-       map = mmap(NULL, st.st_size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
+       sz = xsize_t(st.st_size);
+       map = mmap(NULL, sz, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
        close(fd);
        if (map == MAP_FAILED)
                return;
-       endp = (char *) map + st.st_size;
+       endp = (char *) map + sz;
        for (pass = 0; pass < 2; pass++) {
                cnt = 0;
                cp = map;
@@ -46,11 +48,8 @@ static void prepare_order(const char *orderfile)
                                if (*ep == '\n') {
                                        *ep = 0;
                                        order[cnt] = cp;
-                               }
-                               else {
-                                       order[cnt] = xmalloc(ep-cp+1);
-                                       memcpy(order[cnt], cp, ep-cp);
-                                       order[cnt][ep-cp] = 0;
+                               } else {
+                                       order[cnt] = xmemdupz(cp, ep - cp);
                                }
                                cnt++;
                        }