plymouthd_CFLAGS = $(PLYMOUTH_CFLAGS) -DPLYMOUTH_PLUGIN_PATH=\"$(libdir)/plymouth/\"
plymouthd_LDADD = $(PLYMOUTH_LIBS) libply/libply.la
plymouthd_SOURCES = \
+ ply-answer.h \
+ ply-answer.c \
ply-boot-protocol.h \
ply-boot-server.h \
ply-boot-server.c \
#include <sysexits.h>
#include <unistd.h>
+#include "ply-answer.h"
#include "ply-boot-server.h"
#include "ply-boot-splash.h"
#include "ply-event-loop.h"
status);
}
-typedef struct
-{
- ply_boot_server_password_answer_handler_t handler;
- void *data;
- state_t *state;
-} password_answer_closure_t;
-
static void
-on_password_answer (password_answer_closure_t *closure,
- const char *password)
+on_ask_for_password (state_t *state,
+ ply_answer_t *answer)
{
- closure->handler (closure->data, password, closure->state->boot_server);
-}
-
-static void
-on_ask_for_password (state_t *state,
- ply_boot_server_password_answer_handler_t answer_handler,
- void *answer_data)
-{
- password_answer_closure_t *closure;
-
if (state->boot_splash != NULL)
{
- answer_handler (answer_data, "", state->boot_server);
+ ply_answer_with_string (answer, "");
return;
}
- closure = malloc (sizeof (password_answer_closure_t));
- closure->handler = answer_handler;
- closure->data = answer_data;
- closure->state = state;
-
- ply_boot_splash_ask_for_password (state->boot_splash,
- (ply_boot_splash_password_answer_handler_t)
- on_password_answer, closure);
+ ply_boot_splash_ask_for_password (state->boot_splash, answer);
}
static void
static void
ply_boot_connection_on_password_answer (ply_boot_connection_t *connection,
const char *password,
- ply_boot_server_t *server)
+ ply_answer_t *answer)
{
size_t size;
!ply_write (connection->fd,
password, size))
ply_error ("could not write bytes: %m");
+
+ ply_answer_free (answer);
}
static void
}
else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PASSWORD) == 0)
{
+ ply_answer_t *answer;
+
+ answer = ply_answer_new ((ply_answer_handler_t)
+ ply_boot_connection_on_password_answer,
+ connection);
+
if (server->ask_for_password_handler != NULL)
server->ask_for_password_handler (server->user_data,
- ply_boot_connection_on_password_answer,
- connection,
+ answer,
server);
/* will reply later
*/
#include <stdint.h>
#include <unistd.h>
+#include "ply-answer.h"
#include "ply-boot-protocol.h"
#include "ply-event-loop.h"
const char *password,
ply_boot_server_t *server);
typedef void (* ply_boot_server_ask_for_password_handler_t) (void *user_data,
- ply_boot_server_password_answer_handler_t on_answer_handler,
- void *answer_data,
+ ply_answer_t *answer,
ply_boot_server_t *server);
typedef void (* ply_boot_server_system_initialized_handler_t) (void *user_data,
#include <stdint.h>
#include <unistd.h>
+#include "ply-answer.h"
#include "ply-event-loop.h"
#include "ply-window.h"
#include "ply-buffer.h"
ply_window_t *window);
void (* ask_for_password) (ply_boot_splash_plugin_t *plugin,
- ply_boot_splash_password_answer_handler_t answer_handler,
- void *answer_data);
+ ply_answer_t *answer);
} ply_boot_splash_plugin_interface_t;
#endif /* PLY_BOOT_SPLASH_PLUGIN_H */
void
ply_boot_splash_ask_for_password (ply_boot_splash_t *splash,
- ply_boot_splash_password_answer_handler_t answer_handler,
- void *answer_data)
+ ply_answer_t *answer)
{
assert (splash != NULL);
if (splash->plugin_interface->ask_for_password == NULL)
{
- answer_handler (answer_data, "");
+ ply_answer_with_string (answer, "");
return;
}
splash->plugin_interface->ask_for_password (splash->plugin,
- answer_handler, answer_data);
+ answer);
}
static void
#include <stdint.h>
#include <unistd.h>
+#include "ply-answer.h"
#include "ply-event-loop.h"
#include "ply-window.h"
#include "ply-buffer.h"
size_t size);
void ply_boot_splash_ask_for_password (ply_boot_splash_t *splash,
- ply_boot_splash_password_answer_handler_t answer_handler,
- void *answer_data);
+ ply_answer_t *answer);
void ply_boot_splash_hide (ply_boot_splash_t *splash);
void ply_boot_splash_attach_to_event_loop (ply_boot_splash_t *splash,
ply_event_loop_t *loop);
details_la_LDFLAGS = -module -avoid-version -export-dynamic
details_la_LIBADD = $(PLYMOUTH_LIBS) ../../libply/libply.la
details_la_SOURCES = $(srcdir)/../../ply-boot-splash-plugin.h \
+ $(srcdir)/../../ply-answer.h \
+ $(srcdir)/../../ply-answer.c \
$(srcdir)/../../ply-window.h \
$(srcdir)/../../ply-window.c \
$(srcdir)/plugin.c
#include <wchar.h>
#include <values.h>
+#include "ply-answer.h"
#include "ply-boot-splash-plugin.h"
#include "ply-buffer.h"
#include "ply-event-loop.h"
{
ply_event_loop_t *loop;
- ply_boot_splash_password_answer_handler_t password_answer_handler;
- void *password_answer_data;
+ ply_answer_t *pending_password_answer;
uint32_t keyboard_input_is_hidden : 1;
};
on_enter (ply_boot_splash_plugin_t *plugin,
const char *line)
{
- if (plugin->password_answer_handler != NULL)
+ if (plugin->pending_password_answer != NULL)
{
- plugin->password_answer_handler (plugin->password_answer_data,
- line);
+ ply_answer_with_string (plugin->pending_password_answer, line);
plugin->keyboard_input_is_hidden = false;
- plugin->password_answer_handler = NULL;
+ plugin->pending_password_answer = NULL;
write (STDOUT_FILENO, CLEAR_LINE_SEQUENCE, strlen (CLEAR_LINE_SEQUENCE));
}
}
void
ask_for_password (ply_boot_splash_plugin_t *plugin,
- ply_boot_splash_password_answer_handler_t answer_handler,
- void *answer_data)
+ ply_answer_t *answer)
{
- plugin->password_answer_handler = answer_handler;
- plugin->password_answer_data = answer_data;
+ plugin->pending_password_answer = answer;
write (STDOUT_FILENO, "\nPassword: ", strlen ("\nPassword: "));
plugin->keyboard_input_is_hidden = true;
fade_in_la_LDFLAGS = -module -avoid-version -export-dynamic
fade_in_la_LIBADD = $(PLYMOUTH_LIBS) ../../libply/libply.la
fade_in_la_SOURCES = $(srcdir)/../../ply-boot-splash-plugin.h \
+ $(srcdir)/../../ply-answer.h \
+ $(srcdir)/../../ply-answer.c \
$(srcdir)/../../ply-window.h \
$(srcdir)/../../ply-window.c \
$(srcdir)/plugin.c
#include <unistd.h>
#include <wchar.h>
+#include "ply-answer.h"
#include "ply-boot-splash-plugin.h"
#include "ply-buffer.h"
#include "ply-event-loop.h"
entry_t *entry;
- ply_boot_splash_password_answer_handler_t password_answer_handler;
- void *password_answer_data;
+ ply_answer_t *pending_password_answer;
double start_time;
double now;
const char *keyboard_input,
size_t character_size)
{
- if (plugin->password_answer_handler == NULL)
+ if (plugin->pending_password_answer == NULL)
return;
plugin->entry->number_of_bullets++;
on_enter (ply_boot_splash_plugin_t *plugin,
const char *text)
{
- plugin->password_answer_handler (plugin->password_answer_data,
- text);
+
+ if (plugin->pending_password_answer == NULL)
+ return;
+
+ ply_answer_with_string (plugin->pending_password_answer, text);
+ plugin->pending_password_answer = NULL;
+
plugin->entry->number_of_bullets = 0;
entry_free (plugin->entry);
plugin->entry = NULL;
void
ask_for_password (ply_boot_splash_plugin_t *plugin,
- ply_boot_splash_password_answer_handler_t answer_handler,
- void *answer_data)
+ ply_answer_t *answer)
{
- plugin->password_answer_handler = answer_handler;
- plugin->password_answer_data = answer_data;
+ plugin->pending_password_answer = answer;
stop_animation (plugin);
show_password_entry (plugin);
spinfinity_la_LDFLAGS = -module -avoid-version -export-dynamic
spinfinity_la_LIBADD = $(PLYMOUTH_LIBS) ../../libply/libply.la
spinfinity_la_SOURCES = $(srcdir)/../../ply-boot-splash-plugin.h \
+ $(srcdir)/../../ply-answer.h \
+ $(srcdir)/../../ply-answer.c \
$(srcdir)/../../ply-window.h \
$(srcdir)/../../ply-window.c \
$(srcdir)/throbber.h \
#include <unistd.h>
#include <wchar.h>
+#include "ply-answer.h"
#include "ply-boot-splash-plugin.h"
#include "ply-buffer.h"
#include "ply-event-loop.h"
entry_t *entry;
throbber_t *throbber;
- ply_boot_splash_password_answer_handler_t password_answer_handler;
- void *password_answer_data;
+ ply_answer_t *pending_password_answer;
};
static void detach_from_event_loop (ply_boot_splash_plugin_t *plugin);
const char *keyboard_input,
size_t character_size)
{
- if (plugin->password_answer_handler == NULL)
+ if (plugin->pending_password_answer == NULL)
return;
plugin->entry->number_of_bullets++;
on_enter (ply_boot_splash_plugin_t *plugin,
const char *text)
{
- if (plugin->password_answer_handler == NULL)
+ if (plugin->pending_password_answer == NULL)
return;
- plugin->password_answer_handler (plugin->password_answer_data,
- text);
+ ply_answer_with_string (plugin->pending_password_answer, text);
+ plugin->pending_password_answer = NULL;
if (plugin->entry != NULL)
{
void
ask_for_password (ply_boot_splash_plugin_t *plugin,
- ply_boot_splash_password_answer_handler_t answer_handler,
- void *answer_data)
+ ply_answer_t *answer)
{
- plugin->password_answer_handler = answer_handler;
- plugin->password_answer_data = answer_data;
+ plugin->pending_password_answer = answer;
stop_animation (plugin);
show_password_entry (plugin);
text_la_LDFLAGS = -module -avoid-version -export-dynamic
text_la_LIBADD = $(PLYMOUTH_LIBS) ../../libply/libply.la
text_la_SOURCES = $(srcdir)/../../ply-boot-splash-plugin.h \
+ $(srcdir)/../../ply-answer.h \
+ $(srcdir)/../../ply-answer.c \
$(srcdir)/../../ply-window.h \
$(srcdir)/../../ply-window.c \
$(srcdir)/plugin.c
#include <values.h>
#include <wchar.h>
+#include "ply-answer.h"
#include "ply-boot-splash-plugin.h"
#include "ply-buffer.h"
#include "ply-event-loop.h"
ply_event_loop_t *loop;
int console_fd;
- ply_boot_splash_password_answer_handler_t password_answer_handler;
- void *password_answer_data;
+
+ ply_answer_t *pending_password_answer;
uint32_t keyboard_input_is_hidden : 1;
};
on_enter (ply_boot_splash_plugin_t *plugin,
const char *line)
{
- if (plugin->password_answer_handler != NULL)
+ if (plugin->pending_password_answer != NULL)
{
- plugin->password_answer_handler (plugin->password_answer_data,
- line);
+ ply_answer_with_string (plugin->pending_password_answer, line);
plugin->keyboard_input_is_hidden = false;
- plugin->password_answer_handler = NULL;
+ plugin->pending_password_answer = NULL;
write (STDOUT_FILENO, CLEAR_LINE_SEQUENCE, strlen (CLEAR_LINE_SEQUENCE));
}
}
void
ask_for_password (ply_boot_splash_plugin_t *plugin,
- ply_boot_splash_password_answer_handler_t answer_handler,
- void *answer_data)
+ ply_answer_t *answer)
{
- plugin->password_answer_handler = answer_handler;
- plugin->password_answer_data = answer_data;
+ plugin->pending_password_answer = answer;
write (STDOUT_FILENO, "\nPassword: ", strlen ("\nPassword: "));
plugin->keyboard_input_is_hidden = true;
ply_boot_server_test_LDADD = $(PLYMOUTH_LIBS) ../libply/libply.la
ply_boot_server_test_SOURCES = \
+ $(srcdir)/../ply-answer.h \
+ $(srcdir)/../ply-answer.c \
$(srcdir)/../ply-boot-server.h \
$(srcdir)/../ply-boot-server.c
ply_boot_splash_test_LDADD = $(PLYMOUTH_LIBS) ../libply/libply.la
ply_boot_splash_test_SOURCES = \
+ $(srcdir)/../ply-answer.h \
+ $(srcdir)/../ply-answer.c \
$(srcdir)/../ply-boot-splash-plugin.h \
$(srcdir)/../ply-window.h \
$(srcdir)/../ply-window.c \