Hello Alan,
Maybe you misread the header file. Here are few examples of what is in
include/nuttx/fs/fs.h
struct file_operations
{
/* The device driver open method differs from the mountpoint open method */
int (*open)(FAR struct file *filep);
/* The following methods must be identical in signature and position
* because the struct file_operations and struct mountp_operations are
* treated like unions.
*/
int (*close)(FAR struct file *filep);
ssize_t (*read)(FAR struct file *filep, FAR char *buffer, size_t buflen);
ssize_t (*write)(FAR struct file *filep, FAR const char *buffer,
size_t buflen);
off_t (*seek)(FAR struct file *filep, off_t offset, int whence);
int (*ioctl)(FAR struct file *filep, int cmd, unsigned long arg);
/* The two structures need not be common after this point */
int (*poll)(FAR struct file *filep, struct pollfd *fds, bool setup);
#ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS
int (*unlink)(FAR struct inode *inode);
#endif
};
struct block_operations
{
int (*open)(FAR struct inode *inode);
int (*close)(FAR struct inode *inode);
ssize_t (*read)(FAR struct inode *inode, FAR unsigned char *buffer,
blkcnt_t start_sector, unsigned int nsectors);
ssize_t (*write)(FAR struct inode *inode, FAR const unsigned char *buffer,
blkcnt_t start_sector, unsigned int nsectors);
int (*geometry)(FAR struct inode *inode, FAR struct geometry
*geometry);
int (*ioctl)(FAR struct inode *inode, int cmd, unsigned long arg);
#ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS
int (*unlink)(FAR struct inode *inode);
#endif
};
struct mountpt_operations
{
/* The mountpoint open method differs from the driver open method
* because it receives (1) the inode that contains the mountpoint
* private data, (2) the relative path into the mountpoint, and (3)
* information to manage privileges.
*/
int (*open)(FAR struct file *filep, FAR const char *relpath,
int oflags, mode_t mode);
/* The following methods must be identical in signature and position
* because the struct file_operations and struct mountpt_operations are
* treated like unions.
*/
int (*close)(FAR struct file *filep);
ssize_t (*read)(FAR struct file *filep, FAR char *buffer, size_t buflen);
ssize_t (*write)(FAR struct file *filep, FAR const char *buffer,
size_t buflen);
off_t (*seek)(FAR struct file *filep, off_t offset, int whence);
int (*ioctl)(FAR struct file *filep, int cmd, unsigned long arg);
/* The two structures need not be common after this point. The following
* are extended methods needed to deal with the unique needs of mounted
* file systems.
*
* Additional open-file-specific mountpoint operations:
*/
int (*sync)(FAR struct file *filep);
int (*dup)(FAR const struct file *oldp, FAR struct file *newp);
int (*fstat)(FAR const struct file *filep, FAR struct stat *buf);
int (*fchstat)(FAR const struct file *filep,
FAR const struct stat *buf, int flags);
int (*truncate)(FAR struct file *filep, off_t length);
/* Directory operations */
int (*opendir)(FAR struct inode *mountpt, FAR const char *relpath,
FAR struct fs_dirent_s *dir);
int (*closedir)(FAR struct inode *mountpt,
FAR struct fs_dirent_s *dir);
int (*readdir)(FAR struct inode *mountpt,
FAR struct fs_dirent_s *dir);
int (*rewinddir)(FAR struct inode *mountpt,
FAR struct fs_dirent_s *dir);
/* General volume-related mountpoint operations: */
int (*bind)(FAR struct inode *blkdriver, FAR const void *data,
FAR void **handle);
int (*unbind)(FAR void *handle, FAR struct inode **blkdriver,
unsigned int flags);
int (*statfs)(FAR struct inode *mountpt, FAR struct statfs *buf);
/* Operations on paths */
int (*unlink)(FAR struct inode *mountpt, FAR const char *relpath);
int (*mkdir)(FAR struct inode *mountpt, FAR const char *relpath,
mode_t mode);
int (*rmdir)(FAR struct inode *mountpt, FAR const char *relpath);
int (*rename)(FAR struct inode *mountpt, FAR const char *oldrelpath,
FAR const char *newrelpath);
int (*stat)(FAR struct inode *mountpt, FAR const char *relpath,
FAR struct stat *buf);
int (*chstat)(FAR struct inode *mountpt, FAR const char *relpath,
FAR const struct stat *buf, int flags);
};
Those structures contain exactly function pointers.
Best regards,
Petro
ср, 26 січ. 2022 р. о 16:05 Alan Carvalho de Assis <[email protected]> пише:
>
> Hey Petro,
>
> The CODE is used on function pointers, so I think it is ok in the FS code.
>
> BR,
>
> Alan
>
> On 1/26/22, Petro Karashchenko <[email protected]> wrote:
> > Hello Alan,
> >
> > Yeah, I see that. But since CODE is missing for the most of the
> > pointers to functions in common code I just wonder how that platform
> > works.
> > None of FS operations in include/nuttx/fs/fs.h have CODE. Does this
> > mean that Z80, Z180 and Z16/ZNEO do not use FS as all?
> >
> > And another question is: Should we add CODE to function pointers in common
> > code?
> >
> > Best regards,
> > Petro
> >
> > ср, 26 січ. 2022 р. о 15:21 Alan Carvalho de Assis <[email protected]>
> > пише:
> >>
> >> Hi Petro,
> >>
> >> It is used by Z80, Z180 and Z16/ZNEO, see include/nuttx/compiler.h for
> >> reference.
> >>
> >> BR,
> >>
> >> Alan
> >>
> >> On 1/26/22, Petro Karashchenko <[email protected]> wrote:
> >> > Hello team,
> >> >
> >> > Recently I noticed that some structures in common code use CODE
> >> > keyword for pointers to functions and some do not, so I have the
> >> > question: is CODE keyword still supported?
> >> > Here are few examples:
> >> > struct automount_lower_s
> >> > {
> >> > ...
> >> > CODE int (*attach)(FAR const struct automount_lower_s *lower,
> >> > automount_handler_t isr, FAR void *arg);
> >> > CODE void (*enable)(FAR const struct automount_lower_s *lower,
> >> > bool enable);
> >> > CODE bool (*inserted)(FAR const struct automount_lower_s *lower);
> >> > };
> >> > vs
> >> > struct file_operations
> >> > {
> >> > int (*open)(FAR struct file *filep);
> >> > int (*close)(FAR struct file *filep);
> >> > ssize_t (*read)(FAR struct file *filep, FAR char *buffer, size_t
> >> > buflen);
> >> > ssize_t (*write)(FAR struct file *filep, FAR const char *buffer,
> >> > size_t buflen);
> >> > off_t (*seek)(FAR struct file *filep, off_t offset, int whence);
> >> > int (*ioctl)(FAR struct file *filep, int cmd, unsigned long arg);
> >> >
> >> > /* The two structures need not be common after this point */
> >> >
> >> > int (*poll)(FAR struct file *filep, struct pollfd *fds, bool
> >> > setup);
> >> > #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS
> >> > int (*unlink)(FAR struct inode *inode);
> >> > #endif
> >> > };
> >> >
> >> > Will appreciate your feedback.
> >> >
> >> > Best regards,
> >> > Petro
> >> >
> >