parent
5667b68610
commit
aefe9a3788
@ -1,54 +0,0 @@
|
|||||||
#include <errno.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <a.out.h>
|
|
||||||
|
|
||||||
#include <linux/fs.h>
|
|
||||||
#include <linux/sched.h>
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/mm.h>
|
|
||||||
#include <asm/segment.h>
|
|
||||||
|
|
||||||
struct linux_dirent {
|
|
||||||
long d_ino;
|
|
||||||
off_t d_off;
|
|
||||||
unsigned short d_reclen;
|
|
||||||
char d_name[14];
|
|
||||||
};
|
|
||||||
|
|
||||||
int sys_getdents(unsigned int fd, struct linux_dirent *d, unsigned int count)
|
|
||||||
{
|
|
||||||
struct file *f;
|
|
||||||
struct m_inode * m;
|
|
||||||
struct buffer_head * b;
|
|
||||||
struct dir_entry * dir;
|
|
||||||
int i,j,k,res;
|
|
||||||
struct linux_dirent usrd;
|
|
||||||
i=0;
|
|
||||||
res=0;
|
|
||||||
f=current->filp[fd];
|
|
||||||
m=f->f_inode;
|
|
||||||
b=bread(m->i_dev,m->i_zone[0]);
|
|
||||||
dir=(struct dir_entry*)b->b_data;
|
|
||||||
while(dir[i].inode>0)
|
|
||||||
{
|
|
||||||
if(res+sizeof(struct linux_dirent)>count)
|
|
||||||
break;
|
|
||||||
usrd.d_ino=dir[i].inode;
|
|
||||||
usrd.d_off=0;
|
|
||||||
usrd.d_reclen=sizeof(struct linux_dirent);
|
|
||||||
for(j=0;j<14;j++)
|
|
||||||
usrd.d_name[j]=dir[i].name[j];
|
|
||||||
for(k=0;k<sizeof(struct linux_dirent);k++)
|
|
||||||
{
|
|
||||||
put_fs_byte(((char*)(&usrd))[k],(char*)d+res);
|
|
||||||
res++;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if(count<=512)
|
|
||||||
return res;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in new issue