This email list is read-only. Emails sent to this list will be discarded
----------------------------------
ChangeLog | 10 ++
moblin-system-daemon/datetime/datetime.c | 176 ++++++++++++++++++++++++++----
2 files changed, 165 insertions(+), 21 deletions(-)
New commits:
commit 828e3ccbc6a5fcc9f8424b8e1e8335ef0d0e002c
Author: Lilli Szafranski <[EMAIL PROTECTED]>
Date: Fri Aug 15 11:40:32 2008 -0700
Updated set_timezone to persist the current time and changed get_timezone
to not return the full path
Diff in this email is a maximum of 400 lines.
diff --git a/ChangeLog b/ChangeLog
index b8ec55d..ee2e8c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+moblin-settings (2.16)
+
+ * Changed set_timezone to remember the current time so that when the
+ the timezone is set, the computer time stays the same. Before, changing
+ the timezone would cause the time to adjust relative to UTC.
+ * Changed get_timezone to return just the <region>/<timezone> string instead
+ of the full path from /usr/share/localinfo/...
+
+ -- Lilli Szafranski <[EMAIL PROTECTED]> Fri Aug 15 11:36:46 PDT 2008
+
moblin-settings (2.15)
* Fixed memory issue with get_all_timezones
diff --git a/moblin-system-daemon/datetime/datetime.c
b/moblin-system-daemon/datetime/datetime.c
index c2e10fb..7e14830 100644
--- a/moblin-system-daemon/datetime/datetime.c
+++ b/moblin-system-daemon/datetime/datetime.c
@@ -512,8 +512,52 @@ system_daemon_set_timezone(MoblinSystemServer * server,
int len = 0;
struct stat buffer;
+
int retVal = 0;
+
+ struct timeval timev;
+ struct timezone timez;
+
+ struct tm* gTime;
+ struct tm* sTime;
+
+ retVal = gettimeofday(&timev, &timez);
+ if(retVal)
+ {
+ g_set_error (error, error_quark, SYS_GETTIMEOFDAY_ERROR,
+ strerror(errno));
+
+ PRINTF("[system_daemon_set_timezone] gettimeofday
failed:\n\t%s\n", strerror(errno));
+
+ return FALSE;
+ }
+ PRINTF("[system_daemon_set_timezone] gettimeofday successful:\n\tepoch
= %d\n", ((int)timev.tv_sec));
+ gTime = localtime(&timev.tv_sec);
+ if(gTime == NULL)
+ {
+ g_set_error (error, error_quark, TIME_LOCALTIME_ERROR,
+ "localtimefailed");
+
+ PRINTF("[system_daemon_set_timezone] localtime failed.\n");
+
+ return FALSE;
+ }
+ PRINTF ( "[system_daemon_set_timezone] localtime successful:\n\ttime =
%s\n", asctime (gTime) );
+
+ sTime = (struct tm*)malloc(sizeof(struct tm));
+ if(!sTime)
+ {
+ g_set_error (error, error_quark, STDLIB_MALLOC_ERROR,
+ "malloc failed");
+
+ PRINTF("[system_daemon_set_time] malloc failed:\n\tstruct tm*
sTime = NULL\n");
+
+ return FALSE;
+ }
+ memset(sTime, 0, sizeof(struct tm));
+ memcpy(sTime, gTime, sizeof(struct tm));
+
len = strlen(tz) + strlen(LOCAL_INFO_DIR) + 1;
newPath = (char*)malloc(sizeof(char) * len);
if(!newPath)
@@ -523,6 +567,9 @@ system_daemon_set_timezone(MoblinSystemServer * server,
PRINTF("[system_daemon_set_timezone] malloc failed:\n\tchar*
newpath = NULL\n");
+ free(sTime);
+ sTime = NULL;
+
return FALSE;
}
memset(newPath, '\0', len);
@@ -541,6 +588,9 @@ system_daemon_set_timezone(MoblinSystemServer * server,
PRINTF("[system_daemon_set_timezone] stat
failed:\n\t%s\n", strerror(errno));
+ free(sTime);
+ sTime = NULL;
+
free(newPath);
newPath = NULL;
@@ -553,6 +603,9 @@ system_daemon_set_timezone(MoblinSystemServer * server,
PRINTF("[system_daemon_set_timezone] stat failed:\n\t%s
was not a valid timezone.\n", tz);
+ free(sTime);
+ sTime = NULL;
+
free(newPath);
newPath = NULL;
@@ -575,9 +628,12 @@ system_daemon_set_timezone(MoblinSystemServer * server,
PRINTF("[system_daemon_set_timezone] unlink
failed:\n\t%s\n", strerror(errno));
- free(newPath);
- newPath = NULL;
+ free(sTime);
+ sTime = NULL;
+ free(newPath);
+ newPath = NULL;
+
return FALSE;
}
PRINTF("[system_daemon_set_timezone] unlink successful:\n\t
Previously configured timezone removed.\n");
@@ -589,9 +645,12 @@ system_daemon_set_timezone(MoblinSystemServer * server,
PRINTF("[system_daemon_set_timezone] lstat failed:\n\t%s\n",
strerror(errno));
+ free(sTime);
+ sTime = NULL;
+
free(newPath);
newPath = NULL;
-
+
return FALSE;
}
else // lstat() failed because the file (/etc/localtime) did not exist
@@ -609,18 +668,61 @@ system_daemon_set_timezone(MoblinSystemServer * server,
g_set_error (error, error_quark, UNISTD_SYMLINK_ERROR,
strerror(errno));
- PRINTF("[system_daemon_set_timezone] symlink failed:\n\t%s\n",
strerror(errno));
-
+ PRINTF("[system_daemon_set_timezone] symlink failed:\n\t%s\n",
strerror(errno));
+
+ free(sTime);
+ sTime = NULL;
+
free(newPath);
newPath = NULL;
-
+
return FALSE;
}
PRINTF("[system_daemon_set_timezone] symlink successful.\n\tTimezone
configured.\n");
-
+
+ // Getting the seconds since the Epoch from the time structure
+ timev.tv_sec = mktime(sTime);
+ if(timev.tv_sec == (time_t)(-1))
+ {
+ g_set_error (error, error_quark, TIME_MKTIME_ERROR,
+ "mktime error; likely invalid input");
+
+ PRINTF("[system_daemon_set_timezone] mktime failed:\n\tLikely
that your input is not valid.\n");// errno= %s\n"), strerror(errno));
+
+ free(sTime);
+ sTime = NULL;
+
+ free(newPath);
+ newPath = NULL;
+
+ return FALSE;
+ }
+ PRINTF("[system_daemon_set_timezone] mktime successful:\n\tepoch = %d\n",
((int)timev.tv_sec));
+
+ retVal = settimeofday(&timev, &timez);
+ if(retVal)
+ {
+ g_set_error (error, error_quark, SYS_SETTIMEOFDAY_ERROR,
+ strerror(errno));
+
+ PRINTF("[system_daemon_set_timezone] settimeofday
failed:\n\t%s\n", strerror(errno));
+
+ free(sTime);
+ sTime = NULL;
+
+ free(newPath);
+ newPath = NULL;
+
+ return FALSE;
+ }
+ PRINTF("[system_daemon_set_timezone] settimeofday successful.\n");
+
+ free(sTime);
+ sTime = NULL;
+
free(newPath);
newPath = NULL;
-
+
PRINTF("[system_daemon_set_timezone] end\n");
return TRUE;
}
@@ -636,6 +738,10 @@ system_daemon_get_timezone(MoblinSystemServer * server,
int retVal = 0;
int len = 0;
+ char* tempTz = NULL;
+
+ *tz = NULL;
+
PRINTF("[system_daemon_get_timezone] Checking for previously configured
timezone.\n");
retVal = lstat(ETC_LOCAL_DIR, &buffer);
if(retVal) // lstat failed
@@ -644,8 +750,6 @@ system_daemon_get_timezone(MoblinSystemServer * server,
{
g_set_error (error, error_quark, SYS_STAT_LSTAT_ERROR,
strerror(errno));
-
- *tz = NULL;
PRINTF("[system_daemon_get_timezone] lstat
failed:\n\t%s\n", strerror(errno));
return FALSE;
@@ -657,7 +761,6 @@ system_daemon_get_timezone(MoblinSystemServer * server,
PRINTF("[system_daemon_get_timezone] No previously
configured timezone.\n");
- *tz = NULL;
return TRUE;
}
}
@@ -668,7 +771,6 @@ system_daemon_get_timezone(MoblinSystemServer * server,
{
PRINTF("[system_daemon_get_timezone] No previously configured
timezone.\n");
- *tz = NULL;
return TRUE;
}
@@ -676,8 +778,8 @@ system_daemon_get_timezone(MoblinSystemServer * server,
len = (size_t)buffer.st_size + 1;
- *tz = (char*)malloc(len);
- if(!*tz)
+ tempTz = (char*)malloc(len);
+ if(!tempTz)
{
g_set_error (error, error_quark, STDLIB_MALLOC_ERROR,
"malloc failed");
@@ -686,9 +788,9 @@ system_daemon_get_timezone(MoblinSystemServer * server,
return FALSE;
}
- memset(*tz, '\0', len);
+ memset(tempTz, '\0', len);
- retVal = readlink(ETC_LOCAL_DIR, *tz, len);
+ retVal = readlink(ETC_LOCAL_DIR, tempTz, len);
if(retVal == -1)
{
g_set_error (error, error_quark, UNISTD_READLINK_ERROR,
@@ -696,8 +798,8 @@ system_daemon_get_timezone(MoblinSystemServer * server,
PRINTF("[system_daemon_get_timezone] readlink failed:\n\t%s\n",
strerror(errno));
- free(*tz);
- *tz = NULL;
+ free(tempTz);
+ tempTz = NULL;
return FALSE;
}
@@ -709,17 +811,49 @@ system_daemon_get_timezone(MoblinSystemServer * server,
PRINTF("[system_daemon_get_timezone] readlink failed, buffer
overflow:\n\t%s\n", strerror(errno));
- free(*tz);
- *tz = NULL;
+ free(tempTz);
+ tempTz = NULL;
return FALSE;
}
PRINTF("[system_daemon_get_timezone] readlink successful.\n");
- (*tz)[len] = '\0';
+ if( tempTz != strstr(tempTz, LOCAL_INFO_DIR) )
+ {
+ g_set_error (error, error_quark, SYS_STAT_LSTAT_ERROR,
+ "invalid timezone");
+
+ PRINTF("[system_daemon_get_timezone] Timezone is
invalid:\n\t%s\n", tempTz);
+ free(tempTz);
+ tempTz = NULL;
+
+ return FALSE;
+ }
+
+ len = strlen(tempTz) - strlen(LOCAL_INFO_DIR) + 1;
+ (*tz) = (char*)malloc(sizeof(char) * len);
+ if(!(*tz))
+ {
+ g_set_error (error, error_quark, STDLIB_MALLOC_ERROR,
+ "malloc failed");
+
+ PRINTF("[system_daemon_get_timezone] malloc failed:\n\tchar* tz
= NULL\n");
+
+ free(tempTz);
+ tempTz = NULL;
+
+ return FALSE;
+ }
+ memset((*tz), '\0', len);
+ memcpy((*tz), tempTz + strlen(LOCAL_INFO_DIR), len - 1);
+ (*tz)[len - 1] = '\0';
+
PRINTF("[system_daemon_get_timezone] Get timezone successful:\n\t%s\n",
*tz);
+ free(tempTz);
+ tempTz = NULL;
+
PRINTF("[system_daemon_get_timezone] end\n");
return TRUE;
}
_______________________________________________
Commits mailing list
[email protected]
https://www.moblin.org/mailman/listinfo/commits