--- zic.c 2010-01-06 16:21:33.000000000 +0100 +++ zic.c 2010-06-01 01:34:12.000000000 +0200 @@ -614,6 +614,23 @@ 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 dolink(fromfield, tofield) const char * const fromfield; @@ -649,6 +666,8 @@ 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 &&