2014-09-03 22:09:53 +02:00
|
|
|
This patch is used on openSUSE versions older than 12.2.
|
|
|
|
Back then, /etc/localtime was either a hard link to a zone
|
|
|
|
file in /usr/share/zoneinfo or a copy of it.
|
|
|
|
|
|
|
|
By default, zic tries the following approaches to create
|
|
|
|
/etc/localtime:
|
|
|
|
|
|
|
|
1. Hard link
|
|
|
|
2. Symbolic link
|
|
|
|
3. File copy
|
|
|
|
|
|
|
|
This patch changes the order to:
|
|
|
|
|
|
|
|
1. Hard link
|
|
|
|
2. File copy
|
|
|
|
3. Symbolic link
|
|
|
|
|
2015-08-14 17:25:10 +02:00
|
|
|
Index: timezone-2015f/zic.c
|
2012-10-27 18:49:53 +02:00
|
|
|
===================================================================
|
2015-08-14 17:25:10 +02:00
|
|
|
--- timezone-2015f.orig/zic.c
|
|
|
|
+++ timezone-2015f/zic.c
|
|
|
|
@@ -738,6 +738,23 @@ relname(char const *dir, char const *bas
|
2015-05-19 17:52:15 +02:00
|
|
|
}
|
2010-09-21 18:21:55 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
+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
|
2015-08-14 17:25:10 +02:00
|
|
|
dolink(char const *fromfield, char const *tofield)
|
2012-10-27 18:49:53 +02:00
|
|
|
{
|
2015-08-14 17:25:10 +02:00
|
|
|
@@ -767,6 +784,8 @@ dolink(char const *fromfield, char const
|
2010-09-21 18:21:55 +02:00
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
|
|
|
|
result = link(fromname, toname);
|
|
|
|
+ if (result != 0)
|
|
|
|
+ result = copy(fromname, toname);
|
2013-10-04 12:00:42 +02:00
|
|
|
if (result != 0) {
|
2013-10-14 16:25:26 +02:00
|
|
|
const char *s = fromname;
|
2013-10-04 12:00:42 +02:00
|
|
|
const char *t;
|