Revert "posix: device_io: use mode argument correctly in open()"
This reverts commit 499a633976
.
PR #73978 introduced a regression.
Unfortunately this PR cannot be reverted without reverting also
Let's revert both PRs to stabilize main again towards the 3.7 release.
For more details on the issue see
https://github.com/zephyrproject-rtos/zephyr/issues/75205
Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
This commit is contained in:
parent
6f0b8b5e66
commit
ade54b35ca
|
@ -8,13 +8,9 @@
|
|||
#define ZEPHYR_POSIX_FCNTL_H_
|
||||
|
||||
#ifdef CONFIG_PICOLIBC
|
||||
#define O_CREAT 0x0040
|
||||
#define O_TRUNC 0x0200
|
||||
#define O_APPEND 0x0400
|
||||
#define O_CREAT 0x0040
|
||||
#else
|
||||
#define O_APPEND 0x0008
|
||||
#define O_CREAT 0x0200
|
||||
#define O_TRUNC 0x0400
|
||||
#define O_CREAT 0x0200
|
||||
#endif
|
||||
|
||||
#define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
|
||||
|
@ -23,6 +19,7 @@
|
|||
#define O_WRONLY 01
|
||||
#define O_RDWR 02
|
||||
|
||||
#define O_APPEND 0x0400
|
||||
#define O_EXCL 0x0800
|
||||
#define O_NONBLOCK 0x4000
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <zephyr/posix/fcntl.h>
|
||||
#include <zephyr/posix/poll.h>
|
||||
#include <zephyr/posix/unistd.h>
|
||||
#include <zephyr/posix/sys/select.h>
|
||||
|
@ -17,28 +16,28 @@
|
|||
int zvfs_close(int fd);
|
||||
FILE *zvfs_fdopen(int fd, const char *mode);
|
||||
int zvfs_fileno(FILE *file);
|
||||
int zvfs_open(const char *name, int flags, int mode);
|
||||
int zvfs_open(const char *name, int flags);
|
||||
ssize_t zvfs_read(int fd, void *buf, size_t sz, size_t *from_offset);
|
||||
ssize_t zvfs_write(int fd, const void *buf, size_t sz, size_t *from_offset);
|
||||
|
||||
void FD_CLR(int fd, struct zvfs_fd_set *fdset)
|
||||
{
|
||||
return ZVFS_FD_CLR(fd, fdset);
|
||||
return ZVFS_FD_CLR(fd, (struct zvfs_fd_set *)fdset);
|
||||
}
|
||||
|
||||
int FD_ISSET(int fd, struct zvfs_fd_set *fdset)
|
||||
{
|
||||
return ZVFS_FD_ISSET(fd, fdset);
|
||||
return ZVFS_FD_ISSET(fd, (struct zvfs_fd_set *)fdset);
|
||||
}
|
||||
|
||||
void FD_SET(int fd, struct zvfs_fd_set *fdset)
|
||||
{
|
||||
ZVFS_FD_SET(fd, fdset);
|
||||
ZVFS_FD_SET(fd, (struct zvfs_fd_set *)fdset);
|
||||
}
|
||||
|
||||
void FD_ZERO(fd_set *fdset)
|
||||
{
|
||||
ZVFS_FD_ZERO(fdset);
|
||||
ZVFS_FD_ZERO((struct zvfs_fd_set *)fdset);
|
||||
}
|
||||
|
||||
int close(int fd)
|
||||
|
@ -61,16 +60,8 @@ int fileno(FILE *file)
|
|||
|
||||
int open(const char *name, int flags, ...)
|
||||
{
|
||||
int mode = 0;
|
||||
va_list args;
|
||||
|
||||
if ((flags & O_CREAT) != 0) {
|
||||
va_start(args, flags);
|
||||
mode = va_arg(args, int);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
return zvfs_open(name, flags, mode);
|
||||
/* FIXME: necessarily need to check for O_CREAT and unpack ... if set */
|
||||
return zvfs_open(name, flags);
|
||||
}
|
||||
#ifdef CONFIG_POSIX_DEVICE_IO_ALIAS_OPEN
|
||||
FUNC_ALIAS(open, _open, int);
|
||||
|
|
|
@ -59,22 +59,37 @@ static inline void posix_fs_free_obj(struct posix_fs_desc *ptr)
|
|||
ptr->used = false;
|
||||
}
|
||||
|
||||
int zvfs_open(const char *name, int flags, int mode)
|
||||
static int posix_mode_to_zephyr(int mf)
|
||||
{
|
||||
int mode = (mf & O_CREAT) ? FS_O_CREATE : 0;
|
||||
|
||||
mode |= (mf & O_APPEND) ? FS_O_APPEND : 0;
|
||||
|
||||
switch (mf & O_ACCMODE) {
|
||||
case O_RDONLY:
|
||||
mode |= FS_O_READ;
|
||||
break;
|
||||
case O_WRONLY:
|
||||
mode |= FS_O_WRITE;
|
||||
break;
|
||||
case O_RDWR:
|
||||
mode |= FS_O_RDWR;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return mode;
|
||||
}
|
||||
|
||||
int zvfs_open(const char *name, int flags)
|
||||
{
|
||||
int rc, fd;
|
||||
struct posix_fs_desc *ptr = NULL;
|
||||
int zflags = 0;
|
||||
int zmode = posix_mode_to_zephyr(flags);
|
||||
|
||||
if ((flags & O_ACCMODE) == O_RDONLY) {
|
||||
zflags |= FS_O_READ;
|
||||
} else if ((flags & O_ACCMODE) == O_WRONLY) {
|
||||
zflags |= FS_O_WRITE;
|
||||
} else if ((flags & O_ACCMODE) == O_RDWR) {
|
||||
zflags |= FS_O_RDWR;
|
||||
}
|
||||
|
||||
if ((flags & O_APPEND) != 0) {
|
||||
zflags |= FS_O_APPEND;
|
||||
if (zmode < 0) {
|
||||
return zmode;
|
||||
}
|
||||
|
||||
fd = zvfs_reserve_fd();
|
||||
|
@ -84,44 +99,24 @@ int zvfs_open(const char *name, int flags, int mode)
|
|||
|
||||
ptr = posix_fs_alloc_obj(false);
|
||||
if (ptr == NULL) {
|
||||
rc = -EMFILE;
|
||||
goto out_err;
|
||||
zvfs_free_fd(fd);
|
||||
errno = EMFILE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
fs_file_t_init(&ptr->file);
|
||||
|
||||
if (flags & O_CREAT) {
|
||||
flags &= ~O_CREAT;
|
||||
rc = fs_open(&ptr->file, name, zmode);
|
||||
|
||||
rc = fs_open(&ptr->file, name, FS_O_CREATE | (mode & O_ACCMODE));
|
||||
if (rc < 0) {
|
||||
goto out_err;
|
||||
}
|
||||
rc = fs_close(&ptr->file);
|
||||
if (rc < 0) {
|
||||
goto out_err;
|
||||
}
|
||||
}
|
||||
|
||||
rc = fs_open(&ptr->file, name, zflags);
|
||||
if (rc < 0) {
|
||||
goto out_err;
|
||||
posix_fs_free_obj(ptr);
|
||||
zvfs_free_fd(fd);
|
||||
errno = -rc;
|
||||
return -1;
|
||||
}
|
||||
|
||||
zvfs_finalize_fd(fd, ptr, &fs_fd_op_vtable);
|
||||
|
||||
goto out;
|
||||
|
||||
out_err:
|
||||
if (ptr != NULL) {
|
||||
posix_fs_free_obj(ptr);
|
||||
}
|
||||
|
||||
zvfs_free_fd(fd);
|
||||
errno = -rc;
|
||||
return -1;
|
||||
|
||||
out:
|
||||
return fd;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ static int test_mkdir(void)
|
|||
return res;
|
||||
}
|
||||
|
||||
res = open(TEST_DIR_FILE, O_CREAT | O_RDWR, 0770);
|
||||
res = open(TEST_DIR_FILE, O_CREAT | O_RDWR);
|
||||
|
||||
if (res < 0) {
|
||||
TC_PRINT("Failed opening file [%d]\n", res);
|
||||
|
|
|
@ -16,7 +16,7 @@ static int test_file_open(void)
|
|||
{
|
||||
int res;
|
||||
|
||||
res = open(TEST_FILE, O_CREAT | O_RDWR, 0660);
|
||||
res = open(TEST_FILE, O_CREAT | O_RDWR);
|
||||
if (res < 0) {
|
||||
TC_ERROR("Failed opening file: %d, errno=%d\n", res, errno);
|
||||
/* FIXME: restructure tests as per #46897 */
|
||||
|
|
|
@ -60,7 +60,7 @@ static int test_file_open_flags(void)
|
|||
|
||||
/* 2 Create file for read only, attempt to read, attempt to write */
|
||||
TC_PRINT("Open on non-existent file, flags = O_CREAT | O_WRONLY\n");
|
||||
fd = open(THE_FILE, O_CREAT | O_WRONLY, 0440);
|
||||
fd = open(THE_FILE, O_CREAT | O_WRONLY);
|
||||
if (fd < 0) {
|
||||
TC_PRINT("Expected success; fd = %d, errno = %d\n", fd, errno);
|
||||
return TC_FAIL;
|
||||
|
@ -236,7 +236,7 @@ static int test_file_open_flags(void)
|
|||
TC_PRINT("Attempt write to file opened with O_APPEND | O_RDWR\n");
|
||||
/* Clean start */
|
||||
unlink(THE_FILE);
|
||||
fd = open(THE_FILE, O_CREAT | O_WRONLY, 0440);
|
||||
fd = open(THE_FILE, O_CREAT | O_WRONLY);
|
||||
if (fd < 0) {
|
||||
TC_PRINT("Expected success, fd = %d, errno = %d\n", fd, errno);
|
||||
return TC_FAIL;
|
||||
|
|
|
@ -21,7 +21,7 @@ static void create_file(const char *filename, uint32_t size)
|
|||
{
|
||||
int fh;
|
||||
|
||||
fh = open(filename, O_CREAT | O_WRONLY, 0440);
|
||||
fh = open(filename, O_CREAT | O_WRONLY);
|
||||
zassert(fh >= 0, "Failed creating test file");
|
||||
|
||||
uint8_t filling[FILL_SIZE];
|
||||
|
|
Loading…
Reference in New Issue