Fix the dangling pointer(network) inside autosignalpoll_timeout().
[platform/upstream/connman.git] / plugins / loopback.c
index e113887..44100c6 100755 (executable)
@@ -23,6 +23,8 @@
 #include <config.h>
 #endif
 
+#include <stdio.h>
+
 #include <errno.h>
 #include <unistd.h>
 #include <limits.h>
@@ -34,6 +36,8 @@
 #include <net/if.h>
 
 #include <glib.h>
+#include <glib/gprintf.h>
+
 
 #define CONNMAN_API_SUBJECT_TO_CHANGE
 #include <connman/plugin.h>
@@ -62,16 +66,47 @@ static int setup_hostname(void)
 
        memset(system_hostname, 0, sizeof(system_hostname));
 
-       if (gethostname(system_hostname, HOST_NAME_MAX) < 0) {
-               connman_error("Failed to get current hostname");
-               return -EIO;
-       }
+#if defined TIZEN_EXT
+               FILE *fp = NULL;
+#define WIFI_MAC "/opt/etc/.mac.info"
+               {
+                       char* rv = 0;
+                       gchar* dev_id = "TIZEN";
+                       char wifi_mac[HOST_NAME_MAX + 1];
+
+                       fp = fopen(WIFI_MAC, "r");
+                       if(!fp){
+                               connman_error("Failed to get current hostname");
+                               strncpy(system_hostname, dev_id, strlen(dev_id));
+                               goto host_name_end;
+                       }
+
+                       rv = fgets(wifi_mac, HOST_NAME_MAX, fp);
+                       if(!rv){
+                               connman_error("Failed to get current hostname");
+                               strncpy(system_hostname, dev_id, strlen(dev_id));
+                               fclose(fp);
+                               goto host_name_end;
+                       }
+
+                       dev_id = g_base64_encode((const guchar *)wifi_mac, strlen(wifi_mac));
+                       g_sprintf(system_hostname, "TIZEN-%s", dev_id);
+                       g_free(dev_id);
+                       fclose(fp);
+               }
 
-       if (strlen(system_hostname) > 0 &&
-                               strcmp(system_hostname, "(none)") != 0)
-               connman_info("System hostname is %s", system_hostname);
-       else
-               create_hostname();
+       host_name_end :
+#else
+               if (gethostname(system_hostname, HOST_NAME_MAX) < 0) {
+                       connman_error("Failed to get current hostname");
+                       return -EIO;
+               }
+#endif
+               if (strlen(system_hostname) > 0 &&
+                                       strcmp(system_hostname, "(none)") != 0)
+                       connman_info("System hostname is %s", system_hostname);
+               else
+                       create_hostname();
 
        memset(name, 0, sizeof(name));