mirror of https://github.com/djcb/mu.git
* use timegm instead of the tzset hack
This commit is contained in:
parent
def8094b16
commit
c898265ee5
|
@ -94,6 +94,7 @@ AS_IF([test "x$ac_cv_member_struct_dirent_d_ino" != "xyes"],
|
||||||
|
|
||||||
# we need these
|
# we need these
|
||||||
AC_CHECK_FUNCS([memset memcpy realpath setlocale strerror getpass])
|
AC_CHECK_FUNCS([memset memcpy realpath setlocale strerror getpass])
|
||||||
|
AC_CHECK_FUNC(timegm,[],[AC_MSG_ERROR([missing required function timegm])])
|
||||||
|
|
||||||
# require pkg-config
|
# require pkg-config
|
||||||
AC_PATH_PROG([PKG_CONFIG], [pkg-config], [no])
|
AC_PATH_PROG([PKG_CONFIG], [pkg-config], [no])
|
||||||
|
|
|
@ -75,6 +75,26 @@ get_refs_str (GMimeMessage *msg)
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_date (GMimeMessage *msg)
|
||||||
|
{
|
||||||
|
time_t t;
|
||||||
|
int tz;
|
||||||
|
char buf[64];
|
||||||
|
size_t len;
|
||||||
|
struct tm *t_m;
|
||||||
|
|
||||||
|
|
||||||
|
g_mime_message_get_date (msg, &t, &tz);
|
||||||
|
t_m = localtime (&t);
|
||||||
|
|
||||||
|
len = strftime (buf, sizeof(buf) - 1, "%c", t_m);
|
||||||
|
|
||||||
|
if (len > 0)
|
||||||
|
g_print ("Date : %s (%s%04d)\n",
|
||||||
|
buf,tz < 0 ? "-" : "+", tz);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
test_message (GMimeMessage *msg)
|
test_message (GMimeMessage *msg)
|
||||||
{
|
{
|
||||||
|
@ -98,6 +118,9 @@ test_message (GMimeMessage *msg)
|
||||||
str = g_mime_message_get_subject (msg);
|
str = g_mime_message_get_subject (msg);
|
||||||
g_print ("Subject: %s\n", str ? str : "<none>");
|
g_print ("Subject: %s\n", str ? str : "<none>");
|
||||||
|
|
||||||
|
print_date (msg);
|
||||||
|
|
||||||
|
|
||||||
str = g_mime_message_get_message_id (msg);
|
str = g_mime_message_get_message_id (msg);
|
||||||
g_print ("Msg-id : %s\n", str ? str : "<none>");
|
g_print ("Msg-id : %s\n", str ? str : "<none>");
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ mu_date_str_s (const char* frm, time_t t)
|
||||||
struct tm *tmbuf;
|
struct tm *tmbuf;
|
||||||
static char buf[128];
|
static char buf[128];
|
||||||
static int is_utf8 = -1;
|
static int is_utf8 = -1;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
if (G_UNLIKELY(is_utf8 == -1))
|
if (G_UNLIKELY(is_utf8 == -1))
|
||||||
is_utf8 = mu_util_locale_is_utf8 () ? 1 : 0;
|
is_utf8 = mu_util_locale_is_utf8 () ? 1 : 0;
|
||||||
|
@ -38,7 +39,9 @@ mu_date_str_s (const char* frm, time_t t)
|
||||||
g_return_val_if_fail (frm, NULL);
|
g_return_val_if_fail (frm, NULL);
|
||||||
|
|
||||||
tmbuf = localtime(&t);
|
tmbuf = localtime(&t);
|
||||||
strftime (buf, sizeof(buf), frm, tmbuf);
|
len = strftime (buf, sizeof(buf) - 1, frm, tmbuf);
|
||||||
|
if (len == 0)
|
||||||
|
return ""; /* not necessarily an error... */
|
||||||
|
|
||||||
if (!is_utf8) {
|
if (!is_utf8) {
|
||||||
/* charset is _not_ utf8, so we need to convert it, so
|
/* charset is _not_ utf8, so we need to convert it, so
|
||||||
|
@ -223,14 +226,12 @@ time_t
|
||||||
mu_date_str_to_time_t (const char* date, gboolean local)
|
mu_date_str_to_time_t (const char* date, gboolean local)
|
||||||
{
|
{
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
char tzbuf[16], mydate[14 + 1]; /* YYYYMMDDHHMMSS */
|
char mydate[14 + 1]; /* YYYYMMDDHHMMSS */
|
||||||
char *oldtz;
|
|
||||||
time_t t;
|
time_t t;
|
||||||
|
|
||||||
memset (&tm, 0, sizeof(struct tm));
|
memset (&tm, 0, sizeof(struct tm));
|
||||||
strncpy (mydate, date, 15);
|
strncpy (mydate, date, 15);
|
||||||
mydate[sizeof(mydate)-1]='\0';
|
mydate[sizeof(mydate)-1] = '\0';
|
||||||
oldtz = tzbuf;
|
|
||||||
|
|
||||||
g_return_val_if_fail (date, (time_t)-1);
|
g_return_val_if_fail (date, (time_t)-1);
|
||||||
|
|
||||||
|
@ -240,29 +241,13 @@ mu_date_str_to_time_t (const char* date, gboolean local)
|
||||||
tm.tm_mday = atoi (mydate + 6); mydate[6] = '\0';
|
tm.tm_mday = atoi (mydate + 6); mydate[6] = '\0';
|
||||||
tm.tm_mon = atoi (mydate + 4) - 1; mydate[4] = '\0';
|
tm.tm_mon = atoi (mydate + 4) - 1; mydate[4] = '\0';
|
||||||
tm.tm_year = atoi (mydate) - 1900;
|
tm.tm_year = atoi (mydate) - 1900;
|
||||||
tm.tm_isdst = -1; /* let mktime figure out the dst */
|
tm.tm_isdst = -1;
|
||||||
|
/* let timegm/mktime figure out the dst */
|
||||||
if (!local) { /* temporarily switch to UTC */
|
|
||||||
const char *tz;
|
|
||||||
tz = getenv ("TZ");
|
|
||||||
if (tz && strlen (tz) < sizeof(tz) -1) {
|
|
||||||
strcpy (oldtz, tz);
|
|
||||||
setenv ("TZ", "", 1);
|
|
||||||
tzset ();
|
|
||||||
} else
|
|
||||||
oldtz = NULL;
|
|
||||||
} else
|
|
||||||
oldtz = NULL;
|
|
||||||
|
|
||||||
|
if (local)
|
||||||
t = mktime (&tm);
|
t = mktime (&tm);
|
||||||
|
|
||||||
if (!local) { /* switch back */
|
|
||||||
if (oldtz)
|
|
||||||
setenv("TZ", oldtz, 1);
|
|
||||||
else
|
else
|
||||||
unsetenv("TZ");
|
t = timegm (&tm); /* GNU/BSD specific */
|
||||||
tzset ();
|
|
||||||
}
|
|
||||||
|
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
@ -272,11 +257,15 @@ mu_date_time_t_to_str_s (time_t t, gboolean local)
|
||||||
{
|
{
|
||||||
/* static char datestr[14 + 1]; /\* YYYYMMDDHHMMSS *\/ */
|
/* static char datestr[14 + 1]; /\* YYYYMMDDHHMMSS *\/ */
|
||||||
static char datestr[14+1]; /* YYYYMMDDHHMMSS */
|
static char datestr[14+1]; /* YYYYMMDDHHMMSS */
|
||||||
|
|
||||||
static const char *frm = "%Y%m%d%H%M%S";
|
static const char *frm = "%Y%m%d%H%M%S";
|
||||||
|
size_t len;
|
||||||
|
|
||||||
strftime (datestr, sizeof(datestr), frm,
|
len = strftime (datestr, sizeof(datestr), frm,
|
||||||
local ? localtime (&t) : gmtime(&t));
|
local ? localtime (&t) : gmtime(&t));
|
||||||
|
if (len == 0) {
|
||||||
|
g_warning ("bug: error converting time");
|
||||||
|
return "00000000000000";
|
||||||
|
}
|
||||||
|
|
||||||
return datestr;
|
return datestr;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue