AC_DEFINE_UNQUOTED([SYSTEM_RECOVERY_LIBEXEC_DIR], ["$SYSTEM_RECOVERY_LIBEXEC_DIR"], "Directory where sub-programmes for system-recovery UI are stored")
AC_SUBST([SYSTEM_RECOVERY_LIBEXEC_DIR])
+SYSTEM_RECOVERY_ACTION_FILE="/opt/.recovery.action"
+AC_DEFINE_UNQUOTED([SYSTEM_RECOVERY_ACTION_FILE], ["$SYSTEM_RECOVERY_ACTION_FILE"], "File where recovery action is stored")
+AC_SUBST([SYSTEM_RECOVERY_ACTION_FILE])
+
INITRD_RECOVERY_DATA_DIR="${datadir}/initrd-recovery"
AC_DEFINE_UNQUOTED([INITRD_RECOVERY_DATA_DIR], ["$INITRD_RECOVERY_DATA_DIR"], "Directory where data for recovery initrd are stored")
AC_SUBST([INITRD_RECOVERY_DATA_DIR])
INITRD_RECOVERY_LIBEXEC_DIR="${libexecdir}/initrd-recovery"
AC_DEFINE_UNQUOTED([INITRD_RECOVERY_LIBEXEC_DIR], ["$INITRD_RECOVERY_LIBEXEC_DIR"], "Directory where sub-progremmes for recovery initrd are stored")
AC_SUBST([INITRD_RECOVERY_LIBEXEC_DIR])
+
# ------------------------------------------------------------------------------
AC_SUBST(M4_DEFINES)
return -ENOENT;
char *action = get_action_from_cmdline();
+ if (!action)
+ action = get_action_from_file();
if (!action)
action = get_action_from_config(cfg);
if (!action)
}
#define KERNEL_CMDLINE_KEY "tizen.recovery"
+#define ACTION_BUFFER_SIZE 256
+#define _STR(x) #x
+#define STR(x) _STR(x)
// looks for tizen.recovery= key in kernel command line
char *get_action_from_cmdline(void)
return strndup(p, len);
}
+char *get_action_from_file(void)
+{
+ FILE *fp;
+ char buf[ACTION_BUFFER_SIZE];
+ int ret;
+
+ fp = fopen(SYSTEM_RECOVERY_ACTION_FILE, "r");
+ if (!fp)
+ return NULL;
+
+ ret = fscanf(fp, "%" STR(ACTION_BUFFER_SIZE) "s", buf);
+ fclose(fp);
+ if (ret != 1)
+ return NULL;
+
+ return strndup(buf, ACTION_BUFFER_SIZE);
+}
int main(void)
{
}
rui_default_action = get_action_from_cmdline();
+ if (!rui_default_action)
+ rui_default_action = get_action_from_file();
+
if (rui_default_action) {
int idx = find_string(rui_config_labels.rui_action_handlers, rui_default_action);
if (idx < 0) {
int recovery_gui(config_t *cfg);
int recovery_headless(config_t *cfg);
char *get_action_from_cmdline(void);
+char *get_action_from_file(void);
#ifdef __cplusplus
}