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:
@@ -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 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_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_dir_close(lv_fs_drv_t * drv, void * dir_p);
|
||||||
|
static lv_fs_res_t fs_errno_to_res(int errno_val);
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* STATIC VARIABLES
|
* 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);
|
int ret = close(fd);
|
||||||
if(ret < 0) {
|
if(ret < 0) {
|
||||||
LV_LOG_WARN("Could not close file: %d, errno: %d", fd, errno);
|
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;
|
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);
|
ssize_t ret = read(fd, buf, btr);
|
||||||
if(ret < 0) {
|
if(ret < 0) {
|
||||||
LV_LOG_WARN("Could not read file: %d, errno: %d", fd, errno);
|
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;
|
*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);
|
ssize_t ret = write(fd, buf, btw);
|
||||||
if(ret < 0) {
|
if(ret < 0) {
|
||||||
LV_LOG_WARN("Could not write file: %d, errno: %d", fd, errno);
|
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;
|
*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);
|
off_t offset = lseek(fd, pos, w);
|
||||||
if(offset < 0) {
|
if(offset < 0) {
|
||||||
LV_LOG_WARN("Could not seek file: %d, errno: %d", fd, errno);
|
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;
|
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);
|
off_t offset = lseek(fd, 0, SEEK_CUR);
|
||||||
if(offset < 0) {
|
if(offset < 0) {
|
||||||
LV_LOG_WARN("Could not get position of file: %d, errno: %d", fd, errno);
|
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;
|
*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);
|
int ret = closedir(dir_p);
|
||||||
if(ret < 0) {
|
if(ret < 0) {
|
||||||
LV_LOG_WARN("Could not close directory: errno: %d", errno);
|
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;
|
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*/
|
#else /*LV_USE_FS_POSIX == 0*/
|
||||||
|
|
||||||
#if defined(LV_FS_POSIX_LETTER) && LV_FS_POSIX_LETTER != '\0'
|
#if defined(LV_FS_POSIX_LETTER) && LV_FS_POSIX_LETTER != '\0'
|
||||||
|
|||||||
Reference in New Issue
Block a user