2012-10-29 20:13:44 +01:00
|
|
|
Index: zic.c
|
|
|
|
===================================================================
|
|
|
|
--- zic.c.orig
|
|
|
|
+++ zic.c
|
|
|
|
@@ -576,6 +576,23 @@ _("%s: More than one -L option specified
|
2010-09-21 18:21:55 +02:00
|
|
|
return (errors == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
|
|
|
|
}
|
|
|
|
|
|
|
|
+static int
|
|
|
|
+copy(fromname, toname)
|
|
|
|
+const char * const fromname;
|
|
|
|
+const char * const toname;
|
|
|
|
+{
|
|
|
|
+ if (!fork()) {
|
|
|
|
+ execl("/bin/cp", "cp", fromname, toname, (char*) NULL);
|
|
|
|
+ _exit(1);
|
|
|
|
+ }
|
|
|
|
+ int s;
|
|
|
|
+ if (wait(&s) < 0)
|
|
|
|
+ return -1;
|
|
|
|
+ if (!WIFEXITED(s))
|
|
|
|
+ return -1;
|
|
|
|
+ return -WEXITSTATUS(s);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
static void
|
2012-10-29 20:13:44 +01:00
|
|
|
dolink(const char *const fromfield, const char *const tofield)
|
|
|
|
{
|
|
|
|
@@ -609,6 +626,8 @@ dolink(const char *const fromfield, cons
|
2010-09-21 18:21:55 +02:00
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
|
|
|
|
result = link(fromname, toname);
|
|
|
|
+ if (result != 0)
|
|
|
|
+ result = copy(fromname, toname);
|
|
|
|
#if HAVE_SYMLINK
|
|
|
|
if (result != 0 &&
|
|
|
|
access(fromname, F_OK) == 0 &&
|