|
|
1.1 root 1: #include <errno.h>
2: #include <sys/stat.h>
3:
4: #include <linux/fs.h>
5: #include <linux/sched.h>
6: #include <linux/kernel.h>
7: #include <asm/segment.h>
8:
9: static int cp_stat(struct m_inode * inode, struct stat * statbuf)
10: {
11: struct stat tmp;
12: int i;
13:
14: verify_area(statbuf,sizeof (* statbuf));
15: tmp.st_dev = inode->i_dev;
16: tmp.st_ino = inode->i_num;
17: tmp.st_mode = inode->i_mode;
18: tmp.st_nlink = inode->i_nlinks;
19: tmp.st_uid = inode->i_uid;
20: tmp.st_gid = inode->i_gid;
21: tmp.st_rdev = inode->i_zone[0];
22: tmp.st_size = inode->i_size;
23: tmp.st_atime = inode->i_atime;
24: tmp.st_mtime = inode->i_mtime;
25: tmp.st_ctime = inode->i_ctime;
26: for (i=0 ; i<sizeof (tmp) ; i++)
27: put_fs_byte(((char *) &tmp)[i],&((char *) statbuf)[i]);
28: return (0);
29: }
30:
31: int sys_stat(char * filename, struct stat * statbuf)
32: {
33: int i;
34: struct m_inode * inode;
35:
36: if (!(inode=namei(filename)))
37: return -ENOENT;
38: i=cp_stat(inode,statbuf);
39: iput(inode);
40: return i;
41: }
42:
43: int sys_fstat(unsigned int fd, struct stat * statbuf)
44: {
45: struct file * f;
46: struct m_inode * inode;
47:
48: if (fd >= NR_OPEN || !(f=current->filp[fd]) || !(inode=f->f_inode))
49: return -ENOENT;
50: return cp_stat(inode,statbuf);
51: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.