Fix Amazon S3 store_lookup_last implementation.
[bluesky.git] / bluesky / store-s3.c
index 7f23434..4735de4 100644 (file)
@@ -42,6 +42,7 @@ struct put_info {
 struct list_info {
     int success;
     char *last_entry;
+    gboolean truncated;
 };
 
 static S3Status s3store_get_handler(int bufferSize, const char *buffer,
@@ -145,13 +146,14 @@ static S3Status s3store_list_handler(int isTruncated,
         g_free(info->last_entry);
         info->last_entry = g_strdup(contents[contentsCount - 1].key);
     }
+    info->truncated = isTruncated;
     return S3StatusOK;
 }
 
 static char *s3store_lookup_last(gpointer s, const char *prefix)
 {
     S3Store *store = (S3Store *)s;
-    struct list_info info = {0, NULL};
+    struct list_info info = {0, NULL, FALSE};
 
     struct S3ListBucketHandler handler;
     handler.responseHandler.propertiesCallback
@@ -161,9 +163,15 @@ static char *s3store_lookup_last(gpointer s, const char *prefix)
 
     char *marker = NULL;
 
-    S3_list_bucket(&store->bucket, prefix, marker, NULL, 1024, NULL, &handler, &info);
+    do {
+        S3_list_bucket(&store->bucket, prefix, marker, NULL, 1024, NULL,
+                       &handler, &info);
+        g_free(marker);
+        marker = g_strdup(info.last_entry);
+        g_print("Last key: %s\n", info.last_entry);
+    } while (info.truncated);
 
-    g_print("Last key: %s\n", info.last_entry);
+    g_free(marker);
 
     return info.last_entry;
 }