snapper: sort decending for get_shadow_copy_data labels
authorDavid Disseldorp <ddiss@samba.org>
Mon, 15 Oct 2012 10:51:24 +0000 (12:51 +0200)
committerDavid Disseldorp <ddiss@samba.org>
Mon, 15 Apr 2013 16:15:21 +0000 (18:15 +0200)
Required for explorer to correctly present previous versions.

source3/modules/vfs_snapper.c

index bc53464ad4a48433d1ef431e9888d8c074be90fa..d9d406fcefc76f41ef2948c056c37747bea095e9 100644 (file)
@@ -1251,6 +1251,7 @@ static int snapper_get_shadow_copy_data(struct vfs_handle_struct *handle,
        uint32_t num_snaps;
        struct snapper_snap *snaps;
        uint32_t i;
+       uint32_t lbl_off;
 
        tmp_ctx = talloc_new(sc_data);
        if (tmp_ctx == NULL) {
@@ -1309,15 +1310,16 @@ static int snapper_get_shadow_copy_data(struct vfs_handle_struct *handle,
                goto done;
        }
 
-       sc_data->labels = talloc_array(sc_data, SHADOW_COPY_LABEL, num_snaps - 1);
+       sc_data->labels = talloc_array(sc_data, SHADOW_COPY_LABEL, sc_data->num_volumes);
        if (sc_data->labels == NULL) {
                status = NT_STATUS_NO_MEMORY;
                goto err_rsp_free;
        }
 
-       /* start at offset 1, skipping (current) */
-       for (i = 1; i < num_snaps; i++) {
-               char *lbl = sc_data->labels[i - 1];
+       /* start at end for decending order, do not include 0 (current) */
+       lbl_off = 0;
+       for (i = num_snaps - 1; i > 0; i--) {
+               char *lbl = sc_data->labels[lbl_off++];
                struct tm gmt_snap_time;
                struct tm *tm_ret;
                size_t str_sz;