| --- ccache.1.orig 2007-05-20 17:30:57.000000000 +1200 |
| +++ ccache.1 2007-05-20 17:31:27.000000000 +1200 |
| @@ -367,12 +367,6 @@ |
| .IP o |
| ccache avoids a double call to cpp on a cache miss |
| .PP |
| -.SH "BUGS" |
| -.PP |
| -When the cache is stored on an NFS filesystem, the filesystem must be |
| -exported with the \fBno_subtree_check\fP option to make renames between |
| -directories reliable\&. |
| -.PP |
| .SH "CREDITS" |
| .PP |
| Thanks to the following people for their contributions to ccache |
| --- util.c.patched 2007-05-20 18:19:11.000000000 +1200 |
| +++ util.c 2007-05-20 18:20:55.000000000 +1200 |
| @@ -58,9 +58,26 @@ |
| } |
| } |
| |
| +static int safe_rename(const char* oldpath, const char* newpath) |
| +{ |
| + /* safe_rename is for creating entries in the cache. |
| + |
| + Works like rename(), but it never overwrites an existing |
| + cache entry. This avoids corruption on NFS. */ |
| + int status = link( oldpath, newpath ); |
| + if( status == 0 || errno == EEXIST ) |
| + { |
| + return unlink( oldpath ); |
| + } |
| + else |
| + { |
| + return -1; |
| + } |
| +} |
| + |
| /* move a file using rename */ |
| int move_file(const char *src, const char *dest) { |
| - return rename(src, dest); |
| + return safe_rename(src, dest); |
| } |
| |
| /* copy a file - used when hard links don't work |