static inline void linux32_from_stat(struct stat *st, struct linux32_stat64 *st32) { bzero(st32, sizeof(*st32)); st32->lst_dev = linux_fakedev(st->st_dev, 0); st32->__lst_ino = st->st_ino; st32->lst_mode = st->st_mode; if (st->st_nlink >= (1 << 15)) st32->lst_nlink = (1 << 15) - 1; else st32->lst_nlink = st->st_nlink; st32->lst_uid = st->st_uid; st32->lst_gid = st->st_gid; st32->lst_rdev = linux_fakedev(st->st_rdev, 0); st32->lst_size = st->st_size; st32->lst_blksize = st->st_blksize; st32->lst_blocks = st->st_blocks; st32->lst_atime = st->st_atime; st32->lst_mtime = st->st_mtime; st32->lst_ctime = st->st_ctime; #ifdef LINUX32_STAT64_HAS_NSEC st32->lst_atime_nsec = st->st_atimensec; st32->lst_mtime_nsec = st->st_mtimensec; st32->lst_ctime_nsec = st->st_ctimensec; #endif #ifdef LINUX32_STAT64_HAS_BROKEN_ST_INO st32->lst_ino = st->st_ino; #endif return; }
/* * Convert a NetBSD stat structure to a Linux stat structure. * Only the order of the fields and the padding in the structure * is different. linux_fakedev is a machine-dependent function * which optionally converts device driver major/minor numbers * (XXX horrible, but what can you do against code that compares * things against constant major device numbers? sigh) */ static void bsd_to_linux_stat(struct stat *bsp, struct linux_stat *lsp) { lsp->lst_dev = linux_fakedev(bsp->st_dev, 0); lsp->lst_ino = bsp->st_ino; lsp->lst_mode = (linux_mode_t)bsp->st_mode; if (bsp->st_nlink >= (1 << 15)) lsp->lst_nlink = (1 << 15) - 1; else lsp->lst_nlink = (linux_nlink_t)bsp->st_nlink; lsp->lst_uid = bsp->st_uid; lsp->lst_gid = bsp->st_gid; lsp->lst_rdev = linux_fakedev(bsp->st_rdev, 1); lsp->lst_size = bsp->st_size; lsp->lst_blksize = bsp->st_blksize; lsp->lst_blocks = bsp->st_blocks; lsp->lst_atime = bsp->st_atime; lsp->lst_mtime = bsp->st_mtime; lsp->lst_ctime = bsp->st_ctime; #ifdef LINUX_STAT_HAS_NSEC lsp->lst_atime_nsec = bsp->st_atimensec; lsp->lst_mtime_nsec = bsp->st_mtimensec; lsp->lst_ctime_nsec = bsp->st_ctimensec; #endif }
static inline void bsd_to_linux32_stat(struct stat *st, struct linux32_stat *st32) { memset(st32, 0, sizeof(*st32)); st32->lst_dev = linux_fakedev(st->st_dev, 0); st32->lst_ino = st->st_ino; st32->lst_mode = st->st_mode; if (st->st_nlink >= (1 << 15)) st32->lst_nlink = (1 << 15) - 1; else st32->lst_nlink = st->st_nlink; st32->lst_uid = st->st_uid; st32->lst_gid = st->st_gid; st32->lst_rdev = linux_fakedev(st->st_rdev, 0); st32->lst_size = st->st_size; st32->lst_blksize = st->st_blksize; st32->lst_blocks = st->st_blocks; st32->lst_atime = st->st_atime; st32->lst_mtime = st->st_mtime; st32->lst_ctime = st->st_ctime; #ifdef LINUX32_STAT_HAS_NSEC st32->lst_atime_nsec = st->st_atimensec; st32->lst_mtime_nsec = st->st_mtimensec; st32->lst_ctime_nsec = st->st_ctimensec; #endif }