feat(fs_posix): add error code conversion (#7166)

Signed-off-by: pengyiqiang <pengyiqiang@xiaomi.com>
Co-authored-by: pengyiqiang <pengyiqiang@xiaomi.com>
This commit is contained in:
VIFEX
2024-10-29 19:15:00 +08:00
committed by GitHub
parent 133d2fe4be
commit 33f5f81295

View File

@@ -48,6 +48,7 @@ static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p);
static void * fs_dir_open(lv_fs_drv_t * drv, const char * path);
static lv_fs_res_t fs_dir_read(lv_fs_drv_t * drv, void * dir_p, char * fn, uint32_t fn_len);
static lv_fs_res_t fs_dir_close(lv_fs_drv_t * drv, void * dir_p);
static lv_fs_res_t fs_errno_to_res(int errno_val);
/**********************
* STATIC VARIABLES
@@ -139,7 +140,7 @@ static lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p)
int ret = close(fd);
if(ret < 0) {
LV_LOG_WARN("Could not close file: %d, errno: %d", fd, errno);
return LV_FS_RES_FS_ERR;
return fs_errno_to_res(errno);
}
return LV_FS_RES_OK;
@@ -163,7 +164,7 @@ static lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf, uint32_
ssize_t ret = read(fd, buf, btr);
if(ret < 0) {
LV_LOG_WARN("Could not read file: %d, errno: %d", fd, errno);
return LV_FS_RES_FS_ERR;
return fs_errno_to_res(errno);
}
*br = (uint32_t)ret;
@@ -187,7 +188,7 @@ static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void * buf,
ssize_t ret = write(fd, buf, btw);
if(ret < 0) {
LV_LOG_WARN("Could not write file: %d, errno: %d", fd, errno);
return LV_FS_RES_FS_ERR;
return fs_errno_to_res(errno);
}
*bw = (uint32_t)ret;
@@ -224,7 +225,7 @@ static lv_fs_res_t fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos, lv_fs
off_t offset = lseek(fd, pos, w);
if(offset < 0) {
LV_LOG_WARN("Could not seek file: %d, errno: %d", fd, errno);
return LV_FS_RES_FS_ERR;
return fs_errno_to_res(errno);
}
return LV_FS_RES_OK;
@@ -246,7 +247,7 @@ static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p)
off_t offset = lseek(fd, 0, SEEK_CUR);
if(offset < 0) {
LV_LOG_WARN("Could not get position of file: %d, errno: %d", fd, errno);
return LV_FS_RES_FS_ERR;
return fs_errno_to_res(errno);
}
*pos_p = (uint32_t)offset;
@@ -318,11 +319,63 @@ static lv_fs_res_t fs_dir_close(lv_fs_drv_t * drv, void * dir_p)
int ret = closedir(dir_p);
if(ret < 0) {
LV_LOG_WARN("Could not close directory: errno: %d", errno);
return LV_FS_RES_FS_ERR;
return fs_errno_to_res(errno);
}
return LV_FS_RES_OK;
}
/**
* Convert an errno value to a lv_fs_res_t value
* @param errno_val an errno value
* @return a corresponding lv_fs_res_t value
*/
static lv_fs_res_t fs_errno_to_res(int errno_val)
{
switch(errno_val) {
case 0:
return LV_FS_RES_OK;
case EIO: /* I/O error */
return LV_FS_RES_HW_ERR;
case EFAULT: /* Bad address */
return LV_FS_RES_FS_ERR;
case ENOENT: /* No such file or directory */
return LV_FS_RES_NOT_EX;
case ENOSPC: /* No space left on device */
return LV_FS_RES_FULL;
case EALREADY: /* Operation already in progress */
return LV_FS_RES_LOCKED;
case EACCES: /* Permission denied */
return LV_FS_RES_DENIED;
case EBUSY: /* Device or resource busy */
return LV_FS_RES_BUSY;
case ETIMEDOUT: /* Connection timed out */
return LV_FS_RES_TOUT;
case ENOSYS: /* Invalid system call number */
return LV_FS_RES_NOT_IMP;
case ENOMEM: /* Out of memory */
return LV_FS_RES_OUT_OF_MEM;
case EINVAL: /* "Invalid argument" */
return LV_FS_RES_INV_PARAM;
default:
break;
}
return LV_FS_RES_UNKNOWN;
}
#else /*LV_USE_FS_POSIX == 0*/
#if defined(LV_FS_POSIX_LETTER) && LV_FS_POSIX_LETTER != '\0'