BlockNumber segno);
static int path_cmp(const void *a, const void *b);
static int final_filemap_cmp(const void *a, const void *b);
-static void filemap_list_to_array(void);
+static void filemap_list_to_array(filemap_t *map);
/*
- * Create a new file map.
+ * Create a new file map (stored in the global pointer "filemap").
*/
-filemap_t *
+void
filemap_create(void)
{
filemap_t *map;
Assert(filemap == NULL);
filemap = map;
-
- return map;
}
/*
pg_fatal("remote file list is empty\n");
}
- filemap_list_to_array();
+ filemap_list_to_array(map);
+
+ Assert(map->array != NULL);
+
qsort(map->array, map->narray, sizeof(file_entry_t *), path_cmp);
}
key.path = (char *) path;
key_ptr = &key;
- exists = bsearch(&key_ptr, map->array, map->narray, sizeof(file_entry_t *),
- path_cmp) != NULL;
+ exists = (bsearch(&key_ptr, map->array, map->narray, sizeof(file_entry_t *),
+ path_cmp) != NULL);
/* Remove any file or folder that doesn't exist in the remote system. */
if (!exists)
filemap_t *map = filemap;
file_entry_t **e;
- Assert(filemap->array);
+ Assert(map->array);
segno = blkno / RELSEG_SIZE;
blkno_inseg = blkno % RELSEG_SIZE;
}
/*
- * Convert the linked list of entries in filemap->first/last to the array,
- * filemap->array.
+ * Convert the linked list of entries in map->first/last to the array,
+ * map->array.
*/
static void
-filemap_list_to_array(void)
+filemap_list_to_array(filemap_t *map)
{
int narray;
file_entry_t *entry,
*next;
- filemap->array =
- pg_realloc(filemap->array,
- (filemap->nlist + filemap->narray) * sizeof(file_entry_t));
+ map->array = (file_entry_t **)
+ pg_realloc(map->array,
+ (map->nlist + map->narray) * sizeof(file_entry_t *));
- narray = filemap->narray;
- for (entry = filemap->first; entry != NULL; entry = next)
+ narray = map->narray;
+ for (entry = map->first; entry != NULL; entry = next)
{
- filemap->array[narray++] = entry;
+ map->array[narray++] = entry;
next = entry->next;
entry->next = NULL;
}
- Assert(narray == filemap->nlist + filemap->narray);
- filemap->narray = narray;
- filemap->nlist = 0;
- filemap->first = filemap->last = NULL;
+ Assert(narray == map->nlist + map->narray);
+ map->narray = narray;
+ map->nlist = 0;
+ map->first = map->last = NULL;
}
void
filemap_finalize(void)
{
- filemap_list_to_array();
- qsort(filemap->array, filemap->narray, sizeof(file_entry_t *),
+ filemap_t *map = filemap;
+
+ filemap_list_to_array(map);
+ qsort(map->array, map->narray, sizeof(file_entry_t *),
final_filemap_cmp);
}
map->total_size = 0;
map->fetch_size = 0;
- for (i = 0; i < filemap->narray; i++)
+ for (i = 0; i < map->narray; i++)
{
- entry = filemap->array[i];
+ entry = map->array[i];
if (entry->type != FILE_TYPE_REGULAR)
continue;
void
print_filemap(void)
{
+ filemap_t *map = filemap;
file_entry_t *entry;
int i;
- for (i = 0; i < filemap->narray; i++)
+ for (i = 0; i < map->narray; i++)
{
- entry = filemap->array[i];
+ entry = map->array[i];
if (entry->action != FILE_ACTION_NONE ||
entry->pagemap.bitmapsize > 0)
{
FILE_ACTION_NONE, /* no action (we might still copy modified blocks
* based on the parsed WAL) */
FILE_ACTION_TRUNCATE, /* truncate local file to 'newsize' bytes */
- FILE_ACTION_REMOVE, /* remove local file / directory / symlink */
-
+ FILE_ACTION_REMOVE /* remove local file / directory / symlink */
} file_action_t;
typedef enum
FILE_TYPE_SYMLINK
} file_type_t;
-struct file_entry_t
+typedef struct file_entry_t
{
char *path;
file_type_t type;
char *link_target;
struct file_entry_t *next;
-};
-
-typedef struct file_entry_t file_entry_t;
+} file_entry_t;
-struct filemap_t
+typedef struct filemap_t
{
/*
* New entries are accumulated to a linked list, in process_remote_file
*/
file_entry_t *first;
file_entry_t *last;
- int nlist;
+ int nlist; /* number of entries currently in list */
/*
* After processing all the remote files, the entries in the linked list
* the array, and the linked list is empty.
*/
file_entry_t **array;
- int narray;
+ int narray; /* current length of array */
/*
* Summary information. total_size is the total size of the source cluster,
*/
uint64 total_size;
uint64 fetch_size;
-};
-
-typedef struct filemap_t filemap_t;
-
-extern filemap_t * filemap;
+} filemap_t;
-extern filemap_t *filemap_create(void);
+extern filemap_t *filemap;
+extern void filemap_create(void);
extern void calculate_totals(void);
extern void print_filemap(void);