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 <acas...@gmail.com> пише: > > 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 <petro.karashche...@gmail.com> 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 <acas...@gmail.com> > > пише: > >> > >> 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 <petro.karashche...@gmail.com> 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 > >> > > >