From 912cb45928f03355ca162a2f1286ca49eb58155c Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Mon, 19 Sep 2016 01:49:05 +0200 Subject: Change internal storage of PLIST_DATE values from struct timeval to double This removes the timeval union member from the plist_data_t structure. Since struct timeval is 2x64bit on 64bit platforms this member unnecessarily grew the union size to 16 bytes while a size of 8 bytes is sufficient. Also, on 32bit platforms struct timeval is only 2x32bit of size, limiting the range of possible time values. In addition the binary property list format also stores PLIST_DATE nodes as double. --- src/xplist.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/xplist.c') diff --git a/src/xplist.c b/src/xplist.c index 8fe3604..e55a094 100644 --- a/src/xplist.c +++ b/src/xplist.c @@ -258,7 +258,7 @@ static void node_to_xml(node_t* node, void *xml_struct) case PLIST_DATE: tag = XPLIST_DATE; { - time_t timev = (time_t)node_data->timeval.tv_sec + MAC_EPOCH; + time_t timev = (time_t)node_data->realval + MAC_EPOCH; struct tm *btime = gmtime(&timev); if (btime) { val = (char*)malloc(24); @@ -462,10 +462,9 @@ static void xml_to_node(xmlNodePtr xml_node, plist_t * plist_node) tm_utc = gmtime(&timev); timev -= (mktime(tm_utc) - timev); } - data->timeval.tv_sec = (long)(timev - MAC_EPOCH); - data->timeval.tv_usec = 0; + data->realval = (double)(timev - MAC_EPOCH); data->type = PLIST_DATE; - data->length = sizeof(struct timeval); + data->length = sizeof(double); xmlFree(strval); continue; } -- cgit v1.1-32-gdbae