Skip to content
Permalink
Browse files

cleanup: include/: move misc/fdtable.h to sys/fdtable.h

move misc/fdtable.h to sys/fdtable.h and
create a shim for backward-compatibility.

No functional changes to the headers.
A warning in the shim can be controlled with CONFIG_COMPAT_INCLUDES.

Related to #16539

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
  • Loading branch information...
nashif committed Jun 26, 2019
1 parent 896b8d3 commit 8be9f5de032bdbb3f79c5c987b19f85c71ec2f0a
@@ -1,150 +1,15 @@
/*
* Copyright (c) 2018 Linaro Limited
* Copyright (c) 2019 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_POSIX_POSIX__FDTABLE_H_
#define ZEPHYR_INCLUDE_POSIX_POSIX__FDTABLE_H_
#ifndef ZEPHYR_INCLUDE_MISC_FDTABLE_H_
#define ZEPHYR_INCLUDE_MISC_FDTABLE_H_

#include <stdarg.h>
#include <sys/types.h>
/* FIXME: For native_posix ssize_t, off_t. */
#include <fs/fs.h>

#ifdef __cplusplus
extern "C" {
#ifndef CONFIG_COMPAT_INCLUDES
#warning "This header file has moved, include <sys/fdtable.h> instead."
#endif

/**
* File descriptor virtual method table.
* All operations beyond read/write go thru ioctl method.
*/
struct fd_op_vtable {
ssize_t (*read)(void *obj, void *buf, size_t sz);
ssize_t (*write)(void *obj, const void *buf, size_t sz);
int (*ioctl)(void *obj, unsigned int request, va_list args);
};

/**
* @brief Reserve file descriptor.
*
* This function allows to reserve a space for file descriptor entry in
* the underlying table, and thus allows caller to fail fast if no free
* descriptor is available. If this function succeeds, z_finalize_fd()
* or z_free_fd() must be called mandatorily.
*
* @return Allocated file descriptor, or -1 in case of error (errno is set)
*/
int z_reserve_fd(void);

/**
* @brief Finalize creation of file descriptor.
*
* This function should be called exactly once after z_reserve_fd(), and
* should not be called in any other case.
*
* @param fd File descriptor previously returned by z_reserve_fd()
* @param obj pointer to I/O object structure
* @param vtable pointer to I/O operation implementations for the object
*/
void z_finalize_fd(int fd, void *obj, const struct fd_op_vtable *vtable);

/**
* @brief Allocate file descriptor for underlying I/O object.
*
* This function combines operations of z_reserve_fd() and z_finalize_fd()
* in one step, and provided for convenience.
*
* @param obj pointer to I/O object structure
* @param vtable pointer to I/O operation implementations for the object
*
* @return Allocated file descriptor, or -1 in case of error (errno is set)
*/
int z_alloc_fd(void *obj, const struct fd_op_vtable *vtable);

/**
* @brief Release reserved file descriptor.
*
* This function may be called once after z_reserve_fd(), and should
* not be called in any other case.
*
* @param fd File descriptor previously returned by z_reserve_fd()
*/
void z_free_fd(int fd);

/**
* @brief Get underlying object pointer from file descriptor.
*
* This function is useful for functions other than read/write/ioctl
* to look up underlying I/O object by fd, optionally checking its
* type (using vtable reference). If fd refers to invalid entry,
* NULL will be returned with errno set to EBADF. If fd is valid,
* but vtable param is not NULL and doesn't match object's vtable,
* NULL is returned and errno set to err param.
*
* @param fd File descriptor previously returned by z_reserve_fd()
* @param vtable Expected object vtable or NULL
* @param err errno value to set if object vtable doesn't match
*
* @return Object pointer or NULL, with errno set
*/
void *z_get_fd_obj(int fd, const struct fd_op_vtable *vtable, int err);

/**
* @brief Get underlying object pointer and vtable pointer from file descriptor.
*
* @param fd File descriptor previously returned by z_reserve_fd()
* @param vtable A pointer to a pointer variable to store the vtable
*
* @return Object pointer or NULL, with errno set
*/
void *z_get_fd_obj_and_vtable(int fd, const struct fd_op_vtable **vtable);

/**
* @brief Call ioctl vmethod on an object using varargs.
*
* We need this helper function because ioctl vmethod is declared to
* take va_list and the only portable way to construct va_list is from
* function's ... parameters.
*
* @param vtable vtable containing ioctl function pointer
* @param obj Object to call ioctl on
* @param request ioctl request number
* @param ... Variadic arguments to ioctl
*/
static inline int z_fdtable_call_ioctl(const struct fd_op_vtable *vtable, void *obj,
unsigned long request, ...)
{
va_list args;
int res;

va_start(args, request);
res = vtable->ioctl(obj, request, args);
va_end(args);

return res;
}

/**
* Request codes for fd_op_vtable.ioctl().
*
* Note that these codes are internal Zephyr numbers, for internal
* Zephyr operations (and subject to change without notice, not part
* of "stable ABI"). These are however expected to co-exist with
* "well-known" POSIX/Linux ioctl numbers, and not clash with them.
*/
enum {
/* Codes below 0x100 are reserved for fcntl() codes. */
ZFD_IOCTL_CLOSE = 0x100,
ZFD_IOCTL_FSYNC,
ZFD_IOCTL_LSEEK,
ZFD_IOCTL_POLL_PREPARE,
ZFD_IOCTL_POLL_UPDATE,
ZFD_IOCTL_GETSOCKNAME,
};

#ifdef __cplusplus
}
#endif
#include <sys/fdtable.h>

#endif /* ZEPHYR_INCLUDE_POSIX_POSIX__FDTABLE_H_ */
#endif /* ZEPHYR_INCLUDE_MISC_FDTABLE_H_ */
@@ -0,0 +1,150 @@
/*
* Copyright (c) 2018 Linaro Limited
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_SYS_FDTABLE_H_
#define ZEPHYR_INCLUDE_SYS_FDTABLE_H_

#include <stdarg.h>
#include <sys/types.h>
/* FIXME: For native_posix ssize_t, off_t. */
#include <fs/fs.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
* File descriptor virtual method table.
* All operations beyond read/write go thru ioctl method.
*/
struct fd_op_vtable {
ssize_t (*read)(void *obj, void *buf, size_t sz);
ssize_t (*write)(void *obj, const void *buf, size_t sz);
int (*ioctl)(void *obj, unsigned int request, va_list args);
};

/**
* @brief Reserve file descriptor.
*
* This function allows to reserve a space for file descriptor entry in
* the underlying table, and thus allows caller to fail fast if no free
* descriptor is available. If this function succeeds, z_finalize_fd()
* or z_free_fd() must be called mandatorily.
*
* @return Allocated file descriptor, or -1 in case of error (errno is set)
*/
int z_reserve_fd(void);

/**
* @brief Finalize creation of file descriptor.
*
* This function should be called exactly once after z_reserve_fd(), and
* should not be called in any other case.
*
* @param fd File descriptor previously returned by z_reserve_fd()
* @param obj pointer to I/O object structure
* @param vtable pointer to I/O operation implementations for the object
*/
void z_finalize_fd(int fd, void *obj, const struct fd_op_vtable *vtable);

/**
* @brief Allocate file descriptor for underlying I/O object.
*
* This function combines operations of z_reserve_fd() and z_finalize_fd()
* in one step, and provided for convenience.
*
* @param obj pointer to I/O object structure
* @param vtable pointer to I/O operation implementations for the object
*
* @return Allocated file descriptor, or -1 in case of error (errno is set)
*/
int z_alloc_fd(void *obj, const struct fd_op_vtable *vtable);

/**
* @brief Release reserved file descriptor.
*
* This function may be called once after z_reserve_fd(), and should
* not be called in any other case.
*
* @param fd File descriptor previously returned by z_reserve_fd()
*/
void z_free_fd(int fd);

/**
* @brief Get underlying object pointer from file descriptor.
*
* This function is useful for functions other than read/write/ioctl
* to look up underlying I/O object by fd, optionally checking its
* type (using vtable reference). If fd refers to invalid entry,
* NULL will be returned with errno set to EBADF. If fd is valid,
* but vtable param is not NULL and doesn't match object's vtable,
* NULL is returned and errno set to err param.
*
* @param fd File descriptor previously returned by z_reserve_fd()
* @param vtable Expected object vtable or NULL
* @param err errno value to set if object vtable doesn't match
*
* @return Object pointer or NULL, with errno set
*/
void *z_get_fd_obj(int fd, const struct fd_op_vtable *vtable, int err);

/**
* @brief Get underlying object pointer and vtable pointer from file descriptor.
*
* @param fd File descriptor previously returned by z_reserve_fd()
* @param vtable A pointer to a pointer variable to store the vtable
*
* @return Object pointer or NULL, with errno set
*/
void *z_get_fd_obj_and_vtable(int fd, const struct fd_op_vtable **vtable);

/**
* @brief Call ioctl vmethod on an object using varargs.
*
* We need this helper function because ioctl vmethod is declared to
* take va_list and the only portable way to construct va_list is from
* function's ... parameters.
*
* @param vtable vtable containing ioctl function pointer
* @param obj Object to call ioctl on
* @param request ioctl request number
* @param ... Variadic arguments to ioctl
*/
static inline int z_fdtable_call_ioctl(const struct fd_op_vtable *vtable, void *obj,
unsigned long request, ...)
{
va_list args;
int res;

va_start(args, request);
res = vtable->ioctl(obj, request, args);
va_end(args);

return res;
}

/**
* Request codes for fd_op_vtable.ioctl().
*
* Note that these codes are internal Zephyr numbers, for internal
* Zephyr operations (and subject to change without notice, not part
* of "stable ABI"). These are however expected to co-exist with
* "well-known" POSIX/Linux ioctl numbers, and not clash with them.
*/
enum {
/* Codes below 0x100 are reserved for fcntl() codes. */
ZFD_IOCTL_CLOSE = 0x100,
ZFD_IOCTL_FSYNC,
ZFD_IOCTL_LSEEK,
ZFD_IOCTL_POLL_PREPARE,
ZFD_IOCTL_POLL_UPDATE,
ZFD_IOCTL_GETSOCKNAME,
};

#ifdef __cplusplus
}
#endif

#endif /* ZEPHYR_INCLUDE_SYS_FDTABLE_H_ */
@@ -16,7 +16,7 @@
#include <errno.h>
#include <fcntl.h>
#include <kernel.h>
#include <misc/fdtable.h>
#include <sys/fdtable.h>
#include <misc/speculation.h>

struct fd_entry {
@@ -10,7 +10,7 @@
#include <posix/unistd.h>
#include <posix/dirent.h>
#include <string.h>
#include <misc/fdtable.h>
#include <sys/fdtable.h>

BUILD_ASSERT_MSG(PATH_MAX >= MAX_FILE_NAME,
"PATH_MAX is less than MAX_FILE_NAME");
@@ -16,7 +16,7 @@ LOG_MODULE_REGISTER(net_sock, CONFIG_NET_SOCKETS_LOG_LEVEL);
#include <net/net_pkt.h>
#include <net/socket.h>
#include <syscall_handler.h>
#include <misc/fdtable.h>
#include <sys/fdtable.h>
#include <misc/math_extras.h>

#include "sockets_internal.h"
@@ -17,7 +17,7 @@ LOG_MODULE_REGISTER(net_sock_can, CONFIG_NET_SOCKETS_LOG_LEVEL);
#include <net/net_pkt.h>
#include <net/socket.h>
#include <syscall_handler.h>
#include <misc/fdtable.h>
#include <sys/fdtable.h>
#include <net/socket_can.h>

#include "sockets_internal.h"
@@ -7,7 +7,7 @@
#ifndef _SOCKETS_INTERNAL_H_
#define _SOCKETS_INTERNAL_H_

#include <misc/fdtable.h>
#include <sys/fdtable.h>

#define SOCK_EOF 1
#define SOCK_NONBLOCK 2
@@ -18,7 +18,7 @@ LOG_MODULE_REGISTER(net_sock_packet, CONFIG_NET_SOCKETS_LOG_LEVEL);
#include <net/socket.h>
#include <net/ethernet.h>
#include <syscall_handler.h>
#include <misc/fdtable.h>
#include <sys/fdtable.h>

#include "sockets_internal.h"

@@ -17,7 +17,7 @@ LOG_MODULE_REGISTER(net_sock_tls, CONFIG_NET_SOCKETS_LOG_LEVEL);
#include <net/net_context.h>
#include <net/socket.h>
#include <syscall_handler.h>
#include <misc/fdtable.h>
#include <sys/fdtable.h>

#if defined(CONFIG_MBEDTLS)
#if !defined(CONFIG_MBEDTLS_CFG_FILE)

0 comments on commit 8be9f5d

Please sign in to comment.
You can’t perform that action at this time.