Skip to content

Commit

Permalink
x11/mate-panel: fix build with clang 15
Browse files Browse the repository at this point in the history
During an exp-run for llvm 15 (see bug 265425), it turned out that
x11/mate-panel failed to build with clang 15:

  clock-location.c:454:22: error: incompatible pointer to integer conversion assigning to 'glong' (aka 'long') from 'char *(int, int)' [-Wint-conversion]
          sys_timezone = timezone;
                       ^ ~~~~~~~~
  clock-location.c:462:24: error: incompatible pointer to integer conversion assigning to 'glong' (aka 'long') from 'char *(int, int)' [-Wint-conversion]
          local_timezone = timezone;
                         ^ ~~~~~~~~

This is because 'timezone' as a global external variable does not exist
on FreeBSD: it is a glibc-ism. Use struct tm's tm_gmtoff field instead,
which has its sign reversed from the glibc global. There is also no need
to manually account for DST, as tm_gmtoff includes that.

PR:		268795
Approved by:	portmgr (tcberner)
MFH:		2023Q1
  • Loading branch information
DimitryAndric committed Jan 16, 2023
1 parent 2ee331d commit ca9de74
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions x11/mate-panel/files/patch-applets_clock_clock-location.c
@@ -0,0 +1,30 @@
--- applets/clock/clock-location.c.orig 2022-01-26 15:27:16 UTC
+++ applets/clock/clock-location.c
@@ -451,19 +451,27 @@ clock_location_get_offset (ClockLocation *loc)

unsetenv ("TZ");
tm = localtime (&t);
+#ifdef __FreeBSD__
+ sys_timezone = -tm->tm_gmtoff;
+#else
sys_timezone = timezone;

if (tm->tm_isdst > 0) {
sys_timezone -= 3600;
}
+#endif

setenv ("TZ", priv->timezone, 1);
tm = localtime (&t);
+#ifdef __FreeBSD__
+ local_timezone = -tm->tm_gmtoff;
+#else
local_timezone = timezone;

if (tm->tm_isdst > 0) {
local_timezone -= 3600;
}
+#endif

offset = local_timezone - sys_timezone;

0 comments on commit ca9de74

Please sign in to comment.