Adds support for hardlinks.

This commit is contained in:
Andrea Mazzoleni 2011-03-30 17:24:09 +02:00
parent a5aa964f8f
commit 501e8e7ec3
2 changed files with 11 additions and 3 deletions

View file

@ -132,6 +132,7 @@ struct windows_stat {
int64_t st_size;
int64_t st_mtime;
uint32_t st_mode;
uint32_t st_nlink;
};
/**
@ -167,6 +168,8 @@ static inline void windows_info2stat(const BY_HANDLE_FILE_INFORMATION* info, str
st->st_ino = info->nFileIndexHigh;
st->st_ino <<= 32;
st->st_ino |= info->nFileIndexLow;
st->st_nlink = info->nNumberOfLinks;
}
static inline int windows_fstat(int fd, struct windows_stat* st)

11
scan.c
View file

@ -124,8 +124,13 @@ static void scan_file(struct snapraid_scan* scan, struct snapraid_state* state,
if (file) {
/* check if multiple files have the same inode */
if (file->is_present) {
fprintf(stderr, "Internal inode '%llu' inconsistency for file '%s'\n", inode, sub);
exit(EXIT_FAILURE);
if (st->st_nlink > 1) {
printf("warning: Ignored hardlink '/%s'\n", sub);
return;
} else {
fprintf(stderr, "Internal inode '%llu' inconsistency for file '%s'\n", inode, sub);
exit(EXIT_FAILURE);
}
}
/* check if the file is not changed */
@ -255,7 +260,7 @@ static void scan_dir(struct snapraid_scan* scan, struct snapraid_state* state, s
}
} else {
if (state->verbose) {
printf("warning: Ignored file '/%s'\n", sub_next);
printf("warning: Ignored special file '/%s'\n", sub_next);
}
}
}