ssize_t umsdos_emd_dir_read (struct file *filp, char *buf, size_t count) { ssize_t sizeread, ret = 0; #ifdef __BIG_ENDIAN struct umsdos_dirent *d = (struct umsdos_dirent *) buf; #endif filp->f_flags = 0; sizeread = umsdos_file_read_kmem (filp, buf, count); if (sizeread != count) { printk (KERN_WARNING "UMSDOS: EMD problem, pos=%Ld, count=%d, read=%d\n", filp->f_pos, count, sizeread); ret = -EIO; } #ifdef __BIG_ENDIAN d->nlink = le16_to_cpu (d->nlink); d->uid = le16_to_cpu (d->uid); d->gid = le16_to_cpu (d->gid); d->atime = le32_to_cpu (d->atime); d->mtime = le32_to_cpu (d->mtime); d->ctime = le32_to_cpu (d->ctime); d->rdev = le16_to_cpu (d->rdev); d->mode = le16_to_cpu (d->mode); #endif return ret; }
/* Read a block of bytes from one EMD file. The block of data is NOT in user space. Return 0 if ok, -EIO if any error. */ int umsdos_emd_dir_read ( struct inode *emd_dir, struct file *filp, char *buf, /* buffer in kernel memory, not in user space */ int count) { int ret = 0; int sizeread; filp->f_flags = 0; sizeread = umsdos_file_read_kmem (emd_dir,filp,buf,count); if (sizeread != count){ printk ("UMSDOS: problem with EMD file. Can't read pos = %Ld (%d != %d)\n" ,filp->f_pos,sizeread,count); ret = -EIO; } return ret; }