aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Willmann <daniel@totalueberwachung.de>2014-04-16 18:11:07 +0200
committerDaniel Willmann <daniel@totalueberwachung.de>2014-04-16 18:30:16 +0200
commit6dcf22920aed79b06aea8a7bdb68af88aff3a00f (patch)
tree41cb43222ba9b32cb7fef9f48b59394981b4af2c
parenta06d4cca3824eaa16b9b0ce426d1b7ec9b7190e3 (diff)
gsm0411_utils: Use localtime instead of gmtime in gsm340_gen_scts
We actually want to write the local time in SCTS
-rw-r--r--src/gsm/gsm0411_utils.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/gsm/gsm0411_utils.c b/src/gsm/gsm0411_utils.c
index 503571e7..71973a95 100644
--- a/src/gsm/gsm0411_utils.c
+++ b/src/gsm/gsm0411_utils.c
@@ -75,19 +75,23 @@ uint8_t gsm411_unbcdify(uint8_t value)
/* Generate 03.40 TP-SCTS */
void gsm340_gen_scts(uint8_t *scts, time_t time)
{
- struct tm *tm = gmtime(&time);
-
- *scts++ = gsm411_bcdify(tm->tm_year % 100);
- *scts++ = gsm411_bcdify(tm->tm_mon + 1);
- *scts++ = gsm411_bcdify(tm->tm_mday);
- *scts++ = gsm411_bcdify(tm->tm_hour);
- *scts++ = gsm411_bcdify(tm->tm_min);
- *scts++ = gsm411_bcdify(tm->tm_sec);
+ struct tm tm;
+
+ tzset();
+ localtime_r(&time, &tm);
+
+ *scts++ = gsm411_bcdify(tm.tm_year % 100);
+ *scts++ = gsm411_bcdify(tm.tm_mon + 1);
+ *scts++ = gsm411_bcdify(tm.tm_mday);
+ *scts++ = gsm411_bcdify(tm.tm_hour);
+ *scts++ = gsm411_bcdify(tm.tm_min);
+ *scts++ = gsm411_bcdify(tm.tm_sec);
+
#ifdef HAVE_TM_GMTOFF_IN_TM
- if (tm->tm_gmtoff >= 0)
- *scts++ = gsm411_bcdify(tm->tm_gmtoff/(60*15));
+ if (tm.tm_gmtoff >= 0)
+ *scts++ = gsm411_bcdify(tm.tm_gmtoff/(60*15));
else
- *scts++ = gsm411_bcdify(-tm->tm_gmtoff/(60*15)) | 0x08;
+ *scts++ = gsm411_bcdify(-tm.tm_gmtoff/(60*15)) | 0x08;
#else
#warning find a portable way to obtain timezone offset
*scts++ = 0;