*/
int storage_format_mmc(struct mmc_contents *mmc_data, int option);
+typedef enum {
+ STORAGE_PART_ERROR = -1, /**< Checking partition is failed */
+ STORAGE_PART_NOT_MOUNTED = 0, /**< Partition is not mounted */
+ STORAGE_PART_MOUNTED = 1, /**< Partition is mounted */
+ STORAGE_PART_NOT_SUPPORTED = 2, /**< Partition is not supported */
+} storage_part_mount_e;
+
/**
- * @brief This API is used to format mmc.\n
+ * @brief This API is used to check user data partition is mounted.\n
*
- * @param[in] path for checking mounted
- * @param[out] mounted True when path is mounted
+ * @param[out] mounted 1 when user partition is mounted, 0 when user partition is not mounted, 2 when user partition is not supported(2 partitions), and Less then 0 when error return.
*
* @return @c 0 on success,
* otherwise a negative error value
*
* @retval #STORAGE_ERROR_NONE Successful
+ * @retval #STORAGE_ERROR_OPERATION_FAILED Operation failed
+ * @retval #STORAGE_ERROR_OUT_OF_MEMORY Out of memory
*/
-int storage_is_mounted(char *path, bool *mounted);
+int storage_is_mounted_opt_usr(storage_part_mount_e *mounted);
/**
* @}
return 0;
}
-int mount_check(char *path)
+int mount_check(const char *path)
{
int ret = false;
struct mntent *mnt;
}
}
- if (!mount_check(ext_path))
+ if (!mount_check((const char *)ext_path))
goto out_nodev;
ret = storage_ext_get_statvfs(ext_path, &temp);
}
}
- if (!mount_check(ext_path))
+ if (!mount_check((const char *)ext_path))
goto out_nodev;
ret = storage_ext_get_statvfs_size64(ext_path, buf);
#include <string.h>
#include <errno.h>
#include <tzplatform_config.h>
+#include <blkid.h>
#include "common.h"
#include "list.h"
#include "storage-external-dbus.h"
#define FORMAT_TIMEOUT (120*1000)
+#define USER_PARTITION "user"
/*
Get compat path from origin Multi-user path
return STORAGE_ERROR_NONE;
}
-int storage_is_mounted(char *path, bool *mounted)
+API int storage_is_mounted_opt_usr(storage_part_mount_e *mounted)
{
+ blkid_cache cache = NULL;
+ blkid_dev_iterate iter;
+ blkid_dev dev;
int ret;
+ bool found = false;
- ret = mount_check(path);
+ ret = blkid_get_cache(&cache, NULL);
+ if (ret < 0) {
+ _E("Failed to get cache"); //LCOV_EXCL_LINE
+ *mounted = STORAGE_PART_ERROR; //LCOV_EXCL_LINE
+ return STORAGE_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
+ }
+
+ ret = blkid_probe_all(cache);
+ if (ret < 0) {
+ _E("Failed to probe all block devices"); //LCOV_EXCL_LINE
+ *mounted = STORAGE_PART_ERROR; //LCOV_EXCL_LINE
+ return STORAGE_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
+ }
+
+ iter = blkid_dev_iterate_begin(cache);
+ if (!iter) {
+ _E("Failed to get iterate"); //LCOV_EXCL_LINE
+ *mounted = STORAGE_PART_ERROR; //LCOV_EXCL_LINE
+ return STORAGE_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
+ }
+
+ ret = blkid_dev_set_search(iter, "LABEL", USER_PARTITION);
+ if (blkid_dev_next(iter, &dev) == 0) {
+ dev = blkid_verify(cache, dev);
+ if (dev) {
+ found = true;
+ _D("Partition for user data is found(LABEL=user)");
+ }
+ }
+ blkid_dev_iterate_end(iter);
+
+ if (!found) {
+ iter = blkid_dev_iterate_begin(cache);
+ if (!iter) {
+ _E("Failed to get iterate"); //LCOV_EXCL_LINE
+ *mounted = STORAGE_PART_ERROR; //LCOV_EXCL_LINE
+ return STORAGE_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
+ }
+
+ ret = blkid_dev_set_search(iter, "PARTLABEL", USER_PARTITION);
+ if (blkid_dev_next(iter, &dev) == 0) {
+ dev = blkid_verify(cache, dev);
+ if (dev) {
+ found = true;
+ _D("Partition for user data is found(PARTLABEL=user)");
+ }
+ }
+ blkid_dev_iterate_end(iter);
+ }
+
+ blkid_put_cache(cache);
+
+ if (found) {
+ ret = mount_check(tzplatform_getenv(TZ_SYS_USER));
+ if (ret)
+ *mounted = STORAGE_PART_MOUNTED;
+ else
+ *mounted = STORAGE_PART_NOT_MOUNTED;
+ } else
+ *mounted = STORAGE_PART_NOT_SUPPORTED;
- *mounted = ret;
return STORAGE_ERROR_NONE;
}