!180 upgrade to glibc2.34
From: @liqingqing_1229 Reviewed-by: @wswsamao,@wswsamao Signed-off-by: @wswsamao
This commit is contained in:
commit
ac300bf2a3
File diff suppressed because it is too large
Load Diff
@ -1,43 +0,0 @@
|
|||||||
From 5adda61f62b77384718b4c0d8336ade8f2b4b35c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Andreas Schwab <schwab@linux-m68k.org>
|
|
||||||
Date: Fri, 25 Jun 2021 15:02:47 +0200
|
|
||||||
Subject: [PATCH] wordexp: handle overflow in positional parameter number (bug
|
|
||||||
28011)
|
|
||||||
|
|
||||||
Use strtoul instead of atoi so that overflow can be detected.
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://sourceware.org/git/?p=glibc.git;a=commitdiff_plain;h=5adda61f62b77384718b4c0d8336ade8f2b4b35c
|
|
||||||
---
|
|
||||||
posix/wordexp-test.c | 1 +
|
|
||||||
posix/wordexp.c | 2 +-
|
|
||||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/posix/wordexp-test.c b/posix/wordexp-test.c
|
|
||||||
index f93a546d7e..9df02dbbb3 100644
|
|
||||||
--- a/posix/wordexp-test.c
|
|
||||||
+++ b/posix/wordexp-test.c
|
|
||||||
@@ -183,6 +183,7 @@ struct test_case_struct
|
|
||||||
{ 0, NULL, "$var", 0, 0, { NULL, }, IFS },
|
|
||||||
{ 0, NULL, "\"\\n\"", 0, 1, { "\\n", }, IFS },
|
|
||||||
{ 0, NULL, "", 0, 0, { NULL, }, IFS },
|
|
||||||
+ { 0, NULL, "${1234567890123456789012}", 0, 0, { NULL, }, IFS },
|
|
||||||
|
|
||||||
/* Flags not already covered (testit() has special handling for these) */
|
|
||||||
{ 0, NULL, "one two", WRDE_DOOFFS, 2, { "one", "two", }, IFS },
|
|
||||||
diff --git a/posix/wordexp.c b/posix/wordexp.c
|
|
||||||
index bcbe96e48d..1f3b09f721 100644
|
|
||||||
--- a/posix/wordexp.c
|
|
||||||
+++ b/posix/wordexp.c
|
|
||||||
@@ -1399,7 +1399,7 @@ envsubst:
|
|
||||||
/* Is it a numeric parameter? */
|
|
||||||
else if (isdigit (env[0]))
|
|
||||||
{
|
|
||||||
- int n = atoi (env);
|
|
||||||
+ unsigned long n = strtoul (env, NULL, 10);
|
|
||||||
|
|
||||||
if (n >= __libc_argc)
|
|
||||||
/* Substitute NULL. */
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,52 +0,0 @@
|
|||||||
From 217b6dc298156bdb0d6aea9ea93e7e394a5ff091 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Florian Weimer <fweimer@redhat.com>
|
|
||||||
Date: Tue, 1 Jun 2021 17:51:41 +0200
|
|
||||||
Subject: [PATCH] Fix use of __pthread_attr_copy in mq_notify (bug 27896)
|
|
||||||
|
|
||||||
__pthread_attr_copy can fail and does not initialize the attribute
|
|
||||||
structure in that case.
|
|
||||||
|
|
||||||
If __pthread_attr_copy is never called and there is no allocated
|
|
||||||
attribute, pthread_attr_destroy should not be called, otherwise
|
|
||||||
there is a null pointer dereference in rt/tst-mqueue6.
|
|
||||||
|
|
||||||
Fixes commit 42d359350510506b87101cf77202fefcbfc790cb
|
|
||||||
("Use __pthread_attr_copy in mq_notify (bug 27896)").
|
|
||||||
|
|
||||||
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
|
|
||||||
---
|
|
||||||
sysdeps/unix/sysv/linux/mq_notify.c | 11 +++++++++--
|
|
||||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/sysdeps/unix/sysv/linux/mq_notify.c b/sysdeps/unix/sysv/linux/mq_notify.c
|
|
||||||
index f7ddfe5a6c..6f46d29d1d 100644
|
|
||||||
--- a/sysdeps/unix/sysv/linux/mq_notify.c
|
|
||||||
+++ b/sysdeps/unix/sysv/linux/mq_notify.c
|
|
||||||
@@ -258,7 +258,14 @@ mq_notify (mqd_t mqdes, const struct sigevent *notification)
|
|
||||||
if (data.attr == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
- __pthread_attr_copy (data.attr, notification->sigev_notify_attributes);
|
|
||||||
+ int ret = __pthread_attr_copy (data.attr,
|
|
||||||
+ notification->sigev_notify_attributes);
|
|
||||||
+ if (ret != 0)
|
|
||||||
+ {
|
|
||||||
+ free (data.attr);
|
|
||||||
+ __set_errno (ret);
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Construct the new request. */
|
|
||||||
@@ -271,7 +278,7 @@ mq_notify (mqd_t mqdes, const struct sigevent *notification)
|
|
||||||
int retval = INLINE_SYSCALL (mq_notify, 2, mqdes, &se);
|
|
||||||
|
|
||||||
/* If it failed, free the allocated memory. */
|
|
||||||
- if (__glibc_unlikely (retval != 0))
|
|
||||||
+ if (retval != 0 && data.attr != NULL)
|
|
||||||
{
|
|
||||||
pthread_attr_destroy (data.attr);
|
|
||||||
free (data.attr);
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,69 +0,0 @@
|
|||||||
From 42d359350510506b87101cf77202fefcbfc790cb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Andreas Schwab <schwab@linux-m68k.org>
|
|
||||||
Date: Thu, 27 May 2021 12:49:47 +0200
|
|
||||||
Subject: [PATCH] Use __pthread_attr_copy in mq_notify (bug 27896)
|
|
||||||
|
|
||||||
Make a deep copy of the pthread attribute object to remove a potential
|
|
||||||
use-after-free issue.
|
|
||||||
---
|
|
||||||
NEWS | 3 +++
|
|
||||||
sysdeps/unix/sysv/linux/mq_notify.c | 15 ++++++++++-----
|
|
||||||
2 files changed, 13 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/NEWS b/NEWS
|
|
||||||
index 71f5d20..9e5bcf4 100644
|
|
||||||
--- a/NEWS
|
|
||||||
+++ b/NEWS
|
|
||||||
@@ -101,6 +101,9 @@ Changes to build and runtime requirements:
|
|
||||||
* s390x requires GCC 7.1 or newer. See gcc Bug 98269.
|
|
||||||
|
|
||||||
Security related changes:
|
|
||||||
+ CVE-2021-33574: The mq_notify function has a potential use-after-free
|
|
||||||
+ issue when using a notification type of SIGEV_THREAD and a thread
|
|
||||||
+ attribute with a non-default affinity mask.
|
|
||||||
|
|
||||||
CVE-2021-3326: An assertion failure during conversion from the
|
|
||||||
ISO-20220-JP-3 character set using the iconv function has been fixed.
|
|
||||||
diff --git a/sysdeps/unix/sysv/linux/mq_notify.c b/sysdeps/unix/sysv/linux/mq_notify.c
|
|
||||||
index cc575a0..f7ddfe5 100644
|
|
||||||
--- a/sysdeps/unix/sysv/linux/mq_notify.c
|
|
||||||
+++ b/sysdeps/unix/sysv/linux/mq_notify.c
|
|
||||||
@@ -133,8 +133,11 @@ helper_thread (void *arg)
|
|
||||||
(void) __pthread_barrier_wait (¬ify_barrier);
|
|
||||||
}
|
|
||||||
else if (data.raw[NOTIFY_COOKIE_LEN - 1] == NOTIFY_REMOVED)
|
|
||||||
- /* The only state we keep is the copy of the thread attributes. */
|
|
||||||
- free (data.attr);
|
|
||||||
+ {
|
|
||||||
+ /* The only state we keep is the copy of the thread attributes. */
|
|
||||||
+ pthread_attr_destroy (data.attr);
|
|
||||||
+ free (data.attr);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
@@ -255,8 +258,7 @@ mq_notify (mqd_t mqdes, const struct sigevent *notification)
|
|
||||||
if (data.attr == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
- memcpy (data.attr, notification->sigev_notify_attributes,
|
|
||||||
- sizeof (pthread_attr_t));
|
|
||||||
+ __pthread_attr_copy (data.attr, notification->sigev_notify_attributes);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Construct the new request. */
|
|
||||||
@@ -270,7 +272,10 @@ mq_notify (mqd_t mqdes, const struct sigevent *notification)
|
|
||||||
|
|
||||||
/* If it failed, free the allocated memory. */
|
|
||||||
if (__glibc_unlikely (retval != 0))
|
|
||||||
- free (data.attr);
|
|
||||||
+ {
|
|
||||||
+ pthread_attr_destroy (data.attr);
|
|
||||||
+ free (data.attr);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
From dfec225ee1972488bb48a8b67a2c4a13010c334a Mon Sep 17 00:00:00 2001
|
|
||||||
From: JeffyChen <jeffy.chen@rock-chips.com>
|
|
||||||
Date: Fri, 2 Jul 2021 17:39:24 +0200
|
|
||||||
Subject: [PATCH] malloc: Initiate tcache shutdown even without allocations [BZ
|
|
||||||
#28028]
|
|
||||||
|
|
||||||
After commit 1e26d35193efbb29239c710a4c46a64708643320 ("malloc: Fix
|
|
||||||
tcache leak after thread destruction [BZ #22111]"),
|
|
||||||
tcache_shutting_down is still not early enough. When we detach a
|
|
||||||
thread with no tcache allocated, tcache_shutting_down would still be
|
|
||||||
false.
|
|
||||||
|
|
||||||
Reviewed-by: DJ Delorie <dj@redhat.com>
|
|
||||||
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://sourceware.org/git/?p=glibc.git;a=commit;h=dfec225ee1972488bb48a8b67a2c4a13010c334a
|
|
||||||
---
|
|
||||||
malloc/malloc.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/malloc/malloc.c b/malloc/malloc.c
|
|
||||||
index 0e2e1747e0..bb9a1642aa 100644
|
|
||||||
--- a/malloc/malloc.c
|
|
||||||
+++ b/malloc/malloc.c
|
|
||||||
@@ -3144,12 +3144,13 @@ tcache_thread_shutdown (void)
|
|
||||||
int i;
|
|
||||||
tcache_perthread_struct *tcache_tmp = tcache;
|
|
||||||
|
|
||||||
+ tcache_shutting_down = true;
|
|
||||||
+
|
|
||||||
if (!tcache)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Disable the tcache and prevent it from being reinitialized. */
|
|
||||||
tcache = NULL;
|
|
||||||
- tcache_shutting_down = true;
|
|
||||||
|
|
||||||
/* Free all of the entries and the tcache itself back to the arena
|
|
||||||
heap for coalescing. */
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,65 +0,0 @@
|
|||||||
From a4efbf44757477717a907078c340386146c7623f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Stafford Horne <shorne@gmail.com>
|
|
||||||
Date: Wed, 3 Feb 2021 15:36:47 -0300
|
|
||||||
Subject: [PATCH] posix/tst-rfc3484: Fix compile failure linking to local
|
|
||||||
__stat64
|
|
||||||
|
|
||||||
After 04986243d1 ("Remove internal usage of extensible stat functions")
|
|
||||||
linking the __stat64 symbol in getaddrinfo for this test fails with the
|
|
||||||
below error:
|
|
||||||
|
|
||||||
[...] or1k-smh-linux-gnu/bin/ld: [...]/posix/tst-rfc3484.o: in function `gaiconf_reload':
|
|
||||||
[...]/sysdeps/posix/getaddrinfo.c:2136: undefined reference to `__stat64'
|
|
||||||
collect2: error: ld returned 1 exit status
|
|
||||||
|
|
||||||
This is because __stat64 is a local symbol, the test includes the
|
|
||||||
getaddrinfo directly and fails to link against the local symbol. Fix
|
|
||||||
this by setting up an alias to the global stat64 symbol name like is
|
|
||||||
done for other local symbol usage.
|
|
||||||
|
|
||||||
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
|
||||||
---
|
|
||||||
posix/tst-rfc3484-2.c | 1 +
|
|
||||||
posix/tst-rfc3484-3.c | 1 +
|
|
||||||
posix/tst-rfc3484.c | 1 +
|
|
||||||
3 files changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/posix/tst-rfc3484-2.c b/posix/tst-rfc3484-2.c
|
|
||||||
index 5f5ada9420..ce8ccd5f38 100644
|
|
||||||
--- a/posix/tst-rfc3484-2.c
|
|
||||||
+++ b/posix/tst-rfc3484-2.c
|
|
||||||
@@ -11,6 +11,7 @@
|
|
||||||
#define __gethostbyaddr_r gethostbyaddr_r
|
|
||||||
#define __gethostbyname2_r gethostbyname2_r
|
|
||||||
#define __qsort_r qsort_r
|
|
||||||
+#define __stat64 stat64
|
|
||||||
|
|
||||||
void
|
|
||||||
attribute_hidden
|
|
||||||
diff --git a/posix/tst-rfc3484-3.c b/posix/tst-rfc3484-3.c
|
|
||||||
index d9ec5cc851..ecb163963f 100644
|
|
||||||
--- a/posix/tst-rfc3484-3.c
|
|
||||||
+++ b/posix/tst-rfc3484-3.c
|
|
||||||
@@ -11,6 +11,7 @@
|
|
||||||
#define __gethostbyaddr_r gethostbyaddr_r
|
|
||||||
#define __gethostbyname2_r gethostbyname2_r
|
|
||||||
#define __qsort_r qsort_r
|
|
||||||
+#define __stat64 stat64
|
|
||||||
|
|
||||||
void
|
|
||||||
attribute_hidden
|
|
||||||
diff --git a/posix/tst-rfc3484.c b/posix/tst-rfc3484.c
|
|
||||||
index 97d065b6bf..3b2052eb54 100644
|
|
||||||
--- a/posix/tst-rfc3484.c
|
|
||||||
+++ b/posix/tst-rfc3484.c
|
|
||||||
@@ -11,6 +11,7 @@
|
|
||||||
#define __gethostbyaddr_r gethostbyaddr_r
|
|
||||||
#define __gethostbyname2_r gethostbyname2_r
|
|
||||||
#define __qsort_r qsort_r
|
|
||||||
+#define __stat64 stat64
|
|
||||||
|
|
||||||
void
|
|
||||||
attribute_hidden
|
|
||||||
--
|
|
||||||
2.23.0
|
|
||||||
|
|
||||||
Binary file not shown.
30
glibc.spec
30
glibc.spec
@ -59,8 +59,8 @@
|
|||||||
# glibc - The GNU C Library (glibc) core package.
|
# glibc - The GNU C Library (glibc) core package.
|
||||||
##############################################################################
|
##############################################################################
|
||||||
Name: glibc
|
Name: glibc
|
||||||
Version: 2.33
|
Version: 2.34
|
||||||
Release: 7
|
Release: 1
|
||||||
Summary: The GNU libc libraries
|
Summary: The GNU libc libraries
|
||||||
License: %{all_license}
|
License: %{all_license}
|
||||||
URL: http://www.gnu.org/software/glibc/
|
URL: http://www.gnu.org/software/glibc/
|
||||||
@ -76,18 +76,10 @@ Source7: replace_same_file_to_hard_link.py
|
|||||||
|
|
||||||
Patch0: glibc-1070416.patch
|
Patch0: glibc-1070416.patch
|
||||||
Patch1: glibc-c-utf8-locale.patch
|
Patch1: glibc-c-utf8-locale.patch
|
||||||
Patch2: Fix-the-inaccuracy-of-j0f-j1f-y0f-y1f-BZ.patch
|
|
||||||
|
|
||||||
Patch6000: backport-posix-tst-rfc3484-Fix-compile-failure-linking-to-loc.patch
|
#Patch9000: turn-REP_STOSB_THRESHOLD-from-2k-to-1M.patch
|
||||||
Patch6001: backport-Use-__pthread_attr_copy-in-mq_notify-bug-27896.patch
|
|
||||||
Patch6002: backport-Fix-use-of-__pthread_attr_copy-in-mq_notify-bug-27896.patch
|
|
||||||
Patch6003: backport-CVE-2021-35942-wordexp-handle-overflow-in-positional-parameter-numb.patch
|
|
||||||
Patch6004: backport-malloc-Initiate-tcache-shutdown-even-without-allocat.patch
|
|
||||||
|
|
||||||
Patch9000: turn-REP_STOSB_THRESHOLD-from-2k-to-1M.patch
|
|
||||||
Patch9001: delete-no-hard-link-to-avoid-all_language-package-to.patch
|
Patch9001: delete-no-hard-link-to-avoid-all_language-package-to.patch
|
||||||
Patch9002: build-extra-libpthreadcond-so.patch
|
#Patch9002: build-extra-libpthreadcond-so.patch
|
||||||
Patch9003: remove-country-selection-from-tzselect.patch
|
|
||||||
|
|
||||||
Provides: ldconfig rtld(GNU_HASH) bundled(gnulib)
|
Provides: ldconfig rtld(GNU_HASH) bundled(gnulib)
|
||||||
|
|
||||||
@ -478,7 +470,7 @@ for d in $RPM_BUILD_ROOT%{_libdir} $RPM_BUILD_ROOT/%{_lib}; do
|
|||||||
done
|
done
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
make -j1 install_root=$RPM_BUILD_ROOT install -C build-%{target}
|
make %{?_smp_mflags} install_root=$RPM_BUILD_ROOT install -C build-%{target}
|
||||||
|
|
||||||
%if %{with libpthreadcond}
|
%if %{with libpthreadcond}
|
||||||
cp build-%{target}/nptl/libpthreadcond.so $RPM_BUILD_ROOT%{_libdir}
|
cp build-%{target}/nptl/libpthreadcond.so $RPM_BUILD_ROOT%{_libdir}
|
||||||
@ -621,13 +613,10 @@ mv -f $RPM_BUILD_ROOT/%{_lib}/lib{pcprofile,memusage}.so \
|
|||||||
# Strip all of the installed object files.
|
# Strip all of the installed object files.
|
||||||
strip -g $RPM_BUILD_ROOT%{_libdir}/*.o
|
strip -g $RPM_BUILD_ROOT%{_libdir}/*.o
|
||||||
|
|
||||||
# Rebuild libpthread.a using --whole-archive to ensure all of libpthread
|
# create a null libpthread static link for compatibility.
|
||||||
# is included in a static link.
|
|
||||||
pushd $RPM_BUILD_ROOT%{_prefix}/%{_lib}/
|
pushd $RPM_BUILD_ROOT%{_prefix}/%{_lib}/
|
||||||
%GCC -r -nostdlib -o libpthread.o -Wl,--whole-archive ./libpthread.a
|
|
||||||
rm libpthread.a
|
rm libpthread.a
|
||||||
ar rcs libpthread.a libpthread.o
|
ar rc libpthread.a
|
||||||
rm libpthread.o
|
|
||||||
popd
|
popd
|
||||||
|
|
||||||
for i in $RPM_BUILD_ROOT%{_prefix}/bin/{xtrace,memusage}; do
|
for i in $RPM_BUILD_ROOT%{_prefix}/bin/{xtrace,memusage}; do
|
||||||
@ -778,7 +767,7 @@ grep '/libnss_[a-z]*\.so$' master.filelist > nss-devel.filelist
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
# libnsl subpackage
|
# libnsl subpackage
|
||||||
##############################################################################
|
##############################################################################
|
||||||
grep '/libnsl-[0-9.]*.so$' master.filelist > libnsl.filelist
|
grep -E '/libnsl\.so\.[0-9]+$' master.filelist > libnsl.filelist
|
||||||
test $(wc -l < libnsl.filelist) -eq 1
|
test $(wc -l < libnsl.filelist) -eq 1
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
@ -1174,6 +1163,9 @@ fi
|
|||||||
%doc hesiod/README.hesiod
|
%doc hesiod/README.hesiod
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Aug 5 2021 Qingqing Li<liqingqing3@huawei.com> - 2.34-1
|
||||||
|
- upgrade to 2.34.
|
||||||
|
|
||||||
* Fri Jul 23 2021 zhouwenpei<zhouwenpei1@huawei.com> - 2.33-7
|
* Fri Jul 23 2021 zhouwenpei<zhouwenpei1@huawei.com> - 2.33-7
|
||||||
- remove unnecessary build require.
|
- remove unnecessary build require.
|
||||||
|
|
||||||
|
|||||||
@ -1,151 +0,0 @@
|
|||||||
From dff0000cc458d6d4993b821f2badcf31ea28062e Mon Sep 17 00:00:00 2001
|
|
||||||
From: MarsChan <cmm8293@163.com>
|
|
||||||
Date: Sun, 6 Sep 2020 09:42:44 +0800
|
|
||||||
Subject: [PATCH] remove country selection from tzselect.ksh
|
|
||||||
|
|
||||||
---
|
|
||||||
timezone/tzselect.ksh | 98 +++++++++----------------------------------
|
|
||||||
1 file changed, 20 insertions(+), 78 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/timezone/tzselect.ksh b/timezone/tzselect.ksh
|
|
||||||
index 18fce27e..7e31798c 100755
|
|
||||||
--- a/timezone/tzselect.ksh
|
|
||||||
+++ b/timezone/tzselect.ksh
|
|
||||||
@@ -51,7 +51,7 @@ say() {
|
|
||||||
|
|
||||||
coord=
|
|
||||||
location_limit=10
|
|
||||||
-zonetabtype=zone1970
|
|
||||||
+zonetabtype=zone
|
|
||||||
|
|
||||||
usage="Usage: tzselect [--version] [--help] [-c COORD] [-n LIMIT]
|
|
||||||
Select a timezone interactively.
|
|
||||||
@@ -398,94 +398,37 @@ while
|
|
||||||
'`
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
- # Get list of names of countries in the continent or ocean.
|
|
||||||
- countries=`$AWK \
|
|
||||||
+ # Get list of regions in the continent or ocean.
|
|
||||||
+ timezones=`$AWK \
|
|
||||||
-v continent="$continent" \
|
|
||||||
-v TZ_COUNTRY_TABLE="$TZ_COUNTRY_TABLE" \
|
|
||||||
'
|
|
||||||
BEGIN { FS = "\t" }
|
|
||||||
/^#/ { next }
|
|
||||||
$3 ~ ("^" continent "/") {
|
|
||||||
- ncc = split($1, cc, /,/)
|
|
||||||
+ ncc = split($3, cc, /,/)
|
|
||||||
for (i = 1; i <= ncc; i++)
|
|
||||||
if (!cc_seen[cc[i]]++) cc_list[++ccs] = cc[i]
|
|
||||||
}
|
|
||||||
END {
|
|
||||||
- while (getline <TZ_COUNTRY_TABLE) {
|
|
||||||
- if ($0 !~ /^#/) cc_name[$1] = $2
|
|
||||||
- }
|
|
||||||
for (i = 1; i <= ccs; i++) {
|
|
||||||
- country = cc_list[i]
|
|
||||||
- if (cc_name[country]) {
|
|
||||||
- country = cc_name[country]
|
|
||||||
- }
|
|
||||||
- print country
|
|
||||||
+ print cc_list[i]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
' <"$TZ_ZONE_TABLE" | sort -f`
|
|
||||||
-
|
|
||||||
-
|
|
||||||
- # If there's more than one country, ask the user which one.
|
|
||||||
- case $countries in
|
|
||||||
- *"$newline"*)
|
|
||||||
- echo >&2 'Please select a country' \
|
|
||||||
- 'whose clocks agree with yours.'
|
|
||||||
- doselect $countries
|
|
||||||
- country=$select_result;;
|
|
||||||
- *)
|
|
||||||
- country=$countries
|
|
||||||
- esac
|
|
||||||
-
|
|
||||||
-
|
|
||||||
- # Get list of timezones in the country.
|
|
||||||
- regions=`$AWK \
|
|
||||||
- -v country="$country" \
|
|
||||||
- -v TZ_COUNTRY_TABLE="$TZ_COUNTRY_TABLE" \
|
|
||||||
- '
|
|
||||||
- BEGIN {
|
|
||||||
- FS = "\t"
|
|
||||||
- cc = country
|
|
||||||
- while (getline <TZ_COUNTRY_TABLE) {
|
|
||||||
- if ($0 !~ /^#/ && country == $2) {
|
|
||||||
- cc = $1
|
|
||||||
- break
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- /^#/ { next }
|
|
||||||
- $1 ~ cc { print $4 }
|
|
||||||
- ' <"$TZ_ZONE_TABLE"`
|
|
||||||
-
|
|
||||||
-
|
|
||||||
- # If there's more than one region, ask the user which one.
|
|
||||||
- case $regions in
|
|
||||||
- *"$newline"*)
|
|
||||||
- echo >&2 'Please select one of the following timezones.'
|
|
||||||
- doselect $regions
|
|
||||||
- region=$select_result;;
|
|
||||||
- *)
|
|
||||||
- region=$regions
|
|
||||||
- esac
|
|
||||||
+ regions=[]
|
|
||||||
+ index=0
|
|
||||||
+ for item in $timezones; do
|
|
||||||
+ regions[$index]=`echo $item | awk -F '/' '{print $2}'`
|
|
||||||
+ index=$(($index+1))
|
|
||||||
+ done
|
|
||||||
+ echo >&2 'Please select a timezone' \
|
|
||||||
+ 'whose clocks agree with yours.'
|
|
||||||
+ doselect ${regions[@]}
|
|
||||||
+ region=$select_result
|
|
||||||
|
|
||||||
# Determine TZ from country and region.
|
|
||||||
- TZ=`$AWK \
|
|
||||||
- -v country="$country" \
|
|
||||||
- -v region="$region" \
|
|
||||||
- -v TZ_COUNTRY_TABLE="$TZ_COUNTRY_TABLE" \
|
|
||||||
- '
|
|
||||||
- BEGIN {
|
|
||||||
- FS = "\t"
|
|
||||||
- cc = country
|
|
||||||
- while (getline <TZ_COUNTRY_TABLE) {
|
|
||||||
- if ($0 !~ /^#/ && country == $2) {
|
|
||||||
- cc = $1
|
|
||||||
- break
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- /^#/ { next }
|
|
||||||
- $1 ~ cc && $4 == region { print $3 }
|
|
||||||
- ' <"$TZ_ZONE_TABLE"`
|
|
||||||
+ TZ=$continent/$region
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Make sure the corresponding zoneinfo file exists.
|
|
||||||
@@ -523,11 +466,10 @@ Universal Time is now: $UTdate."
|
|
||||||
echo >&2 ""
|
|
||||||
echo >&2 "The following information has been given:"
|
|
||||||
echo >&2 ""
|
|
||||||
- case $country%$region%$coord in
|
|
||||||
- ?*%?*%) say >&2 " $country$newline $region";;
|
|
||||||
- ?*%%) say >&2 " $country";;
|
|
||||||
- %?*%?*) say >&2 " coord $coord$newline $region";;
|
|
||||||
- %%?*) say >&2 " coord $coord";;
|
|
||||||
+ case $region%$coord in
|
|
||||||
+ ?*%) say >&2 " $region";;
|
|
||||||
+ ?*%?*) say >&2 " coord $coord$newline $region";;
|
|
||||||
+ %?*) say >&2 " coord $coord";;
|
|
||||||
*) say >&2 " TZ='$TZ'"
|
|
||||||
esac
|
|
||||||
say >&2 ""
|
|
||||||
--
|
|
||||||
2.24.3 (Apple Git-128)
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user