18fd04b83SRoger A. Faulkner /* 28fd04b83SRoger A. Faulkner * CDDL HEADER START 38fd04b83SRoger A. Faulkner * 48fd04b83SRoger A. Faulkner * The contents of this file are subject to the terms of the 58fd04b83SRoger A. Faulkner * Common Development and Distribution License (the "License"). 68fd04b83SRoger A. Faulkner * You may not use this file except in compliance with the License. 78fd04b83SRoger A. Faulkner * 88fd04b83SRoger A. Faulkner * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 98fd04b83SRoger A. Faulkner * or http://www.opensolaris.org/os/licensing. 108fd04b83SRoger A. Faulkner * See the License for the specific language governing permissions 118fd04b83SRoger A. Faulkner * and limitations under the License. 128fd04b83SRoger A. Faulkner * 138fd04b83SRoger A. Faulkner * When distributing Covered Code, include this CDDL HEADER in each 148fd04b83SRoger A. Faulkner * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 158fd04b83SRoger A. Faulkner * If applicable, add the following below this CDDL HEADER, with the 168fd04b83SRoger A. Faulkner * fields enclosed by brackets "[]" replaced with your own identifying 178fd04b83SRoger A. Faulkner * information: Portions Copyright [yyyy] [name of copyright owner] 188fd04b83SRoger A. Faulkner * 198fd04b83SRoger A. Faulkner * CDDL HEADER END 208fd04b83SRoger A. Faulkner */ 218fd04b83SRoger A. Faulkner 228fd04b83SRoger A. Faulkner /* 23*80e2ca85S * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 248fd04b83SRoger A. Faulkner */ 258fd04b83SRoger A. Faulkner 268fd04b83SRoger A. Faulkner #include <stdio.h> 278fd04b83SRoger A. Faulkner #include <stdlib.h> 288fd04b83SRoger A. Faulkner #include <unistd.h> 298fd04b83SRoger A. Faulkner #include <fcntl.h> 308fd04b83SRoger A. Faulkner #include <utime.h> 318fd04b83SRoger A. Faulkner #include <errno.h> 328fd04b83SRoger A. Faulkner #include <sys/types.h> 338fd04b83SRoger A. Faulkner #include <sys/stat.h> 348fd04b83SRoger A. Faulkner #include <sys/time.h> 358fd04b83SRoger A. Faulkner #include <sys/poll.h> 368fd04b83SRoger A. Faulkner #include <sys/file.h> 378fd04b83SRoger A. Faulkner #include <sys/syscall.h> 388fd04b83SRoger A. Faulkner 398fd04b83SRoger A. Faulkner #include <s10_brand.h> 40*80e2ca85S #include <brand_misc.h> 418fd04b83SRoger A. Faulkner #include <s10_misc.h> 428fd04b83SRoger A. Faulkner 438fd04b83SRoger A. Faulkner /* 448fd04b83SRoger A. Faulkner * This file contains the emulation functions for all of the 458fd04b83SRoger A. Faulkner * obsolete system call traps that existed in Solaris 10 but 468fd04b83SRoger A. Faulkner * that have been deleted in the current version of Solaris. 478fd04b83SRoger A. Faulkner */ 488fd04b83SRoger A. Faulkner 498fd04b83SRoger A. Faulkner static int 508fd04b83SRoger A. Faulkner s10_fstatat(sysret_t *rval, 518fd04b83SRoger A. Faulkner int fd, const char *path, struct stat *sb, int flags) 528fd04b83SRoger A. Faulkner { 538fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat + 1024, 548fd04b83SRoger A. Faulkner fd, path, sb, flags)); 558fd04b83SRoger A. Faulkner } 568fd04b83SRoger A. Faulkner 578fd04b83SRoger A. Faulkner int 588fd04b83SRoger A. Faulkner s10_stat(sysret_t *rval, const char *path, struct stat *sb) 598fd04b83SRoger A. Faulkner { 608fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat + 1024, 618fd04b83SRoger A. Faulkner AT_FDCWD, path, sb, 0)); 628fd04b83SRoger A. Faulkner } 638fd04b83SRoger A. Faulkner 648fd04b83SRoger A. Faulkner int 658fd04b83SRoger A. Faulkner s10_lstat(sysret_t *rval, const char *path, struct stat *sb) 668fd04b83SRoger A. Faulkner { 678fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat + 1024, 688fd04b83SRoger A. Faulkner AT_FDCWD, path, sb, AT_SYMLINK_NOFOLLOW)); 698fd04b83SRoger A. Faulkner } 708fd04b83SRoger A. Faulkner 718fd04b83SRoger A. Faulkner int 728fd04b83SRoger A. Faulkner s10_fstat(sysret_t *rval, int filedes, struct stat *sb) 738fd04b83SRoger A. Faulkner { 748fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat + 1024, 758fd04b83SRoger A. Faulkner filedes, NULL, sb, 0)); 768fd04b83SRoger A. Faulkner } 778fd04b83SRoger A. Faulkner 788fd04b83SRoger A. Faulkner #if !defined(_LP64) 798fd04b83SRoger A. Faulkner 808fd04b83SRoger A. Faulkner static int 818fd04b83SRoger A. Faulkner s10_fstatat64(sysret_t *rval, 828fd04b83SRoger A. Faulkner int fd, const char *path, struct stat64 *sb, int flags) 838fd04b83SRoger A. Faulkner { 848fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat64 + 1024, 858fd04b83SRoger A. Faulkner fd, path, sb, flags)); 868fd04b83SRoger A. Faulkner } 878fd04b83SRoger A. Faulkner 888fd04b83SRoger A. Faulkner int 898fd04b83SRoger A. Faulkner s10_stat64(sysret_t *rval, const char *path, struct stat64 *sb) 908fd04b83SRoger A. Faulkner { 918fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat64 + 1024, 928fd04b83SRoger A. Faulkner AT_FDCWD, path, sb, 0)); 938fd04b83SRoger A. Faulkner } 948fd04b83SRoger A. Faulkner 958fd04b83SRoger A. Faulkner int 968fd04b83SRoger A. Faulkner s10_lstat64(sysret_t *rval, const char *path, struct stat64 *sb) 978fd04b83SRoger A. Faulkner { 988fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat64 + 1024, 998fd04b83SRoger A. Faulkner AT_FDCWD, path, sb, AT_SYMLINK_NOFOLLOW)); 1008fd04b83SRoger A. Faulkner } 1018fd04b83SRoger A. Faulkner 1028fd04b83SRoger A. Faulkner int 1038fd04b83SRoger A. Faulkner s10_fstat64(sysret_t *rval, int filedes, struct stat64 *sb) 1048fd04b83SRoger A. Faulkner { 1058fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat64 + 1024, 1068fd04b83SRoger A. Faulkner filedes, NULL, sb, 0)); 1078fd04b83SRoger A. Faulkner } 1088fd04b83SRoger A. Faulkner 1098fd04b83SRoger A. Faulkner #endif /* !_LP64 */ 1108fd04b83SRoger A. Faulkner 1118fd04b83SRoger A. Faulkner static int 1128fd04b83SRoger A. Faulkner s10_openat(sysret_t *rval, int fd, const char *path, int oflag, mode_t mode) 1138fd04b83SRoger A. Faulkner { 1148fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_openat + 1024, 1158fd04b83SRoger A. Faulkner fd, path, oflag, mode)); 1168fd04b83SRoger A. Faulkner } 1178fd04b83SRoger A. Faulkner 1188fd04b83SRoger A. Faulkner int 1198fd04b83SRoger A. Faulkner s10_open(sysret_t *rval, char *path, int oflag, mode_t mode) 1208fd04b83SRoger A. Faulkner { 1218fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_openat + 1024, 1228fd04b83SRoger A. Faulkner AT_FDCWD, path, oflag, mode)); 1238fd04b83SRoger A. Faulkner } 1248fd04b83SRoger A. Faulkner 1258fd04b83SRoger A. Faulkner int 1268fd04b83SRoger A. Faulkner s10_creat(sysret_t *rval, char *path, mode_t mode) 1278fd04b83SRoger A. Faulkner { 1288fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_openat + 1024, 1298fd04b83SRoger A. Faulkner AT_FDCWD, path, O_WRONLY | O_CREAT | O_TRUNC, mode)); 1308fd04b83SRoger A. Faulkner } 1318fd04b83SRoger A. Faulkner 1328fd04b83SRoger A. Faulkner #if !defined(_LP64) 1338fd04b83SRoger A. Faulkner 1348fd04b83SRoger A. Faulkner static int 1358fd04b83SRoger A. Faulkner s10_openat64(sysret_t *rval, int fd, const char *path, int oflag, mode_t mode) 1368fd04b83SRoger A. Faulkner { 1378fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_openat64 + 1024, 1388fd04b83SRoger A. Faulkner fd, path, oflag, mode)); 1398fd04b83SRoger A. Faulkner } 1408fd04b83SRoger A. Faulkner 1418fd04b83SRoger A. Faulkner int 1428fd04b83SRoger A. Faulkner s10_open64(sysret_t *rval, char *path, int oflag, mode_t mode) 1438fd04b83SRoger A. Faulkner { 1448fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_openat64 + 1024, 1458fd04b83SRoger A. Faulkner AT_FDCWD, path, oflag, mode)); 1468fd04b83SRoger A. Faulkner } 1478fd04b83SRoger A. Faulkner 1488fd04b83SRoger A. Faulkner int 1498fd04b83SRoger A. Faulkner s10_creat64(sysret_t *rval, char *path, mode_t mode) 1508fd04b83SRoger A. Faulkner { 1518fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_openat64 + 1024, 1528fd04b83SRoger A. Faulkner AT_FDCWD, path, O_WRONLY | O_CREAT | O_TRUNC, mode)); 1538fd04b83SRoger A. Faulkner } 1548fd04b83SRoger A. Faulkner 1558fd04b83SRoger A. Faulkner #endif /* !_LP64 */ 1568fd04b83SRoger A. Faulkner 1578fd04b83SRoger A. Faulkner int 1588fd04b83SRoger A. Faulkner s10_fork1(sysret_t *rval) 1598fd04b83SRoger A. Faulkner { 1608fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_forksys + 1024, 0, 0)); 1618fd04b83SRoger A. Faulkner } 1628fd04b83SRoger A. Faulkner 1638fd04b83SRoger A. Faulkner int 1648fd04b83SRoger A. Faulkner s10_forkall(sysret_t *rval) 1658fd04b83SRoger A. Faulkner { 1668fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_forksys + 1024, 1, 0)); 1678fd04b83SRoger A. Faulkner } 1688fd04b83SRoger A. Faulkner 1698fd04b83SRoger A. Faulkner int 1708fd04b83SRoger A. Faulkner s10_dup(sysret_t *rval, int fd) 1718fd04b83SRoger A. Faulkner { 1728fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fcntl + 1024, fd, F_DUPFD, 0)); 1738fd04b83SRoger A. Faulkner } 1748fd04b83SRoger A. Faulkner 1758fd04b83SRoger A. Faulkner int 1768fd04b83SRoger A. Faulkner s10_poll(sysret_t *rval, struct pollfd *fds, nfds_t nfd, int timeout) 1778fd04b83SRoger A. Faulkner { 1788fd04b83SRoger A. Faulkner timespec_t ts; 1798fd04b83SRoger A. Faulkner timespec_t *tsp; 1808fd04b83SRoger A. Faulkner 1818fd04b83SRoger A. Faulkner if (timeout < 0) 1828fd04b83SRoger A. Faulkner tsp = NULL; 1838fd04b83SRoger A. Faulkner else { 1848fd04b83SRoger A. Faulkner ts.tv_sec = timeout / MILLISEC; 1858fd04b83SRoger A. Faulkner ts.tv_nsec = (timeout % MILLISEC) * MICROSEC; 1868fd04b83SRoger A. Faulkner tsp = &ts; 1878fd04b83SRoger A. Faulkner } 1888fd04b83SRoger A. Faulkner 1898fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_pollsys + 1024, 1908fd04b83SRoger A. Faulkner fds, nfd, tsp, NULL)); 1918fd04b83SRoger A. Faulkner } 1928fd04b83SRoger A. Faulkner 1938fd04b83SRoger A. Faulkner int 1948fd04b83SRoger A. Faulkner s10_lwp_mutex_lock(sysret_t *rval, void *mp) 1958fd04b83SRoger A. Faulkner { 1968fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_lwp_mutex_timedlock + 1024, 1978fd04b83SRoger A. Faulkner mp, NULL, 0)); 1988fd04b83SRoger A. Faulkner } 1998fd04b83SRoger A. Faulkner 2008fd04b83SRoger A. Faulkner int 2018fd04b83SRoger A. Faulkner s10_lwp_sema_wait(sysret_t *rval, void *sp) 2028fd04b83SRoger A. Faulkner { 2038fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_lwp_sema_timedwait + 1024, 2048fd04b83SRoger A. Faulkner sp, NULL, 0)); 2058fd04b83SRoger A. Faulkner } 2068fd04b83SRoger A. Faulkner 2078fd04b83SRoger A. Faulkner static int 2088fd04b83SRoger A. Faulkner s10_fchownat(sysret_t *rval, 2098fd04b83SRoger A. Faulkner int fd, const char *name, uid_t uid, gid_t gid, int flags) 2108fd04b83SRoger A. Faulkner { 2118fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fchownat + 1024, 2128fd04b83SRoger A. Faulkner fd, name, uid, gid, flags)); 2138fd04b83SRoger A. Faulkner } 2148fd04b83SRoger A. Faulkner 2158fd04b83SRoger A. Faulkner int 2168fd04b83SRoger A. Faulkner s10_chown(sysret_t *rval, const char *name, uid_t uid, gid_t gid) 2178fd04b83SRoger A. Faulkner { 2188fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fchownat + 1024, 2198fd04b83SRoger A. Faulkner AT_FDCWD, name, uid, gid, 0)); 2208fd04b83SRoger A. Faulkner } 2218fd04b83SRoger A. Faulkner 2228fd04b83SRoger A. Faulkner int 2238fd04b83SRoger A. Faulkner s10_lchown(sysret_t *rval, const char *name, uid_t uid, gid_t gid) 2248fd04b83SRoger A. Faulkner { 2258fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fchownat + 1024, 2268fd04b83SRoger A. Faulkner AT_FDCWD, name, uid, gid, AT_SYMLINK_NOFOLLOW)); 2278fd04b83SRoger A. Faulkner } 2288fd04b83SRoger A. Faulkner 2298fd04b83SRoger A. Faulkner int 2308fd04b83SRoger A. Faulkner s10_fchown(sysret_t *rval, int filedes, uid_t uid, gid_t gid) 2318fd04b83SRoger A. Faulkner { 2328fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fchownat + 1024, 2338fd04b83SRoger A. Faulkner filedes, NULL, uid, gid, 0)); 2348fd04b83SRoger A. Faulkner } 2358fd04b83SRoger A. Faulkner 2368fd04b83SRoger A. Faulkner static int 2378fd04b83SRoger A. Faulkner s10_unlinkat(sysret_t *rval, int fd, const char *name, int flags) 2388fd04b83SRoger A. Faulkner { 2398fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_unlinkat + 1024, 2408fd04b83SRoger A. Faulkner fd, name, flags)); 2418fd04b83SRoger A. Faulkner } 2428fd04b83SRoger A. Faulkner 2438fd04b83SRoger A. Faulkner int 2448fd04b83SRoger A. Faulkner s10_unlink(sysret_t *rval, const char *name) 2458fd04b83SRoger A. Faulkner { 2468fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_unlinkat + 1024, 2478fd04b83SRoger A. Faulkner AT_FDCWD, name, 0)); 2488fd04b83SRoger A. Faulkner } 2498fd04b83SRoger A. Faulkner 2508fd04b83SRoger A. Faulkner int 2518fd04b83SRoger A. Faulkner s10_rmdir(sysret_t *rval, const char *name) 2528fd04b83SRoger A. Faulkner { 2538fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_unlinkat + 1024, 2548fd04b83SRoger A. Faulkner AT_FDCWD, name, AT_REMOVEDIR)); 2558fd04b83SRoger A. Faulkner } 2568fd04b83SRoger A. Faulkner 2578fd04b83SRoger A. Faulkner static int 2588fd04b83SRoger A. Faulkner s10_renameat(sysret_t *rval, 2598fd04b83SRoger A. Faulkner int oldfd, const char *oldname, int newfd, const char *newname) 2608fd04b83SRoger A. Faulkner { 2618fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_renameat + 1024, 2628fd04b83SRoger A. Faulkner oldfd, oldname, newfd, newname)); 2638fd04b83SRoger A. Faulkner } 2648fd04b83SRoger A. Faulkner 2658fd04b83SRoger A. Faulkner int 2668fd04b83SRoger A. Faulkner s10_rename(sysret_t *rval, const char *oldname, const char *newname) 2678fd04b83SRoger A. Faulkner { 2688fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_renameat + 1024, 2698fd04b83SRoger A. Faulkner AT_FDCWD, oldname, AT_FDCWD, newname)); 2708fd04b83SRoger A. Faulkner } 2718fd04b83SRoger A. Faulkner 2728fd04b83SRoger A. Faulkner static int 2738fd04b83SRoger A. Faulkner s10_faccessat(sysret_t *rval, int fd, const char *fname, int amode, int flag) 2748fd04b83SRoger A. Faulkner { 2758fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_faccessat + 1024, 2768fd04b83SRoger A. Faulkner fd, fname, amode, flag)); 2778fd04b83SRoger A. Faulkner } 2788fd04b83SRoger A. Faulkner 2798fd04b83SRoger A. Faulkner int 2808fd04b83SRoger A. Faulkner s10_access(sysret_t *rval, const char *fname, int amode) 2818fd04b83SRoger A. Faulkner { 2828fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_faccessat + 1024, 2838fd04b83SRoger A. Faulkner AT_FDCWD, fname, amode, 0)); 2848fd04b83SRoger A. Faulkner } 2858fd04b83SRoger A. Faulkner 2868fd04b83SRoger A. Faulkner int 2878fd04b83SRoger A. Faulkner s10_utime(sysret_t *rval, const char *path, const struct utimbuf *times) 2888fd04b83SRoger A. Faulkner { 2898fd04b83SRoger A. Faulkner struct utimbuf ltimes; 2908fd04b83SRoger A. Faulkner timespec_t ts[2]; 2918fd04b83SRoger A. Faulkner timespec_t *tsp; 2928fd04b83SRoger A. Faulkner 2938fd04b83SRoger A. Faulkner if (times == NULL) { 2948fd04b83SRoger A. Faulkner tsp = NULL; 2958fd04b83SRoger A. Faulkner } else { 296*80e2ca85S if (brand_uucopy(times, <imes, sizeof (ltimes)) != 0) 2978fd04b83SRoger A. Faulkner return (EFAULT); 2988fd04b83SRoger A. Faulkner ts[0].tv_sec = ltimes.actime; 2998fd04b83SRoger A. Faulkner ts[0].tv_nsec = 0; 3008fd04b83SRoger A. Faulkner ts[1].tv_sec = ltimes.modtime; 3018fd04b83SRoger A. Faulkner ts[1].tv_nsec = 0; 3028fd04b83SRoger A. Faulkner tsp = ts; 3038fd04b83SRoger A. Faulkner } 3048fd04b83SRoger A. Faulkner 3058fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_utimesys + 1024, 1, 3068fd04b83SRoger A. Faulkner AT_FDCWD, path, tsp, 0)); 3078fd04b83SRoger A. Faulkner } 3088fd04b83SRoger A. Faulkner 3098fd04b83SRoger A. Faulkner int 3108fd04b83SRoger A. Faulkner s10_utimes(sysret_t *rval, const char *path, const struct timeval times[2]) 3118fd04b83SRoger A. Faulkner { 3128fd04b83SRoger A. Faulkner struct timeval ltimes[2]; 3138fd04b83SRoger A. Faulkner timespec_t ts[2]; 3148fd04b83SRoger A. Faulkner timespec_t *tsp; 3158fd04b83SRoger A. Faulkner 3168fd04b83SRoger A. Faulkner if (times == NULL) { 3178fd04b83SRoger A. Faulkner tsp = NULL; 3188fd04b83SRoger A. Faulkner } else { 319*80e2ca85S if (brand_uucopy(times, ltimes, sizeof (ltimes)) != 0) 3208fd04b83SRoger A. Faulkner return (EFAULT); 3218fd04b83SRoger A. Faulkner ts[0].tv_sec = ltimes[0].tv_sec; 3228fd04b83SRoger A. Faulkner ts[0].tv_nsec = ltimes[0].tv_usec * 1000; 3238fd04b83SRoger A. Faulkner ts[1].tv_sec = ltimes[1].tv_sec; 3248fd04b83SRoger A. Faulkner ts[1].tv_nsec = ltimes[1].tv_usec * 1000; 3258fd04b83SRoger A. Faulkner tsp = ts; 3268fd04b83SRoger A. Faulkner } 3278fd04b83SRoger A. Faulkner 3288fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_utimesys + 1024, 1, 3298fd04b83SRoger A. Faulkner AT_FDCWD, path, tsp, 0)); 3308fd04b83SRoger A. Faulkner } 3318fd04b83SRoger A. Faulkner 3328fd04b83SRoger A. Faulkner static int 3338fd04b83SRoger A. Faulkner s10_futimesat(sysret_t *rval, 3348fd04b83SRoger A. Faulkner int fd, const char *path, const struct timeval times[2]) 3358fd04b83SRoger A. Faulkner { 3368fd04b83SRoger A. Faulkner struct timeval ltimes[2]; 3378fd04b83SRoger A. Faulkner timespec_t ts[2]; 3388fd04b83SRoger A. Faulkner timespec_t *tsp; 3398fd04b83SRoger A. Faulkner 3408fd04b83SRoger A. Faulkner if (times == NULL) { 3418fd04b83SRoger A. Faulkner tsp = NULL; 3428fd04b83SRoger A. Faulkner } else { 343*80e2ca85S if (brand_uucopy(times, ltimes, sizeof (ltimes)) != 0) 3448fd04b83SRoger A. Faulkner return (EFAULT); 3458fd04b83SRoger A. Faulkner ts[0].tv_sec = ltimes[0].tv_sec; 3468fd04b83SRoger A. Faulkner ts[0].tv_nsec = ltimes[0].tv_usec * 1000; 3478fd04b83SRoger A. Faulkner ts[1].tv_sec = ltimes[1].tv_sec; 3488fd04b83SRoger A. Faulkner ts[1].tv_nsec = ltimes[1].tv_usec * 1000; 3498fd04b83SRoger A. Faulkner tsp = ts; 3508fd04b83SRoger A. Faulkner } 3518fd04b83SRoger A. Faulkner 3528fd04b83SRoger A. Faulkner if (path == NULL) 3538fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_utimesys + 1024, 0, fd, tsp)); 3548fd04b83SRoger A. Faulkner 3558fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_utimesys + 1024, 1, fd, path, tsp, 0)); 3568fd04b83SRoger A. Faulkner } 3578fd04b83SRoger A. Faulkner 3588fd04b83SRoger A. Faulkner #if defined(__x86) 3598fd04b83SRoger A. Faulkner 3608fd04b83SRoger A. Faulkner /* ARGSUSED */ 3618fd04b83SRoger A. Faulkner int 3628fd04b83SRoger A. Faulkner s10_xstat(sysret_t *rval, int version, const char *path, struct stat *statb) 3638fd04b83SRoger A. Faulkner { 3648fd04b83SRoger A. Faulkner #if defined(__amd64) 3658fd04b83SRoger A. Faulkner return (EINVAL); 3668fd04b83SRoger A. Faulkner #else 3678fd04b83SRoger A. Faulkner if (version != _STAT_VER) 3688fd04b83SRoger A. Faulkner return (EINVAL); 3698fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat + 1024, 3708fd04b83SRoger A. Faulkner AT_FDCWD, path, statb, 0)); 3718fd04b83SRoger A. Faulkner #endif 3728fd04b83SRoger A. Faulkner } 3738fd04b83SRoger A. Faulkner 3748fd04b83SRoger A. Faulkner /* ARGSUSED */ 3758fd04b83SRoger A. Faulkner int 3768fd04b83SRoger A. Faulkner s10_lxstat(sysret_t *rval, int version, const char *path, struct stat *statb) 3778fd04b83SRoger A. Faulkner { 3788fd04b83SRoger A. Faulkner #if defined(__amd64) 3798fd04b83SRoger A. Faulkner return (EINVAL); 3808fd04b83SRoger A. Faulkner #else 3818fd04b83SRoger A. Faulkner if (version != _STAT_VER) 3828fd04b83SRoger A. Faulkner return (EINVAL); 3838fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat + 1024, 3848fd04b83SRoger A. Faulkner AT_FDCWD, path, statb, AT_SYMLINK_NOFOLLOW)); 3858fd04b83SRoger A. Faulkner #endif 3868fd04b83SRoger A. Faulkner } 3878fd04b83SRoger A. Faulkner 3888fd04b83SRoger A. Faulkner /* ARGSUSED */ 3898fd04b83SRoger A. Faulkner int 3908fd04b83SRoger A. Faulkner s10_fxstat(sysret_t *rval, int version, int fd, struct stat *statb) 3918fd04b83SRoger A. Faulkner { 3928fd04b83SRoger A. Faulkner #if defined(__amd64) 3938fd04b83SRoger A. Faulkner return (EINVAL); 3948fd04b83SRoger A. Faulkner #else 3958fd04b83SRoger A. Faulkner if (version != _STAT_VER) 3968fd04b83SRoger A. Faulkner return (EINVAL); 3978fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_fstatat + 1024, 3988fd04b83SRoger A. Faulkner fd, NULL, statb, 0)); 3998fd04b83SRoger A. Faulkner #endif 4008fd04b83SRoger A. Faulkner } 4018fd04b83SRoger A. Faulkner 4028fd04b83SRoger A. Faulkner /* ARGSUSED */ 4038fd04b83SRoger A. Faulkner int 4048fd04b83SRoger A. Faulkner s10_xmknod(sysret_t *rval, int version, const char *path, 4058fd04b83SRoger A. Faulkner mode_t mode, dev_t dev) 4068fd04b83SRoger A. Faulkner { 4078fd04b83SRoger A. Faulkner #if defined(__amd64) 4088fd04b83SRoger A. Faulkner return (EINVAL); 4098fd04b83SRoger A. Faulkner #else 4108fd04b83SRoger A. Faulkner if (version != _MKNOD_VER) 4118fd04b83SRoger A. Faulkner return (EINVAL); 4128fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_mknod + 1024, path, mode, dev)); 4138fd04b83SRoger A. Faulkner #endif 4148fd04b83SRoger A. Faulkner } 4158fd04b83SRoger A. Faulkner 4168fd04b83SRoger A. Faulkner #endif /* __x86 */ 4178fd04b83SRoger A. Faulkner 4188fd04b83SRoger A. Faulkner /* 4198fd04b83SRoger A. Faulkner * This is the fsat() system call trap in s10. 4208fd04b83SRoger A. Faulkner * It has been removed in the current system. 4218fd04b83SRoger A. Faulkner */ 4228fd04b83SRoger A. Faulkner int 4238fd04b83SRoger A. Faulkner s10_fsat(sysret_t *rval, 4248fd04b83SRoger A. Faulkner int code, uintptr_t arg1, uintptr_t arg2, 4258fd04b83SRoger A. Faulkner uintptr_t arg3, uintptr_t arg4, uintptr_t arg5) 4268fd04b83SRoger A. Faulkner { 4278fd04b83SRoger A. Faulkner switch (code) { 4288fd04b83SRoger A. Faulkner case 0: /* openat */ 4298fd04b83SRoger A. Faulkner return (s10_openat(rval, (int)arg1, 4308fd04b83SRoger A. Faulkner (const char *)arg2, (int)arg3, (mode_t)arg4)); 4318fd04b83SRoger A. Faulkner case 1: /* openat64 */ 4328fd04b83SRoger A. Faulkner #if defined(_LP64) 4338fd04b83SRoger A. Faulkner return (EINVAL); 4348fd04b83SRoger A. Faulkner #else 4358fd04b83SRoger A. Faulkner return (s10_openat64(rval, (int)arg1, 4368fd04b83SRoger A. Faulkner (const char *)arg2, (int)arg3, (mode_t)arg4)); 4378fd04b83SRoger A. Faulkner #endif 4388fd04b83SRoger A. Faulkner case 2: /* fstatat64 */ 4398fd04b83SRoger A. Faulkner #if defined(_LP64) 4408fd04b83SRoger A. Faulkner return (EINVAL); 4418fd04b83SRoger A. Faulkner #else 4428fd04b83SRoger A. Faulkner return (s10_fstatat64(rval, (int)arg1, 4438fd04b83SRoger A. Faulkner (const char *)arg2, (struct stat64 *)arg3, (int)arg4)); 4448fd04b83SRoger A. Faulkner #endif 4458fd04b83SRoger A. Faulkner case 3: /* fstatat */ 4468fd04b83SRoger A. Faulkner return (s10_fstatat(rval, (int)arg1, 4478fd04b83SRoger A. Faulkner (const char *)arg2, (struct stat *)arg3, (int)arg4)); 4488fd04b83SRoger A. Faulkner case 4: /* fchownat */ 4498fd04b83SRoger A. Faulkner return (s10_fchownat(rval, (int)arg1, (char *)arg2, 4508fd04b83SRoger A. Faulkner (uid_t)arg3, (gid_t)arg4, (int)arg5)); 4518fd04b83SRoger A. Faulkner case 5: /* unlinkat */ 4528fd04b83SRoger A. Faulkner return (s10_unlinkat(rval, (int)arg1, (char *)arg2, 4538fd04b83SRoger A. Faulkner (int)arg3)); 4548fd04b83SRoger A. Faulkner case 6: /* futimesat */ 4558fd04b83SRoger A. Faulkner return (s10_futimesat(rval, (int)arg1, 4568fd04b83SRoger A. Faulkner (const char *)arg2, (const struct timeval *)arg3)); 4578fd04b83SRoger A. Faulkner case 7: /* renameat */ 4588fd04b83SRoger A. Faulkner return (s10_renameat(rval, (int)arg1, (char *)arg2, 4598fd04b83SRoger A. Faulkner (int)arg3, (char *)arg4)); 4608fd04b83SRoger A. Faulkner case 8: /* faccessat */ 4618fd04b83SRoger A. Faulkner return (s10_faccessat(rval, (int)arg1, (char *)arg2, 4628fd04b83SRoger A. Faulkner (int)arg3, (int)arg4)); 4638fd04b83SRoger A. Faulkner case 9: /* openattrdirat */ 4648fd04b83SRoger A. Faulkner return (s10_openat(rval, (int)arg1, 4658fd04b83SRoger A. Faulkner (const char *)arg2, FXATTRDIROPEN, 0)); 4668fd04b83SRoger A. Faulkner } 4678fd04b83SRoger A. Faulkner return (EINVAL); 4688fd04b83SRoger A. Faulkner } 4698fd04b83SRoger A. Faulkner 4708fd04b83SRoger A. Faulkner /* 4718fd04b83SRoger A. Faulkner * Interposition upon SYS_umount 4728fd04b83SRoger A. Faulkner */ 4738fd04b83SRoger A. Faulkner int 4748fd04b83SRoger A. Faulkner s10_umount(sysret_t *rval, const char *path) 4758fd04b83SRoger A. Faulkner { 4768fd04b83SRoger A. Faulkner return (__systemcall(rval, SYS_umount2 + 1024, path, 0)); 4778fd04b83SRoger A. Faulkner } 478