#include "log.h"
#include "common.h"
+#include "storage-external.h"
#define MEMORY_GIGABYTE_VALUE 1073741824
#define MEMORY_MEGABYTE_VALUE 1048576
-#define MEMORY_STATUS_USR_PATH "/opt/usr"
#define EXTERNAL_MEMORY_NODE "sdcard"
#define STORAGE_CONF_FILE "/etc/storage/libstorage.conf"
-/* it's for 32bit file offset */
-struct statvfs_32 {
- unsigned long int f_bsize;
- unsigned long int f_frsize;
- unsigned long int f_blocks;
- unsigned long int f_bfree;
- unsigned long int f_bavail;
- unsigned long int f_files;
- unsigned long int f_ffree;
- unsigned long int f_favail;
- unsigned long int f_fsid;
-#ifdef _STATVFSBUF_F_UNUSED
- int __f_unused;
-#endif
- unsigned long int f_flag;
- unsigned long int f_namemax;
- int __f_spare[6];
-};
#define MAX_LINE 128
#define MAX_SECTION 64
}
static int config_parse(const char *file_name, int cb(struct parse_result *result,
- void *user_data), void *user_data)
+ void *user_data), void *user_data)
{
FILE *f = NULL;
struct parse_result result;
/* open conf file */
f = fopen(file_name, "r");
if (!f) {
- _E("Failed to open file %s", file_name);
+ _E("Failed to open file %s", file_name); //LCOV_EXCL_LINE
ret = -EIO;
goto error;
}
error:
if (f)
fclose(f);
- _E("Failed to read %s:%d!", file_name, lineno);
+ _E("Failed to read %s:%d!", file_name, lineno); //LCOV_EXCL_LINE
return ret;
}
ret = config_parse(STORAGE_CONF_FILE, load_config, info);
if (ret < 0)
- _E("Failed to load %s, %d Use default value!", STORAGE_CONF_FILE, ret);
+ _E("Failed to load %s, %d Use default value!", STORAGE_CONF_FILE, ret); //LCOV_EXCL_LINE
}
static int get_memory_size(const char *path, struct statvfs_32 *buf)
ret = statvfs(path, &s);
if (ret)
- return -errno;
+ return -errno; //LCOV_EXCL_LINE System Error
memset(buf, 0, sizeof(struct statvfs_32));
return -EINVAL;
}
- ret = get_memory_size(MEMORY_STATUS_USR_PATH, &temp);
+ ret = get_memory_size(tzplatform_getenv(TZ_SYS_USER), &temp);
if (ret || temp.f_bsize == 0) {
- _E("fail to get memory size");
- return -errno;
+ _E("fail to get memory size %d", ret); //LCOV_EXCL_LINE
+ return -errno; //LCOV_EXCL_LINE System Error
}
if (reserved == 0) {
int ret;
if (!buf) {
- _E("input param error");
+ _E("input param error"); //LCOV_EXCL_LINE
return -EINVAL;
}
- ret = statvfs(MEMORY_STATUS_USR_PATH, buf);
+ ret = statvfs(tzplatform_getenv(TZ_SYS_USER), buf);
if (ret) {
- _E("fail to get memory size");
- return -errno;
+ _E("fail to get memory size"); //LCOV_EXCL_LINE
+ return -errno; //LCOV_EXCL_LINE System Error
}
if (reserved == 0) {
return 0;
}
-static int mount_check(const char *path)
+static int mount_check(char *path)
{
int ret = false;
struct mntent *mnt;
return ret;
}
-static const char *get_external_path(void)
+static int get_external_path(char *path, size_t len)
{
- return tzplatform_mkpath(TZ_SYS_STORAGE,
- EXTERNAL_MEMORY_NODE);
+ return storage_ext_get_primary_mmc_path(path, len);
}
-API int storage_get_external_memory_size(struct statvfs *buf)
+int storage_get_external_memory_size_with_path(char *path, struct statvfs *buf)
{
struct statvfs_32 temp;
int ret;
+ char ext_path[32];
_D("storage_get_external_memory_size");
if (!buf) {
return -EINVAL;
}
- if (!mount_check(get_external_path())) {
- memset(buf, 0, sizeof(struct statvfs_32));
- return 0;
+ if (path)
+ snprintf(ext_path, sizeof(ext_path), "%s", path);
+ else {
+ if (!storage_ext_is_supported()) {
+ _D("Block module is not enabled");
+ goto out_nodev;
+ }
+ ret = get_external_path(ext_path, sizeof(ext_path));
+ if (ret == -ENODEV)
+ goto out_nodev;
+ if (ret < 0) {
+ _E("Failed to get external path(%d)", ret); //LCOV_EXCL_LINE
+ return ret;
+ }
}
- ret = get_memory_size(get_external_path(), &temp);
+ if (!mount_check(ext_path))
+ goto out_nodev;
+
+ ret = storage_ext_get_statvfs(ext_path, &temp);
if (ret) {
- _E("fail to get memory size");
- return -errno;
+ _E("fail to get memory size"); //LCOV_EXCL_LINE
+ return ret; //LCOV_EXCL_LINE System Error
}
memcpy(buf, &temp, sizeof(temp));
return 0;
+
+out_nodev:
+ memset(buf, 0, sizeof(struct statvfs_32));
+ return 0;
}
-API int storage_get_external_memory_size64(struct statvfs *buf)
+int storage_get_external_memory_size64_with_path(char *path, struct statvfs *buf)
{
int ret;
+ char ext_path[32];
_D("storage_get_external_memory_size64");
if (!buf) {
return -EINVAL;
}
- if (!mount_check(get_external_path())) {
- memset(buf, 0, sizeof(struct statvfs));
- return 0;
+ if (path)
+ snprintf(ext_path, sizeof(ext_path), "%s", path);
+ else {
+ if (!storage_ext_is_supported()) {
+ _D("Block module is not enabled");
+ goto out_nodev;
+ }
+ ret = get_external_path(ext_path, sizeof(ext_path));
+ if (ret == -ENODEV)
+ goto out_nodev;
+ if (ret < 0) {
+ _E("Failed to get external path(%d)", ret);
+ return ret;
+ }
}
- ret = statvfs(get_external_path(), buf);
+ if (!mount_check(ext_path))
+ goto out_nodev;
+
+ ret = storage_ext_get_statvfs_size64(ext_path, buf);
if (ret) {
+ //LCOV_EXCL_START System Error
_E("fail to get memory size");
return -errno;
+ //LCOV_EXCL_STOP
}
return 0;
+
+out_nodev:
+ memset(buf, 0, sizeof(struct statvfs));
+ return 0;
+}
+
+API int storage_get_external_memory_size(struct statvfs *buf)
+{
+ return storage_get_external_memory_size_with_path(NULL, buf);
+}
+
+API int storage_get_external_memory_size64(struct statvfs *buf)
+{
+ return storage_get_external_memory_size64_with_path(NULL, buf);
}