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

Reply via email to