Revision ec86b0fb

b/linux-user/syscall.c
105 105
_syscall2(int,sys_statfs,const char *,path,struct kernel_statfs *,buf)
106 106
_syscall2(int,sys_fstatfs,int,fd,struct kernel_statfs *,buf)
107 107
_syscall3(int,sys_rt_sigqueueinfo,int,pid,int,sig,siginfo_t *,uinfo)
108
#ifdef __NR_exit_group
109
_syscall1(int,exit_group,int,error_code)
110
#endif
108 111

  
109 112
extern int personality(int);
110 113
extern int flock(int, int);
......
1212 1215
        ret = get_errno(write(arg1, (void *)arg2, arg3));
1213 1216
        break;
1214 1217
    case TARGET_NR_open:
1215
        ret = get_errno(open((const char *)arg1, arg2, arg3));
1218
        ret = get_errno(open(path((const char *)arg1), arg2, arg3));
1216 1219
        break;
1217 1220
    case TARGET_NR_close:
1218 1221
        ret = get_errno(close(arg1));
......
1700 1703
    case TARGET_NR_oldlstat:
1701 1704
        goto unimplemented;
1702 1705
    case TARGET_NR_readlink:
1703
        ret = get_errno(readlink((const char *)arg1, (char *)arg2, arg3));
1706
        ret = get_errno(readlink(path((const char *)arg1), (char *)arg2, arg3));
1704 1707
        break;
1705 1708
    case TARGET_NR_uselib:
1706 1709
        goto unimplemented;
......
1779 1782
        goto unimplemented;
1780 1783
    case TARGET_NR_statfs:
1781 1784
        stfs = (void *)arg2;
1782
        ret = get_errno(sys_statfs((const char *)arg1, stfs));
1785
        ret = get_errno(sys_statfs(path((const char *)arg1), stfs));
1783 1786
    convert_statfs:
1784 1787
        if (!is_error(ret)) {
1785 1788
            tswap32s(&stfs->f_type);
......
1844 1847
        }
1845 1848
        break;
1846 1849
    case TARGET_NR_stat:
1847
        ret = get_errno(stat((const char *)arg1, &st));
1850
        ret = get_errno(stat(path((const char *)arg1), &st));
1848 1851
        goto do_stat;
1849 1852
    case TARGET_NR_lstat:
1850
        ret = get_errno(lstat((const char *)arg1, &st));
1853
        ret = get_errno(lstat(path((const char *)arg1), &st));
1851 1854
        goto do_stat;
1852 1855
    case TARGET_NR_fstat:
1853 1856
        {
......
1857 1860
                struct target_stat *target_st = (void *)arg2;
1858 1861
                target_st->st_dev = tswap16(st.st_dev);
1859 1862
                target_st->st_ino = tswapl(st.st_ino);
1860
                target_st->st_mode = tswap32(st.st_mode);
1863
                target_st->st_mode = tswap16(st.st_mode);
1861 1864
                target_st->st_nlink = tswap16(st.st_nlink);
1862 1865
                target_st->st_uid = tswap16(st.st_uid);
1863 1866
                target_st->st_gid = tswap16(st.st_gid);
......
1930 1933
    case TARGET_NR_clone:
1931 1934
        ret = get_errno(do_fork(cpu_env, arg1, arg2));
1932 1935
        break;
1936
#ifdef __NR_exit_group
1937
        /* new thread calls */
1938
    case TARGET_NR_exit_group:
1939
        ret = get_errno(exit_group(arg1));
1940
        break;
1941
#endif
1933 1942
    case TARGET_NR_setdomainname:
1934 1943
        ret = get_errno(setdomainname((const char *)arg1, arg2));
1935 1944
        break;
......
2235 2244
    case TARGET_NR_ftruncate64:
2236 2245
        goto unimplemented;
2237 2246
    case TARGET_NR_stat64:
2238
        ret = get_errno(stat((const char *)arg1, &st));
2247
        ret = get_errno(stat(path((const char *)arg1), &st));
2239 2248
        goto do_stat64;
2240 2249
    case TARGET_NR_lstat64:
2241
        ret = get_errno(lstat((const char *)arg1, &st));
2250
        ret = get_errno(lstat(path((const char *)arg1), &st));
2242 2251
        goto do_stat64;
2243 2252
    case TARGET_NR_fstat64:
2244 2253
        {
......
2246 2255
        do_stat64:
2247 2256
            if (!is_error(ret)) {
2248 2257
                struct target_stat64 *target_st = (void *)arg2;
2258
                memset(target_st, 0, sizeof(struct target_stat64));
2249 2259
                target_st->st_dev = tswap16(st.st_dev);
2250 2260
                target_st->st_ino = tswapl(st.st_ino);
2261
#ifdef TARGET_STAT64_HAS_BROKEN_ST_INO
2262
                target_st->__st_ino = tswapl(st.st_ino);
2263
#endif
2251 2264
                target_st->st_mode = tswap32(st.st_mode);
2252
                target_st->st_nlink = tswap16(st.st_nlink);
2253
                target_st->st_uid = tswap16(st.st_uid);
2254
                target_st->st_gid = tswap16(st.st_gid);
2265
                target_st->st_nlink = tswap32(st.st_nlink);
2266
                target_st->st_uid = tswapl(st.st_uid);
2267
                target_st->st_gid = tswapl(st.st_gid);
2255 2268
                target_st->st_rdev = tswap16(st.st_rdev);
2256 2269
                /* XXX: better use of kernel struct */
2257
                target_st->st_size = tswapl(st.st_size);
2270
                target_st->st_size = tswap64(st.st_size);
2258 2271
                target_st->st_blksize = tswapl(st.st_blksize);
2259 2272
                target_st->st_blocks = tswapl(st.st_blocks);
2260 2273
                target_st->target_st_atime = tswapl(st.st_atime);

Also available in: Unified diff