diff options
Diffstat (limited to 'guts/link.c')
-rw-r--r-- | guts/link.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/guts/link.c b/guts/link.c new file mode 100644 index 0000000..278edd7 --- /dev/null +++ b/guts/link.c @@ -0,0 +1,29 @@ +/* + * static int + * wrap_link(const char *oldpath, const char *newpath) { + * int rc = -1; + */ + pseudo_msg_t *msg; + struct stat64 buf; + + rc = real_link(oldpath, newpath); + if (rc == 0) { + /* link(2) will not overwrite; if it succeeded, we know + * that there was no previous file with this name, so we + * shove it into the database. + */ + real___xstat64(_STAT_VER, oldpath, &buf); + /* a link should copy the existing database entry, if + * there is one. OP_LINK is also used to insert unseen + * files, though, so it can't be implicit. + */ + msg = pseudo_client_op(OP_STAT, 0, -1, -1, oldpath, &buf); + if (msg) { + pseudo_stat_msg(&buf, msg); + } + pseudo_client_op(OP_LINK, 0, -1, -1, newpath, &buf); + } + +/* return rc; + * } + */ |