|
|
|
|
@ -116,29 +116,32 @@ int sys_getdents(unsigned int fd, struct linux_dirent *d, unsigned int count)
|
|
|
|
|
return ENOTDIR;
|
|
|
|
|
|
|
|
|
|
inode = file->f_inode;
|
|
|
|
|
block = bread(inode->i_dev,inode->i_zone[0]);
|
|
|
|
|
for (i = 0; i <= inode->i_size/0x400; i++)
|
|
|
|
|
{
|
|
|
|
|
block = bread(inode->i_dev,inode->i_zone[i]);
|
|
|
|
|
|
|
|
|
|
/* count: size of linux_dirent[], target
|
|
|
|
|
* dd_size: size of dir_entry[], block 400?
|
|
|
|
|
*/
|
|
|
|
|
for (dpos = 0,bpos = 0;bpos<inode->i_size;bpos += sizeof(struct dir_entry)) {
|
|
|
|
|
if (dpos >= (count-ld_size))
|
|
|
|
|
return 0; /* d full */
|
|
|
|
|
ptr = (struct dir_entry *) (bpos + block->b_data);
|
|
|
|
|
if (!ptr -> inode)
|
|
|
|
|
continue; /* when it 's empty inode, jump it */
|
|
|
|
|
|
|
|
|
|
tmp.d_ino = ptr -> inode;
|
|
|
|
|
for (i = 0; i < 14; i++) tmp.d_name[i] = ptr -> name[i];
|
|
|
|
|
tmp.d_reclen = sizeof(tmp);
|
|
|
|
|
tmp.d_off = 0;
|
|
|
|
|
/* count: size of linux_dirent[], target
|
|
|
|
|
* dd_size: size of dir_entry[], block 400?
|
|
|
|
|
*/
|
|
|
|
|
for (dpos = 0,bpos = 0;bpos<inode->i_size;bpos += sizeof(struct dir_entry)) {
|
|
|
|
|
if (dpos >= (count-ld_size))
|
|
|
|
|
return 0; /* d full */
|
|
|
|
|
ptr = (struct dir_entry *) (bpos + block->b_data);
|
|
|
|
|
if (!ptr -> inode)
|
|
|
|
|
continue; /* when it 's empty inode, jump it */
|
|
|
|
|
|
|
|
|
|
tmp.d_ino = ptr -> inode;
|
|
|
|
|
for (i = 0; i < 14; i++) tmp.d_name[i] = ptr -> name[i];
|
|
|
|
|
tmp.d_reclen = sizeof(tmp);
|
|
|
|
|
tmp.d_off = 0;
|
|
|
|
|
|
|
|
|
|
buf = &tmp;
|
|
|
|
|
for (i = 0; i < tmp.d_reclen; i++){
|
|
|
|
|
put_fs_byte(*(buf+i),((char*)d)+i+dpos); /* move data from kernel to user */
|
|
|
|
|
}
|
|
|
|
|
dpos += tmp.d_reclen;
|
|
|
|
|
}
|
|
|
|
|
buf = &tmp;
|
|
|
|
|
for (i = 0; i < tmp.d_reclen; i++){
|
|
|
|
|
put_fs_byte(*(buf+i),((char*)d)+i+dpos); /* move data from kernel to user */
|
|
|
|
|
}
|
|
|
|
|
dpos += tmp.d_reclen;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return dpos;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|