C++程序  |  97行  |  2.33 KB

#include <sys/stat.h>

/* It's easy to change kernel to support stat */

struct stat_portable {
    unsigned long long  st_dev;
    unsigned char       __pad0[4];

    unsigned long       __st_ino;
    unsigned int        st_mode;
    unsigned int        st_nlink;

    unsigned long       st_uid;
    unsigned long       st_gid;

    unsigned long long  st_rdev;
    unsigned char       __pad3[4];

    long long           st_size;
    unsigned long       st_blksize;
    unsigned long long  st_blocks;

    unsigned long       st_atime;
    unsigned long       st_atime_nsec;

    unsigned long       st_mtime;
    unsigned long       st_mtime_nsec;

    unsigned long       st_ctime;
    unsigned long       st_ctime_nsec;

    unsigned long long  st_ino;
};

/*
The MIPS Version is
struct stat {
    unsigned long       st_dev;
    unsigned long       __pad0[3];

    unsigned long long  st_ino;

    unsigned int        st_mode;
    unsigned int        st_nlink;

    unsigned long       st_uid;
    unsigned long       st_gid;

    unsigned long       st_rdev;
    unsigned long       __pad1[3];

    long long           st_size;

    unsigned long       st_atime;
    unsigned long       st_atime_nsec;

    unsigned long       st_mtime;
    unsigned long       st_mtime_nsec;

    unsigned long       st_ctime;
    unsigned long       st_ctime_nsec;

    unsigned long       st_blksize;
    unsigned long       __pad2;

    unsigned long long  st_blocks;
};
*/

/* Real Stat Syscall */
extern int stat(const char *, struct stat *);

/* Note: The Portable Header will define stat to stat_portable */
int stat_portable(const char *path, struct stat_portable *s)
{
   struct stat mips_stat;
   int ret = stat(path,&mips_stat);
   s->st_dev = mips_stat.st_dev;
   s->__st_ino = mips_stat.st_ino;
   s->st_mode = mips_stat.st_mode;
   s->st_nlink = mips_stat.st_nlink;
   s->st_uid = mips_stat.st_uid;
   s->st_gid = mips_stat.st_gid;
   s->st_rdev = mips_stat.st_rdev;
   s->st_size = mips_stat.st_size;
   s->st_blksize = mips_stat.st_blksize;
   s->st_blocks = mips_stat.st_blocks;
   s->st_atime = mips_stat.st_atime;
   s->st_atime_nsec = mips_stat.st_atime_nsec;
   s->st_mtime = mips_stat.st_mtime;
   s->st_mtime_nsec = mips_stat.st_mtime_nsec;
   s->st_ctime = mips_stat.st_ctime;
   s->st_ctime_nsec = mips_stat.st_ctime_nsec;
   s->st_ino =  mips_stat.st_ino;
   return ret;
}