|
@@ -211,6 +211,20 @@ static void *mmap_file(char const *fname)
|
|
addr = umalloc(sb.st_size);
|
|
addr = umalloc(sb.st_size);
|
|
uread(fd_map, addr, sb.st_size);
|
|
uread(fd_map, addr, sb.st_size);
|
|
}
|
|
}
|
|
|
|
+ if (sb.st_nlink != 1) {
|
|
|
|
+ /* file is hard-linked, break the hard link */
|
|
|
|
+ close(fd_map);
|
|
|
|
+ if (unlink(fname) < 0) {
|
|
|
|
+ perror(fname);
|
|
|
|
+ fail_file();
|
|
|
|
+ }
|
|
|
|
+ fd_map = open(fname, O_RDWR | O_CREAT, sb.st_mode);
|
|
|
|
+ if (fd_map < 0) {
|
|
|
|
+ perror(fname);
|
|
|
|
+ fail_file();
|
|
|
|
+ }
|
|
|
|
+ uwrite(fd_map, addr, sb.st_size);
|
|
|
|
+ }
|
|
return addr;
|
|
return addr;
|
|
}
|
|
}
|
|
|
|
|