#define STORAGE_CONF_FILE "/etc/storaged/storage.conf"
+#define STORAGED_DIR_PATH "/run/storaged"
+#define NEED_CLEANUP_DIR_PATH "/run/storaged/needcleanup"
+#define NEED_CLEANUP_FILE_PATH "/run/storaged/needcleanup/trigger"
+
#define ARRAY_SIZE(name) (sizeof(name)/sizeof(name[0]))
enum memnoti_level {
static guint id_storage_poweroff;
static struct storage_config_info storage_internal_info = {
- .mem_id = MEMORY_INTERNAL,
+ .mem_id = MEMORY_INTERNAL,
.current_noti_level = MEMNOTI_LEVEL_NORMAL,
.warning_level = MEMNOTI_WARNING_VALUE,
.critical_level = MEMNOTI_CRITICAL_VALUE,
};
static struct storage_config_info storage_tmp_info = {
- .mem_id = MEMORY_TMP,
+ .mem_id = MEMORY_TMP,
.current_noti_level = MEMNOTI_LEVEL_NORMAL,
.warning_level = MEMNOTI_TMP_CRITICAL_VALUE,
.critical_level = MEMNOTI_TMP_CRITICAL_VALUE,
};
static struct storage_config_info storage_opt_info = {
- .mem_id = MEMORY_OPT,
+ .mem_id = MEMORY_OPT,
.current_noti_level = MEMNOTI_LEVEL_NORMAL,
.warning_level = MEMNOTI_WARNING_VALUE,
.critical_level = MEMNOTI_CRITICAL_VALUE,
.full_level = MEMNOTI_FULL_VALUE,
};
+static void write_file()
+{
+ FILE *fp;
+
+ fp = fopen(NEED_CLEANUP_FILE_PATH, "w+");
+ if (fp) {
+ fprintf(fp, "needcleanup\n");
+ fclose(fp);
+ } else
+ _E("Fail to open %s", NEED_CLEANUP_FILE_PATH);
+}
+
static void memstatus_send_broadcast(enum memory_id no, char *signal, int status)
{
if (no == MEMORY_OPT)
static void memcleanup_send_broadcast(struct storage_config_info *info, enum memnoti_level level, enum memnoti_level prev_level)
{
+ time_t t;
+ struct tm *timeinfo;
const char *path;
char *value;
+ char buf[20];
if (info->mem_id == MEMORY_INTERNAL)
path = tzplatform_getenv(TZ_SYS_HOME);
else
return;
- _I("%s level: %s", path, value);
+ write_file();
+
+ t = time(NULL);
+ timeinfo = localtime(&t);
+ strftime(buf, sizeof(buf), "%b %d %T", timeinfo);
+ _D("time: %s path: %s level: %s", buf, path, value);
+
dbus_handle_broadcast_dbus_signal_var(STORAGED_PATH_LOWMEM, STORAGED_INTERFACE_LOWMEM,
SIGNAL_NEED_CLEANUP, g_variant_new("(ss)", path, value));
static void storage_init(void *data)
{
+ struct stat buf;
int ret;
storage_config_load(&storage_internal_info);
&storage_interface);
if (ret < 0)
_E("Failed to register dbus interface and methods(%d)", ret);
+
+ ret = stat(STORAGED_DIR_PATH, &buf);
+ if (ret < 0) {
+ ret = mkdir(STORAGED_DIR_PATH, 0644);
+ if (ret < 0)
+ _E("Failed to make directory: %d", errno);
+ } else if (!S_ISDIR(buf.st_mode)) {
+ ret = remove(STORAGED_DIR_PATH);
+ if (ret < 0)
+ _E("Fail to remove %s. errno: %d", STORAGED_DIR_PATH, errno);
+ ret = mkdir(STORAGED_DIR_PATH, 0644);
+ if (ret < 0)
+ _E("Failed to make directory: %d", errno);
+ } else {
+ ret = chmod(STORAGED_DIR_PATH, 0644);
+ if (ret < 0)
+ _E("Fail to change permissions of a file");
+ }
+
+ ret = stat(NEED_CLEANUP_DIR_PATH, &buf);
+ if (ret < 0) {
+ ret = mkdir(NEED_CLEANUP_DIR_PATH, 0644);
+ if (ret < 0)
+ _E("Failed to make directory: %d", errno);
+ } else if (!S_ISDIR(buf.st_mode)) {
+ ret = remove(NEED_CLEANUP_DIR_PATH);
+ if (ret < 0)
+ _E("Fail to remove %s. errno: %d", NEED_CLEANUP_DIR_PATH, errno);
+ ret = mkdir(NEED_CLEANUP_DIR_PATH, 0644);
+ if (ret < 0)
+ _E("Failed to make directory: %d", errno);
+ } else {
+ ret = chmod(NEED_CLEANUP_DIR_PATH, 0644);
+ if (ret < 0)
+ _E("Fail to change permissions of a file");
+ }
}
static void storage_exit(void *data)