X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=fsck.c;h=48fae27d490bf2021f85682616e2503341f5fe83;hp=391516f30ebeacb82758c1aa4af51bfffa45e0c6;hb=d0f8004acf8e8f78323d672813b4ead62d0c92ff;hpb=57dd6cd2a32609b046f0e12dab9588679205c73d diff --git a/fsck.c b/fsck.c index 391516f3..48fae27d 100644 --- a/fsck.c +++ b/fsck.c @@ -176,7 +176,7 @@ static int map_index(const struct osl_table_description *desc, struct osl_object char *filename = index_filename(desc); int ret; - ret = mmap_full_file(filename, O_RDWR, map); + ret = mmap_full_file(filename, O_RDWR, &map->data, &map->size, NULL); PARA_INFO_LOG("mapping index %s: ret: %d, size: %zu\n", filename, ret, map->size); free(filename); return ret; @@ -751,14 +751,14 @@ static int dump_row(struct osl_table *t, unsigned row_num, const char *row_dir) if (!t->num_disk_storage_columns) return 1; dsnc = t->disk_storage_name_column; - ret = get_mapped_object(t, dsnc, i, &obj); + ret = get_mapped_object(t, dsnc, row_num, &obj); if (ret < 0) return ret; hash_object(&obj, hash); ds_name = disk_storage_name_of_hash(t, hash); FOR_EACH_DISK_STORAGE_COLUMN(i, t, cd) { filename = disk_storage_path(t, i, ds_name); - ret = mmap_full_file(filename, O_RDONLY, &obj); + ret = mmap_full_file(filename, O_RDONLY, &obj.data, &obj.size, NULL); free(filename); if (ret < 0) goto out; @@ -789,12 +789,12 @@ static int dump_rows(char *dump_dir, struct osl_table *t) current_dir = make_message("%s/rows_%u-%u", dump_dir, i, i + 999); PARA_NOTICE_LOG("dumping rows %u - %u\n", i, i + 999); ret = para_mkdir(current_dir, 0777); - if (ret < 0) + if (ret < 0 && !is_errno(-ret, EEXIST)) goto out; } row_dir = make_message("%s/row_%03u", current_dir, i); ret = para_mkdir(row_dir, 0777); - if (ret < 0) { + if (ret < 0 && !is_errno(-ret, EEXIST)) { free(row_dir); goto out; } @@ -813,13 +813,18 @@ static int dump_table(char *dump_dir, struct osl_table_description *desc) struct osl_table *t = NULL; int fd, ret = fsck_init(desc, &t); char *desc_file; + char *table_dump_dir = NULL; if (ret < 0) goto out; ret = para_mkdir(dump_dir, 0777); - if (ret < 0) + if (ret < 0 && !is_errno(-ret, EEXIST)) + goto out; + table_dump_dir = make_message("%s/%s", dump_dir, desc->name); + ret = para_mkdir(table_dump_dir, 0777); + if (ret < 0 && !is_errno(-ret, EEXIST)) goto out; - desc_file = make_message("%s/table_description.c", dump_dir); + desc_file = make_message("%s/table_description.c", table_dump_dir); ret = para_open(desc_file, O_WRONLY | O_CREAT | O_EXCL, 0644); free(desc_file); if (ret < 0) @@ -829,8 +834,9 @@ static int dump_table(char *dump_dir, struct osl_table_description *desc) close(fd); if (ret < 0) goto out; - ret = dump_rows(dump_dir, t); + ret = dump_rows(table_dump_dir, t); out: + free(table_dump_dir); fsck_cleanup(t); return ret; } @@ -921,7 +927,7 @@ static int check_all_tables(char *base_dir) return ret; } -int main(__a_unused int argc, char **argv) +int main(int argc, char **argv) { int i, ret; char *base_dir = NULL;