JS_EXPORT_API JSObjectRef installer_get_system_users() { GRAB_CTX (); JSObjectRef array = json_array_create (); struct passwd *user; gchar *username = NULL; int i = 0; while ((user = getpwent ()) != NULL){ if (user->pw_uid >= 1000 || g_strcmp0 ("deepin", user->pw_name) == 0) { continue; } username = g_strdup (user->pw_name); json_array_insert(array, i, jsvalue_from_cstr (get_global_context(), username)); i++; g_free (username); } endpwent (); UNGRAB_CTX (); return array; }
JS_EXPORT_API JSObjectRef installer_get_installation_info () { GRAB_CTX (); JSObjectRef json = json_create (); json_append_string (json, "target", opt_target); json_append_string (json, "home", opt_home); json_append_string (json, "username", opt_username); json_append_string (json, "hostname", opt_hostname); json_append_string (json, "password", opt_password); json_append_string (json, "layout", opt_layout); json_append_string (json, "variant", opt_variant); json_append_string (json, "timezone", opt_timezone); json_append_string (json, "locale", opt_locale); json_append_string (json, "grub", opt_grub); UNGRAB_CTX (); return json; }
JS_EXPORT_API JSObjectRef installer_get_timezone_list () { GRAB_CTX (); gsize index = 0; GError *error = NULL; GFile *file = NULL; GFileInputStream *input = NULL; GDataInputStream *data_input = NULL; JSObjectRef timezones = json_array_create (); file = g_file_new_for_path ("/usr/share/zoneinfo/zone.tab"); if (!g_file_query_exists (file, NULL)) { g_warning ("get timezone list:zone.tab not exists\n"); goto out; } input = g_file_read (file, NULL, &error); if (error != NULL){ g_warning ("get timezone list:read zone.tab error->%s", error->message); goto out; } data_input = g_data_input_stream_new ((GInputStream *) input); if (data_input == NULL) { g_warning ("get timezone list:get data input stream failed\n"); goto out; } char *data = (char *) 1; while (data) { data = g_data_input_stream_read_line (data_input, NULL, NULL, NULL); if (data == NULL) { break; } if (g_str_has_prefix (data, "#")){ g_debug ("get timezone list:comment line, just pass"); continue; } else { gchar **line = g_strsplit (data, "\t", -1); if (line == NULL) { g_warning ("get timezone list:split %s failed\n", data); } else { json_array_insert (timezones, index, jsvalue_from_cstr (get_global_context (), line[2])); index++; g_strfreev (line); } } } goto out; out: if (file != NULL) { g_object_unref (file); } if (data_input != NULL) { g_object_unref (data_input); } if (input != NULL) { g_object_unref (input); } if (error != NULL) { g_error_free (error); error = NULL; } UNGRAB_CTX (); return timezones; }