7 /* sanitize link() error returns
9 /* #include <sane_fsops.h>
11 /* int sane_link(from, to)
15 /* sane_link() implements the link(2) system call, and works
16 /* around some errors that are possible with NFS file systems.
20 /* The Secure Mailer license must be distributed with this software.
23 /* IBM T.J. Watson Research
25 /* Yorktown Heights, NY 10598, USA
35 /* Utility library. */
38 #include "sane_fsops.h"
40 /* sane_link - sanitize link() error returns */
42 int sane_link(const char *from
, const char *to
)
44 const char *myname
= "sane_link";
50 * Normal case: link() succeeds.
52 if (link(from
, to
) >= 0)
56 * Woops. Save errno, and see if the error is an NFS artefact. If it is,
57 * pretend the error never happened.
60 if (stat(from
, &from_st
) >= 0 && stat(to
, &to_st
) >= 0
61 && from_st
.st_dev
== to_st
.st_dev
62 && from_st
.st_ino
== to_st
.st_ino
) {
63 msg_info("%s(%s,%s): worked around spurious NFS error",
69 * Nope, it didn't. Restore errno and report the error.