Converted repo to Git.
[vcfs.git] / store.c
diff --git a/store.c b/store.c
index 5eef6d8..4d6497c 100644 (file)
--- a/store.c
+++ b/store.c
@@ -48,13 +48,13 @@ static void cacheput(struct store *st, struct addr *a, const void *data, ssize_t
        return;
     if(i < 4) {
        tmp = st->cache[he * 4 + i];
-       memmove(&st->cache[he * 4 + 1], &st->cache[he * 4], i);
+       memmove(&st->cache[he * 4 + 1], &st->cache[he * 4], i * sizeof(struct storecache));
        st->cache[he * 4] = tmp;
        return;
     }
     if(st->cache[he * 4 + 3].data != NULL)
        free(st->cache[he * 4 + 3].data);
-    memmove(&st->cache[he * 4 + 1], &st->cache[he * 4], 3);
+    memmove(&st->cache[he * 4 + 1], &st->cache[he * 4], 3 * sizeof(struct storecache));
     st->cache[he * 4].a = *a;
     if(len > 0)
        st->cache[he * 4].data = memcpy(malloc(len), data, len);
@@ -79,18 +79,20 @@ int storeput(struct store *st, const void *buf, size_t len, struct addr *at)
 ssize_t storeget(struct store *st, void *buf, size_t len, struct addr *at)
 {
     ssize_t sz;
+    struct addr at2;
     
-    sz = cacheget(st, at, buf, len);
+    at2 = *at;
+    sz = cacheget(st, &at2, buf, len);
     if(sz != -2) {
        if(sz == -1)
            errno = ENOENT;
        return(sz);
     }
-    sz = st->ops->get(st, buf, len, at);
+    sz = st->ops->get(st, buf, len, &at2);
     if((sz < 0) && (errno == ENOENT))
-       cacheput(st, at, NULL, -1);
+       cacheput(st, &at2, NULL, -1);
     else if(sz >= 0)
-       cacheput(st, at, buf, sz);
+       cacheput(st, &at2, buf, sz);
     return(sz);
 }