summaryrefslogtreecommitdiff
path: root/liblightdm-gobject
diff options
context:
space:
mode:
authorMichael Terry <michael.terry@canonical.com>2014-02-18 16:44:30 -0500
committerMichael Terry <michael.terry@canonical.com>2014-02-18 16:44:30 -0500
commit065745fe5e93d975affbf31b6bd59cb613746a7a (patch)
tree907e872246a0b8b7ddc19b7612a162e1af70fb1a /liblightdm-gobject
parent6b90c538990ac8d8d0d3634dba9c58874f2f3491 (diff)
downloadlightdm-065745fe5e93d975affbf31b6bd59cb613746a7a.tar.gz
Make directory creation synchronous
Diffstat (limited to 'liblightdm-gobject')
-rw-r--r--liblightdm-gobject/greeter.c31
-rw-r--r--liblightdm-gobject/lightdm/greeter.h2
2 files changed, 27 insertions, 6 deletions
diff --git a/liblightdm-gobject/greeter.c b/liblightdm-gobject/greeter.c
index 1d52218e..2fedb5c0 100644
--- a/liblightdm-gobject/greeter.c
+++ b/liblightdm-gobject/greeter.c
@@ -91,7 +91,8 @@ typedef enum
SERVER_MESSAGE_CONNECTED = 0,
SERVER_MESSAGE_PROMPT_AUTHENTICATION,
SERVER_MESSAGE_END_AUTHENTICATION,
- SERVER_MESSAGE_SESSION_RESULT
+ SERVER_MESSAGE_SESSION_RESULT,
+ SERVER_MESSAGE_SHARED_DIR_RESULT,
} ServerMessage;
/**
@@ -1108,7 +1109,7 @@ lightdm_greeter_start_session_sync (LightDMGreeter *greeter, const gchar *sessio
}
/**
- * lightdm_greeter_ensure_shared_data_dir:
+ * lightdm_greeter_ensure_shared_data_dir_sync:
* @greeter: A #LightDMGreeter
* @username: A username
*
@@ -1122,13 +1123,17 @@ lightdm_greeter_start_session_sync (LightDMGreeter *greeter, const gchar *sessio
* LightDM will automatically create these if the user actually logs in, so
* greeters only need to call this method if they want to store something in
* the directory themselves.
+ *
+ * Return value: TRUE if the directory is ready for use.
**/
-void
-lightdm_greeter_ensure_shared_data_dir (LightDMGreeter *greeter, const gchar *username)
+gboolean
+lightdm_greeter_ensure_shared_data_dir_sync (LightDMGreeter *greeter, const gchar *username)
{
LightDMGreeterPrivate *priv;
guint8 message[MAX_MESSAGE_LENGTH];
- gsize offset = 0;
+ guint8 *response;
+ gsize response_length, offset = 0;
+ guint32 id, return_code = 1;
g_return_if_fail (LIGHTDM_IS_GREETER (greeter));
@@ -1139,6 +1144,22 @@ lightdm_greeter_ensure_shared_data_dir (LightDMGreeter *greeter, const gchar *us
write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_ENSURE_SHARED_DIR, string_length (username), &offset);
write_string (message, MAX_MESSAGE_LENGTH, username, &offset);
write_message (greeter, message, offset);
+
+ response = read_message (greeter, &response_length, TRUE);
+ if (!response)
+ return FALSE;
+
+ offset = 0;
+ id = read_int (response, response_length, &offset);
+ read_int (response, response_length, &offset);
+ if (id == SERVER_MESSAGE_SHARED_DIR_RESULT)
+ return_code = read_int (response, response_length, &offset);
+ else
+ g_warning ("Expected SHARED_DIR_RESULT message, got %d", id);
+
+ g_free (response);
+
+ return return_code == 0;
}
static void
diff --git a/liblightdm-gobject/lightdm/greeter.h b/liblightdm-gobject/lightdm/greeter.h
index f0b59f83..d5277514 100644
--- a/liblightdm-gobject/lightdm/greeter.h
+++ b/liblightdm-gobject/lightdm/greeter.h
@@ -121,7 +121,7 @@ void lightdm_greeter_set_language (LightDMGreeter *greeter, const gchar *languag
gboolean lightdm_greeter_start_session_sync (LightDMGreeter *greeter, const gchar *session, GError **error);
-void lightdm_greeter_ensure_shared_data_dir (LightDMGreeter *greeter, const gchar *username);
+gboolean lightdm_greeter_ensure_shared_data_dir_sync (LightDMGreeter *greeter, const gchar *username);
G_END_DECLS