Read recovery action from file in /opt/ 75/155275/7
authorPaweł Szewczyk <p.szewczyk@samsung.com>
Thu, 12 Oct 2017 14:01:39 +0000 (16:01 +0200)
committerPaweł Szewczyk <p.szewczyk@samsung.com>
Mon, 16 Oct 2017 08:43:21 +0000 (10:43 +0200)
Change-Id: I11dadf1d89bf965b7a63aee712a5dfdecd765bf0
Signed-off-by: Paweł Szewczyk <p.szewczyk@samsung.com>
configure.ac
src/system-recovery/recovery-headless.c
src/system-recovery/recovery-main.c
src/system-recovery/recovery-rui.c
src/system-recovery/system-recovery.h

index 98e9a49a131c83e09a6fde9ba5b2832b91491e8a..a5631ed19c66a0b28e9ff54071baebed7709533e 100644 (file)
@@ -121,6 +121,10 @@ SYSTEM_RECOVERY_LIBEXEC_DIR="${libexecdir}/system-recovery"
 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])
@@ -132,6 +136,7 @@ AC_SUBST([INITRD_RECOVERY_INSTALL_DROPIN_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)
 
index 3f45dc815162a72f0a34fceba5c0b98c4f6be798..e07035cc6d40b1e8e119ed998d89d6ac14736fd8 100644 (file)
@@ -50,6 +50,8 @@ int recovery_headless(config_t *cfg)
                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)
index 693c92f023c41dc9176bc4441453b61e984d657f..3b3db549f0ef8becfe1987e1a52898212b4ac181 100644 (file)
@@ -44,6 +44,9 @@ void sys_power_reboot(void)
 }
 
 #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)
@@ -73,6 +76,23 @@ 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)
 {
index 4fc5fd562ff93cbf2b817462830428527e913b29..7a99b4bbc42f3f13045ca2090466f9c3f1da4ce9 100644 (file)
@@ -807,6 +807,9 @@ int recovery_gui(config_t *cfg)
        }
 
        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) {
index f30925127e9ba28c1a3fd1036e964200b0b6df3a..b75ade82777ba0a03c7347150fdc3a64613196ab 100644 (file)
@@ -39,6 +39,7 @@ void sys_power_reboot(void);
 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
 }