Changeset 342 for asp3_tinet_ecnl_rx/trunk/ntshell/src
- Timestamp:
- Apr 27, 2018, 2:26:14 PM (6 years ago)
- Location:
- asp3_tinet_ecnl_rx/trunk/ntshell/src
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_tinet_ecnl_rx/trunk/ntshell/src/netcmd.c
r340 r342 73 73 extern void ping4(T_IN4_ADDR *addr, uint_t tmo, uint_t len); 74 74 75 /* 76 * str_num -- cons_printf の数値変換 77 */ 78 79 static void 80 str_chr(char *text, int *pos, int size, char c) 81 { 82 if (*pos >= size) 83 return; 84 text[*pos] = c; 85 *pos = *pos + 1; 86 } 87 88 /* 89 * str_num -- cons_printf の数値変換 90 */ 91 92 static int 93 str_num(char *text, int *pos, int size, ulong_t val, int radix, 94 const char *radchar, int width, bool_t minus, char padchar) 95 { 96 char digits[24]; 97 int ix, pad, pchars; 98 bool_t left; 99 100 if (width < 0) { 101 width = -width; 102 left = true; 103 } 104 else 105 left = false; 106 107 ix = 0; 108 do { 109 digits[ix ++] = radchar[val % radix]; 110 val /= radix; 111 } while (val != 0); 112 113 if (minus) 114 digits[ix ++] = '-'; 115 116 if (width > ix) 117 pchars = width; 118 else 119 pchars = ix; 120 121 pad = ix; 122 if (!left) /* 右詰め */ 123 for ( ; pad < width; pad ++) 124 str_chr(text, pos, size, padchar); 125 126 while (ix -- > 0) 127 str_chr(text, pos, size, digits[ix]); 128 129 if (left) /* 左詰め */ 130 for ( ; pad < width; pad ++) 131 str_chr(text, pos, size, padchar); 132 133 return pchars; 134 } 135 136 /* 137 * str_ipv4addr -- IPv4 アドレス出力 138 */ 139 140 int 141 str_ipv4addr (char *text, int size, T_IN4_ADDR *addr, int width) 142 { 143 int len = 3, pos = 0; /* 3 は '.' の文字数 */ 144 145 len += str_num(text, &pos, size, (*addr >> 24) & 0xff, 10, radhex, 0, false, ' '); 146 str_chr(text, &pos, size, '.'); 147 len += str_num(text, &pos, size, (*addr >> 16) & 0xff, 10, radhex, 0, false, ' '); 148 str_chr(text, &pos, size, '.'); 149 len += str_num(text, &pos, size, (*addr >> 8) & 0xff, 10, radhex, 0, false, ' '); 150 str_chr(text, &pos, size, '.'); 151 len += str_num(text, &pos, size, *addr & 0xff, 10, radhex, 0, false, ' '); 152 153 for ( ; len < width; len ++) 154 str_chr(text, &pos, size, ' '); 155 156 return len; 157 } 158 159 /* 160 * ipv6addr -- IPv6 アドレス出力 161 */ 162 163 int 164 str_ipv6addr (char *text, int size, const T_IN6_ADDR *addr, int width) 165 { 166 int len = 0, ix, len6, pos = 0; 167 bool_t omit = false, zero = false; 168 169 if (addr == NULL || IN6_IS_ADDR_UNSPECIFIED(addr)) { 170 str_chr(text, &pos, size, '0'); 171 str_chr(text, &pos, size, ':'); 172 str_chr(text, &pos, size, ':'); 173 str_chr(text, &pos, size, '0'); 174 len = 4; 175 } 176 else { 177 if (in6_is_addr_ipv4mapped(addr)) 178 len6 = sizeof(T_IN6_ADDR) / 2 - 2; 179 else 180 len6 = sizeof(T_IN6_ADDR) / 2; 181 for (ix = 0; ix < len6; ix ++) { 182 if (omit) { 183 len += str_num(text, &pos, size, ntohs(addr->s6_addr16[ix]), 16, radhex, 0, false, ' '); 184 if (ix < 7) { 185 str_chr(text, &pos, size, ':'); 186 len ++; 187 } 188 } 189 else if (ix > 0 && ix < 7 && addr->s6_addr16[ix] == 0) 190 zero = true; 191 else { 192 if (zero) { 193 omit = true; 194 str_chr(text, &pos, size, ':'); 195 len ++; 196 } 197 len += str_num(text, &pos, size, ntohs(addr->s6_addr16[ix]), 16, radhex, 0, false, ' '); 198 if (ix < 7) { 199 str_chr(text, &pos, size, ':'); 200 len ++; 201 } 202 } 203 } 204 205 if (len6 == sizeof(T_IN6_ADDR) / 2 - 2) { 206 T_IN4_ADDR ip4addr; 207 208 ip4addr = ntohl(addr->s6_addr32[3]); 209 len += str_ipv4addr(&text[len], size - len, &ip4addr, 0); 210 } 211 212 for ( ; len < width; len ++) 213 str_chr(text, &pos, size, ' '); 214 } 215 return len; 216 } 217 218 /* 219 * str_macaddr -- MAC アドレス出力 220 */ 221 222 int 223 str_macaddr (char *text, int size, uint8_t *mac, int width) 224 { 225 int oct, len, pos = 0; 226 227 for (oct = 5; oct -- > 0; ) { 228 str_num(text, &pos, size, *mac ++, 16, radhex, 2, false, '0'); 229 str_chr(text, &pos, size, ':'); 230 } 231 str_num(text, &pos, size, *mac, 16, radhex, 2, false, '0'); 232 233 for (len = 17; len < width; len ++) 234 str_chr(text, &pos, size, ' '); 235 236 return len; 237 } 238 75 239 int usrcmd_ping(int argc, char **argv) 76 240 { 77 int _ttmo, size;241 int tmo, size; 78 242 char apip = DEFAULT_API_PROTO; 79 243 char *line = argv[1]; … … 153 317 ER ret; 154 318 uint32_t expire, renew, rebind; 319 char temp[30]; 320 int pos; 155 321 156 322 if ((ret = dhcp4c_get_info(&svaddr, &expire, &renew, &rebind, &bind_start)) == E_OK) { 157 ntstdio_printf(&ntstdio, "DHCPv4 server: %hI,\n", &svaddr); 323 pos = str_ipv4addr(temp, sizeof(temp), &svaddr, 0); 324 temp[pos] = '\0'; 325 ntstdio_printf(&ntstdio, "DHCPv4 server: %s,\n", temp); 158 326 ntstdio_printf(&ntstdio, " Renew: %u:%02u:%02u,\n", 159 327 renew / 3600, (renew / 60) % 60, renew % 60); … … 279 447 int count, dcount, col; 280 448 T_IN6_ADDR in6_addr; 449 char temp[30]; 450 int pos; 281 451 282 452 ntstdio_printf(&ntstdio, "%10s section: %d\n", title, scount); … … 294 464 memcpy((void*)&in4_addr, (void*)(msg + rr.rdata_offset), sizeof(in4_addr)); 295 465 in4_addr = ntohl(in4_addr); 296 ntstdio_printf(&ntstdio, " IPv4 addr: %hI\n", &in4_addr); 466 pos = str_ipv4addr(temp, sizeof(temp), &in4_addr, 0); 467 temp[pos] = '\0'; 468 ntstdio_printf(&ntstdio, " IPv4 addr: %s\n", temp); 297 469 break; 298 470 case DNS_TYPE_NS: … … 316 488 case DNS_TYPE_AAAA: 317 489 memcpy((void*)&in6_addr, (void*)(msg + rr.rdata_offset), sizeof(in6_addr)); 318 ntstdio_printf(&ntstdio, " IPv6 addr: %lI\n", &in6_addr); 490 pos = str_ipv6addr(temp, sizeof(temp), &in6_addr, 0); 491 temp[pos] = '\0'; 492 ntstdio_printf(&ntstdio, " IPv6 addr: %s\n", temp); 319 493 break; 320 494 default: … … 347 521 T_IN4_ADDR in4_addr; 348 522 #endif 523 char temp[30]; 524 int pos; 349 525 350 526 #if defined(SUPPORT_INET6) … … 363 539 if (IN6_IS_ADDR_UNSPECIFIED(&in6_addr)) 364 540 ntstdio_printf(&ntstdio, "not available.\n"); 365 else 366 ntstdio_printf(&ntstdio, "%lI.\n", &in6_addr); 541 else { 542 pos = str_ipv6addr(temp, sizeof(temp), &in6_addr, 0); 543 temp[pos] = '\0'; 544 ntstdio_printf(&ntstdio, "%s.\n", temp); 545 } 367 546 #endif /* of #if defined(SUPPORT_INET6) */ 368 547 … … 372 551 if (in4_addr == IPV4_ADDRANY) 373 552 ntstdio_printf(&ntstdio, "not available.\n"); 374 else 375 ntstdio_printf(&ntstdio, "%hI.\n", &in4_addr); 553 else { 554 pos = str_ipv4addr(temp, sizeof(temp), &in4_addr, 0); 555 temp[pos] = '\0'; 556 ntstdio_printf(&ntstdio, "%s.\n", temp); 557 } 376 558 #endif /* of #if defined(SUPPORT_INET4) */ 377 559 } -
asp3_tinet_ecnl_rx/trunk/ntshell/src/ntshell_main.c
r340 r342 59 59 #include "ntshell_main.h" 60 60 #include "socket_stub.h" 61 #include "mbed_api.h"62 61 #include "usb_hbth.h" 63 62 … … 162 161 } 163 162 164 void shellif_into()165 {166 /* メインタスクの優先度より高くする */167 chg_pri(NTSHELL_PRIORITY, main_task_priority);168 }169 170 void shellif_outof()171 {172 /* ntshellタスクの優先度に戻す */173 chg_pri(NTSHELL_PRIORITY, NTSHELL_PRIORITY);174 }175 176 163 void shell_abort() 177 164 { -
asp3_tinet_ecnl_rx/trunk/ntshell/src/shellif.h
r340 r342 282 282 283 283 char *basename(char *); 284 void shellif_into();285 void shellif_outof();286 284 287 285 struct regs_t { … … 295 293 }; 296 294 297 voidno_implement(const char *text);295 long no_implement(const char *text); 298 296 void __mbedcall_cp_asm(); 299 297 -
asp3_tinet_ecnl_rx/trunk/ntshell/src/syscall.c
r340 r342 1 1 /* 2 2 * TOPPERS ECHONET Lite Communication Middleware 3 * 3 * 4 4 * Copyright (C) 2018 Cores Co., Ltd. Japan 5 * 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 7 7 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 … … 26 26 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 27 27 * 免責すること. 28 * 28 * 29 29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 30 30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 … … 32 32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 33 33 * の責任を負わない. 34 * 35 * @(#) $Id $34 * 35 * @(#) $Id: syscall.c 1530 2018-04-27 04:00:17Z coas-nagasima $ 36 36 */ 37 37 #include "bits/syscall.h" … … 42 42 void *tid_address; 43 43 44 voidno_implement(const char *text)44 long no_implement(const char *text) 45 45 { 46 46 syslog(LOG_ERROR, text); 47 47 DebugBreak(); 48 } 49 50 long __syscall(long n, ...) 48 return -ENOSYS; 49 } 50 51 long __syscall_nr(long n, ...) 51 52 { 52 53 long ret = -ENOSYS; 53 54 va_list ap; 54 int fd;55 56 shellif_into();57 55 58 56 va_start(ap, n); 59 57 60 58 switch (n) { 61 case SYS__llseek: 62 return shell_llseek(va_arg(ap, int), va_arg(ap, off_t), va_arg(ap, off_t *), va_arg(ap, int)); 63 case SYS__newselect: 64 ret = shell_select(va_arg(ap, int), va_arg(ap, fd_set *), va_arg(ap, fd_set *), va_arg(ap, fd_set *), va_arg(ap, struct timeval *)); 65 break; 66 case SYS_accept: 67 ret = shell_accept(va_arg(ap, int), va_arg(ap, struct sockaddr *), va_arg(ap, socklen_t *)); 68 break; 69 case SYS_access: 70 ret = shell_access(va_arg(ap, const char *), va_arg(ap, int)); 71 break; 72 case SYS_acct: 73 no_implement("acct\n"); 74 break; 75 case SYS_adjtimex: 76 no_implement("adjtimex\n"); 77 break; 78 #ifdef SYS_arch_prctl 79 case SYS_arch_prctl: 80 no_implement("arch_prctl\n"); 81 break; 59 case __NR_setresgid: 60 no_implement("setresgid"); 61 break; 62 case __NR_setresuid: 63 no_implement("setresuid"); 64 break; 65 case __NR_setgid: 66 no_implement("setgid"); 67 break; 68 case __NR_setregid: 69 no_implement("setregid"); 70 break; 71 case __NR_setreuid: 72 no_implement("setreuid"); 73 break; 74 case __NR_setuid: 75 no_implement("setuid"); 76 break; 77 default: 78 no_implement("syscall"); 79 break; 80 } 81 82 va_end(ap); 83 84 return ret; 85 } 86 87 long SYS__llseek(long a, long b, long c, long d, long e) { 88 return shell_llseek((int)a, ((off_t)b << 32) | (off_t)c, (off_t *)d, (int)e); 89 } 90 91 long SYS__newselect(long a, long b, long c, long d, long e) { 92 return shell_select((int)a, (fd_set *)b, (fd_set *)c, (fd_set *)d, (struct timeval *)e); 93 } 94 95 long SYS_accept(long a, long b, long c) { 96 return shell_accept((int)a, (struct sockaddr *)b, (socklen_t *)c); 97 } 98 99 long SYS_access(long a, long b) { 100 return shell_access((const char *)a, (int)b); 101 } 102 103 long SYS_bind(long a, long b, long c) { 104 return shell_bind((int)a, (const struct sockaddr *)b, (socklen_t)c); 105 } 106 107 long SYS_brk(long a) { 108 return (long)shell_brk((void *)a); 109 } 110 111 long SYS_chdir(long a) { 112 return shell_chdir((const char *)a); 113 } 114 115 long SYS_chmod(long a, long b) { 116 return shell_chmod((const char *)a, (mode_t)b); 117 } 118 119 long SYS_chroot(long a) { 120 return shell_chroot((const char *)a); 121 } 122 123 long SYS_clock_getres(long a, long b) { 124 return shell_clock_getres((clockid_t)a, (struct timespec *)b); 125 } 126 127 long SYS_clock_gettime(long a, long b) { 128 return shell_clock_gettime((clockid_t)a, (struct timespec *)b); 129 } 130 131 long SYS_clock_settime(long a, long b) { 132 return shell_clock_settime((clockid_t)a, (const struct timespec *)b); 133 } 134 135 long SYS_close(long a) { 136 return shell_close((int)a); 137 } 138 139 long SYS_connect(long a, long b, long c) { 140 return shell_connect((int)a, (const struct sockaddr *)b, (socklen_t)c); 141 } 142 143 long SYS_exit(long a) { 144 shell_exit((int)a); 145 return 0; 146 } 147 148 long SYS_exit_group(long a) { 149 shell_exit_group((int)a); 150 return 0; 151 } 152 153 long SYS_fcntl64(long a, long b, long c) { 154 return shell_fcntl((int)a, (int)b, (void *)c); 155 } 156 157 long SYS_fdatasync() { 158 return no_implement("fdatasync\n"); 159 } 160 161 long SYS_fstat64(long a, long b) { 162 return shell_fstat((int)a, (struct stat *)b); 163 } 164 165 long SYS_fsync(long a) { 166 return shell_fsync((int)a); 167 } 168 169 long SYS_ftruncate64(long a, long b, long c) { 170 return shell_ftruncate((int)a, ((off_t)b << 32) | (off_t)c); 171 } 172 173 long SYS_futex() { 174 int futex(int *uaddr, int op, int val, const struct timespec *timeout, int *uaddr2, int val3); 175 return no_implement("futex\n"); 176 } 177 178 long SYS_futimesat() { 179 return no_implement("futimesat\n"); 180 } 181 182 long SYS_getcwd(long a, long b) { 183 return (long)shell_getcwd((char *)a, (size_t)b); 184 } 185 186 long SYS_getdents64(long a, long b, long c) { 187 return shell_getdents((int)a, (struct dirent *)b, (size_t)c); 188 } 189 190 long SYS_getpeername(long a, long b, long c) { 191 return shell_getpeername((int)a, (struct sockaddr *)b, (socklen_t *)c); 192 } 193 194 long SYS_getsockname(long a, long b, long c) { 195 return shell_getsockname((int)a, (struct sockaddr *)b, (socklen_t *)c); 196 } 197 198 long SYS_getpid() { 199 return shell_getpid(); 200 } 201 202 long SYS_getsockopt(long a, long b, long c, long d, long e) { 203 return shell_getsockopt((int)a, (int)b, (int)c, (void *)d, (socklen_t *)e); 204 } 205 206 long SYS_gettid() { 207 return shell_gettid(); 208 } 209 210 long SYS_gettimeofday(long a, long b) { 211 return shell_gettimeofday((struct timeval *)a, (void *)b); 212 } 213 214 long SYS_getuid32() { 215 return no_implement("getuid\n"); 216 } 217 218 long SYS_ioctl(long a, long b, long c) { 219 return shell_ioctl((int)a, (int)b, (void *)c); 220 } 221 222 long SYS_kill(long a, long b) { 223 return shell_kill((int)a, (int)b); 224 } 225 226 long SYS_link(long a, long b) { 227 return shell_link((const char *)a, (const char *)b); 228 } 229 230 long SYS_listen(long a, long b) { 231 return shell_listen((int)a, (int)b); 232 } 233 234 long SYS_lstat64(long a, long b) { 235 return shell_lstat((const char *__restrict)a, (struct stat *__restrict)b); 236 } 237 238 long SYS_madvise(long a, long b, long c) { 239 return shell_madvise((void *)a, (size_t)b, (int)c); 240 } 241 242 long SYS_mkdir(long a, long b) { 243 return shell_mkdir((const char *)a, (mode_t)b); 244 } 245 246 long SYS_mmap2(long a, long b, long c, long d, long e, long f, long g) { 247 return (int)shell_mmap2((void *)a, (size_t)b, (int)c, (int)d, (int)e, ((off_t)f << 32) | (off_t)g); 248 } 249 250 long SYS_mprotect(long a, long b, long c) { 251 return shell_mprotect((void *)a, (size_t)b, (int)c); 252 } 253 254 long SYS_munmap() { 255 return no_implement("munmap\n"); 256 } 257 258 long SYS_open(long a, long b, long c) { 259 return shell_open((const char *)a, (int)b, (void *)c); 260 } 261 262 long SYS_poll(long a, long b, long c) { 263 return shell_poll((struct pollfd *)a, (nfds_t)b, (int)c); 264 } 265 266 long SYS_pread64() { 267 return no_implement("pread64\n"); 268 } 269 270 long SYS_pwrite64() { 271 return no_implement("pwrite64\n"); 272 } 273 274 long SYS_read(long a, long b, long c) { 275 return shell_read((int)a, (void *)b, (size_t)c); 276 } 277 278 long SYS_readv(long a, long b, long c) { 279 return shell_readv((int)a, (const struct iovec *)b, (int)c); 280 } 281 282 long SYS_recv(long a, long b, long c, long d) { 283 return shell_recv((int)a, (void *)b, (size_t)c, (int)d); 284 } 285 286 long SYS_recvfrom(long a, long b, long c, long d, long e, long f) { 287 if (a == 0) 288 return shell_recv(a, (void *)b, (size_t)c, (int)d); 289 else 290 return shell_recvfrom(a, (void *)b, (size_t)c, (int)d, (struct sockaddr *)e, (socklen_t *)f); 291 } 292 293 long SYS_recvmsg(long a, long b, long c) { 294 return shell_recvmsg((int)a, (struct msghdr *)b, (size_t)c); 295 } 296 297 long SYS_rename(long a, long b) { 298 return shell_rename((const char *)a, (const char *)b); 299 } 300 301 long SYS_rmdir(long a) { 302 return shell_rmdir((const char *)a); 303 } 304 305 long SYS_rt_sigaction(long a, long b, long c) { 306 return shell_sigaction((int)a, (const struct sigaction *)b, (struct sigaction *)c); 307 } 308 309 long SYS_rt_sigprocmask(long a, long b, long c) { 310 return shell_sigprocmask((int)a, (const sigset_t *)b, (sigset_t *)c); 311 } 312 313 long SYS_rt_sigqueueinfo() { 314 return no_implement("rt_sigqueueinfo\n"); 315 } 316 317 long SYS_send(long a, long b, long c, long d) { 318 return shell_send((int)a, (const void *)b, (size_t)c, (int)d); 319 } 320 321 long SYS_sendmsg(long a, long b, long c) { 322 return shell_sendmsg((int)a, (const struct msghdr *)b, (size_t)c); 323 } 324 325 long SYS_sendto(long a, long b, long c, long d, long e, long f) { 326 if (a == 0) 327 return shell_send(a, (const void *)b, (size_t)c, (int)d); 328 else 329 return shell_sendto(a, (const void *)b, (size_t)c, (int)d, (const struct sockaddr *)e, (socklen_t)f); 330 } 331 332 long SYS_setsockopt(long a, long b, long c, long d, long e) { 333 return shell_setsockopt((int)a, (int)b, (int)c, (const void *)d, (socklen_t)e); 334 } 335 336 long SYS_shutdown(long a, long b) { 337 return shell_shutdown((int)a, (int)b); 338 } 339 340 long SYS_sched_setscheduler() { 341 return no_implement("sched_setscheduler\n"); 342 } 343 344 long SYS_set_robust_list() { 345 return no_implement("set_robust_list\n"); 346 } 347 348 #ifdef SYS_set_thread_area 349 long SYS_set_thread_area(long a) { 350 thread_area = (void *)a; 351 return 0; 352 } 82 353 #endif 83 case SYS_bind: 84 ret = shell_bind(va_arg(ap, int), va_arg(ap, const struct sockaddr *), va_arg(ap, socklen_t)); 85 break; 86 case SYS_brk: 87 ret = (long)shell_brk(va_arg(ap, void *)); 88 break; 89 #ifdef SYS_cachectl 90 case SYS_cachectl: 91 no_implement("cachectl\n"); 92 break; 93 #endif 94 #ifdef SYS_cacheflush 95 case SYS_cacheflush: 96 no_implement("cacheflush\n"); 97 break; 98 #endif 99 case SYS_capget: 100 no_implement("capget\n"); 101 break; 102 case SYS_capset: 103 no_implement("capset\n"); 104 break; 105 case SYS_chdir: 106 ret = shell_chdir(va_arg(ap, const char *)); 107 break; 108 case SYS_chmod: 109 ret = shell_chmod(va_arg(ap, const char *), va_arg(ap, mode_t)); 110 break; 111 case SYS_chown32: 112 no_implement("chown\n"); 113 break; 114 case SYS_chroot: 115 ret = shell_chroot(va_arg(ap, const char *)); 116 break; 117 case SYS_clock_adjtime: 118 no_implement("clock_adjtime\n"); 119 break; 120 case SYS_clock_getres: 121 ret = shell_clock_getres(va_arg(ap, clockid_t), va_arg(ap, struct timespec *)); 122 break; 123 case SYS_clock_gettime: 124 ret = shell_clock_gettime(va_arg(ap, clockid_t), va_arg(ap, struct timespec *)); 125 break; 126 case SYS_clock_nanosleep: 127 no_implement("clock_nanosleep\n"); 128 break; 129 case SYS_clock_settime: 130 ret = shell_clock_settime(va_arg(ap, clockid_t), va_arg(ap, const struct timespec *)); 131 break; 132 case SYS_clone: 133 no_implement("clone\n"); 134 break; 135 case SYS_close: 136 ret = shell_close(va_arg(ap, int)); 137 break; 138 case SYS_connect: 139 ret = shell_connect(va_arg(ap, int), va_arg(ap, const struct sockaddr *), va_arg(ap, socklen_t)); 140 break; 141 case SYS_delete_module: 142 no_implement("delete_module\n"); 143 break; 144 case SYS_dup: 145 no_implement("dup\n"); 146 break; 147 case SYS_dup2: 148 no_implement("dup2\n"); 149 break; 150 case SYS_dup3: 151 no_implement("dup3\n"); 152 break; 153 case SYS_epoll_create: 154 no_implement("epoll_create\n"); 155 break; 156 case SYS_epoll_create1: 157 no_implement("epoll_create1\n"); 158 break; 159 case SYS_epoll_ctl: 160 no_implement("epoll_ctl\n"); 161 break; 162 case SYS_epoll_pwait: 163 no_implement("epoll_pwait\n"); 164 break; 165 case SYS_epoll_wait: 166 no_implement("epoll_wait\n"); 167 break; 168 case SYS_eventfd: 169 no_implement("eventfd\n"); 170 break; 171 case SYS_eventfd2: 172 no_implement("eventfd2\n"); 173 break; 174 case SYS_execve: 175 no_implement("execve\n"); 176 break; 177 case SYS_exit: 178 shell_exit(va_arg(ap, int)); 179 ret = 0; 180 break; 181 case SYS_exit_group: 182 shell_exit_group(va_arg(ap, int)); 183 ret = 0; 184 break; 185 case SYS_faccessat: 186 no_implement("faccessat\n"); 187 break; 188 case SYS_fadvise64_64: 189 no_implement("fadvise64_64\n"); 190 break; 191 case SYS_fallocate: 192 no_implement("fallocate\n"); 193 break; 194 case SYS_fanotify_init: 195 no_implement("fanotify_init\n"); 196 break; 197 case SYS_fanotify_mark: 198 no_implement("fanotify_mark\n"); 199 break; 200 case SYS_fchdir: 201 no_implement("fchdir\n"); 202 break; 203 case SYS_fchmod: 204 no_implement("fchmod\n"); 205 break; 206 case SYS_fchmodat: 207 no_implement("fchmodat\n"); 208 break; 209 case SYS_fchown32: 210 no_implement("fchown\n"); 211 break; 212 case SYS_fchownat: 213 no_implement("fchownat\n"); 214 break; 215 case SYS_fcntl64: 216 ret = shell_fcntl(va_arg(ap, int), va_arg(ap, int), va_arg(ap, void *)); 217 break; 218 case SYS_fdatasync: 219 no_implement("fdatasync\n"); 220 break; 221 case SYS_fgetxattr: 222 no_implement("fgetxattr\n"); 223 break; 224 case SYS_flistxattr: 225 no_implement("flistxattr\n"); 226 break; 227 case SYS_flock: 228 no_implement("flock\n"); 229 break; 230 case SYS_fork: 231 no_implement("fork\n"); 232 break; 233 case SYS_fremovexattr: 234 no_implement("fremovexattr\n"); 235 break; 236 case SYS_fsetxattr: 237 no_implement("fsetxattr\n"); 238 break; 239 case SYS_fstat64: 240 ret = shell_fstat(va_arg(ap, int), va_arg(ap, struct stat *)); 241 break; 242 case SYS_fstatat64: 243 no_implement("fstatat64\n"); 244 break; 245 case SYS_fstatfs: 246 no_implement("fstatfs\n"); 247 break; 248 case SYS_fstatfs64: 249 no_implement("fstatfs64\n"); 250 break; 251 case SYS_fsync: 252 ret = shell_fsync(va_arg(ap, int)); 253 break; 254 case SYS_ftruncate64: 255 ret = shell_ftruncate(va_arg(ap, int), va_arg(ap, off_t)); 256 break; 257 case SYS_futex: 258 no_implement("futex\n"); 259 break; 260 case SYS_futimesat: 261 no_implement("futimesat\n"); 262 break; 263 case SYS_getcpu: 264 no_implement("getcpu\n"); 265 break; 266 case SYS_getcwd: 267 ret = (long)shell_getcwd(va_arg(ap, char *), va_arg(ap, size_t)); 268 break; 269 case SYS_getdents64: 270 ret = shell_getdents(va_arg(ap, int), va_arg(ap, struct dirent *), va_arg(ap, size_t)); // TODO 271 break; 272 case SYS_getegid32: 273 no_implement("getegid\n"); 274 break; 275 case SYS_geteuid32: 276 no_implement("geteuid\n"); 277 break; 278 case SYS_getgid32: 279 no_implement("getgid\n"); 280 break; 281 case SYS_getgroups32: 282 no_implement("getgroups\n"); 283 break; 284 case SYS_getitimer: 285 no_implement("getitimer\n"); 286 break; 287 case SYS_getpeername: 288 ret = shell_getpeername(va_arg(ap, int), va_arg(ap, struct sockaddr *), va_arg(ap, socklen_t *)); 289 break; 290 case SYS_getsockname: 291 ret = shell_getsockname(va_arg(ap, int), va_arg(ap, struct sockaddr *), va_arg(ap, socklen_t *)); 292 break; 293 case SYS_getpgid: 294 no_implement("getpgid\n"); 295 break; 296 case SYS_getpid: 297 ret = shell_getpid(); 298 break; 299 case SYS_getppid: 300 no_implement("getppid\n"); 301 break; 302 case SYS_getpriority: 303 no_implement("getpriority\n"); 304 break; 305 case SYS_getresgid32: 306 no_implement("getresgid\n"); 307 break; 308 case SYS_getresuid32: 309 no_implement("getresuid\n"); 310 break; 311 #ifdef SYS_getrlimit 312 case SYS_getrlimit: 313 no_implement("getrlimit\n"); 314 break; 315 #endif 316 case SYS_getrusage: 317 no_implement("getrusage\n"); 318 break; 319 case SYS_getsid: 320 no_implement("getsid\n"); 321 break; 322 case SYS_getsockopt: 323 ret = shell_getsockopt(va_arg(ap, int), va_arg(ap, int), va_arg(ap, int), va_arg(ap, void *), va_arg(ap, socklen_t *)); 324 break; 325 case SYS_gettid: 326 ret = shell_gettid(); 327 break; 328 case SYS_gettimeofday: 329 ret = shell_gettimeofday(va_arg(ap, struct timeval *), va_arg(ap, void *)); 330 break; 331 case SYS_getuid32: 332 no_implement("getuid\n"); 333 break; 334 case SYS_getxattr: 335 no_implement("getxattr\n"); 336 break; 337 case SYS_init_module: 338 no_implement("init_module\n"); 339 break; 340 case SYS_inotify_add_watch: 341 no_implement("inotify_add_watch\n"); 342 break; 343 case SYS_inotify_init: 344 no_implement("inotify_init\n"); 345 break; 346 case SYS_inotify_init1: 347 no_implement("inotify_init1\n"); 348 break; 349 case SYS_inotify_rm_watch: 350 no_implement("inotify_rm_watch\n"); 351 break; 352 case SYS_ioctl: 353 ret = shell_ioctl(va_arg(ap, int), va_arg(ap, int), va_arg(ap, void *)); 354 break; 355 #ifdef SYS_ioperm 356 case SYS_ioperm: 357 no_implement("ioperm\n"); 358 break; 359 #endif 360 #ifdef SYS_iopl 361 case SYS_iopl: 362 no_implement("iopl\n"); 363 break; 364 #endif 365 #ifdef SYS_ipc 366 case SYS_ipc: 367 no_implement("ipc\n"); 368 break; 369 #endif 370 #ifdef SYS_ipc 371 case SYS_ipc: 372 no_implement("ipc\n"); 373 break; 374 #endif 375 case SYS_kill: 376 ret = shell_kill(va_arg(ap, int), va_arg(ap, int)); 377 break; 378 case SYS_lchown32: 379 no_implement("lchown\n"); 380 break; 381 case SYS_lgetxattr: 382 no_implement("lgetxattr\n"); 383 break; 384 case SYS_link: 385 ret = shell_link(va_arg(ap, const char *), va_arg(ap, const char *)); 386 break; 387 case SYS_linkat: 388 no_implement("linkat\n"); 389 break; 390 case SYS_listen: 391 ret = shell_listen(va_arg(ap, int), va_arg(ap, int)); 392 break; 393 case SYS_listxattr: 394 no_implement("listxattr\n"); 395 break; 396 case SYS_llistxattr: 397 no_implement("llistxattr\n"); 398 break; 399 case SYS_lremovexattr: 400 no_implement("lremovexattr\n"); 401 break; 402 case SYS_lsetxattr: 403 no_implement("lsetxattr\n"); 404 break; 405 case SYS_lstat64: 406 ret = shell_lstat(va_arg(ap, const char *__restrict), va_arg(ap, struct stat *__restrict)); 407 break; 408 case SYS_madvise: 409 ret = shell_madvise(va_arg(ap, void *), va_arg(ap, size_t), va_arg(ap, int)); // TODO 410 break; 411 case SYS_mincore: 412 no_implement("mincore\n"); 413 break; 414 case SYS_mkdir: 415 ret = shell_mkdir(va_arg(ap, const char *), va_arg(ap, mode_t)); 416 break; 417 case SYS_mkdirat: 418 no_implement("mkdirat\n"); 419 break; 420 case SYS_mknod: 421 no_implement("mknod\n"); 422 break; 423 case SYS_mknodat: 424 no_implement("mknodat\n"); 425 break; 426 case SYS_mlock: 427 no_implement("mlock\n"); 428 break; 429 case SYS_mlockall: 430 no_implement("mlockall\n"); 431 break; 432 case SYS_mmap2: 433 ret = (int)shell_mmap2(va_arg(ap, void *), va_arg(ap, size_t), va_arg(ap, int), va_arg(ap, int), va_arg(ap, int), va_arg(ap, off_t)); 434 break; 435 case SYS_mount: 436 no_implement("mount\n"); 437 break; 438 case SYS_mprotect: 439 return shell_mprotect(va_arg(ap, void *), va_arg(ap, size_t), va_arg(ap, int)); 440 break; 441 case SYS_mq_getsetattr: 442 no_implement("mq_getsetattr\n"); 443 break; 444 case SYS_mq_notify: 445 no_implement("mq_notify\n"); 446 break; 447 case SYS_mq_open: 448 no_implement("mq_open\n"); 449 break; 450 case SYS_mq_timedreceive: 451 no_implement("mq_timedreceive\n"); 452 break; 453 case SYS_mq_timedsend: 454 no_implement("mq_timedsend\n"); 455 break; 456 case SYS_mq_unlink: 457 no_implement("mq_unlink\n"); 458 break; 459 case SYS_mremap: 460 no_implement("mremap\n"); 461 break; 462 case SYS_msgctl: 463 no_implement("msgctl\n"); 464 break; 465 case SYS_msgget: 466 no_implement("msgget\n"); 467 break; 468 case SYS_msgrcv: 469 no_implement("msgrcv\n"); 470 break; 471 case SYS_msgsnd: 472 no_implement("msgsnd\n"); 473 break; 474 case SYS_msync: 475 no_implement("msync\n"); 476 break; 477 case SYS_munlock: 478 no_implement("munlock\n"); 479 break; 480 case SYS_munlockall: 481 no_implement("munlockall\n"); 482 break; 483 case SYS_munmap: 484 no_implement("munmap\n"); 485 break; 486 case SYS_nanosleep: 487 no_implement("nanosleep\n"); 488 break; 489 case SYS_nice: 490 no_implement("nice\n"); 491 break; 492 case SYS_open: 493 ret = shell_open(va_arg(ap, const char *), va_arg(ap, int), va_arg(ap, void *)); 494 break; 495 case SYS_openat: 496 no_implement("openat\n"); 497 break; 498 case SYS_pause: 499 no_implement("pause\n"); 500 break; 501 case SYS_personality: 502 no_implement("personality\n"); 503 break; 504 case SYS_pipe: 505 no_implement("pipe\n"); 506 break; 507 case SYS_pipe2: 508 no_implement("pipe2\n"); 509 break; 510 case SYS_pivot_root: 511 no_implement("pivot_root\n"); 512 break; 513 case SYS_poll: 514 ret = shell_poll(va_arg(ap, struct pollfd *), va_arg(ap, nfds_t), va_arg(ap, int)); 515 break; 516 case SYS_ppoll: 517 no_implement("ppoll\n"); 518 break; 519 case SYS_prctl: 520 no_implement("prctl\n"); 521 break; 522 case SYS_pread64: 523 no_implement("pread64\n"); 524 break; 525 case SYS_preadv: 526 no_implement("preadv\n"); 527 break; 528 case SYS_prlimit64: 529 no_implement("prlimit64\n"); 530 break; 531 case SYS_process_vm_readv: 532 no_implement("process_vm_readv\n"); 533 break; 534 case SYS_process_vm_writev: 535 no_implement("process_vm_writev\n"); 536 break; 537 case SYS_pselect6: 538 no_implement("pselect6\n"); 539 break; 540 case SYS_ptrace: 541 no_implement("ptrace\n"); 542 break; 543 case SYS_pwrite64: 544 no_implement("pwrite64\n"); 545 break; 546 case SYS_pwritev: 547 no_implement("pwritev\n"); 548 break; 549 case SYS_quotactl: 550 no_implement("quotactl\n"); 551 break; 552 case SYS_read: 553 ret = shell_read(va_arg(ap, int), va_arg(ap, void *), va_arg(ap, size_t)); 554 break; 555 case SYS_readahead: 556 no_implement("readahead\n"); 557 break; 558 case SYS_readlink: 559 no_implement("readlink\n"); 560 break; 561 case SYS_readlinkat: 562 no_implement("readlinkat\n"); 563 break; 564 case SYS_readv: 565 ret = shell_readv(va_arg(ap, int), va_arg(ap, const struct iovec *), va_arg(ap, int)); 566 break; 567 case SYS_recv: 568 ret = shell_recv(va_arg(ap, int), va_arg(ap, void *), va_arg(ap, size_t), va_arg(ap, int)); 569 break; 570 case SYS_recvfrom: 571 fd = va_arg(ap, int); 572 if (fd == 0) 573 ret = shell_recv(fd, va_arg(ap, void *), va_arg(ap, size_t), va_arg(ap, int)); 574 else 575 ret = shell_recvfrom(fd, va_arg(ap, void *), va_arg(ap, size_t), va_arg(ap, int), va_arg(ap, struct sockaddr *), va_arg(ap, socklen_t *)); 576 break; 577 case SYS_recvmsg: 578 ret = shell_recvmsg(va_arg(ap, int), va_arg(ap, struct msghdr *), va_arg(ap, size_t)); 579 break; 580 case SYS_reboot: 581 no_implement("reboot\n"); 582 break; 583 case SYS_recvmmsg: 584 no_implement("recvmmsg\n"); 585 break; 586 case SYS_remap_file_pages: 587 no_implement("remap_file_pages\n"); 588 break; 589 case SYS_removexattr: 590 no_implement("removexattr\n"); 591 break; 592 case SYS_rename: 593 ret = shell_rename(va_arg(ap, const char *), va_arg(ap, const char *)); 594 break; 595 case SYS_renameat: 596 no_implement("renameat\n"); 597 break; 598 case SYS_rmdir: 599 ret = shell_rmdir(va_arg(ap, const char *)); 600 break; 601 case SYS_rt_sigaction: 602 ret = shell_sigaction(va_arg(ap, int), va_arg(ap, const struct sigaction *), va_arg(ap, struct sigaction *)); 603 break; 604 case SYS_rt_sigpending: 605 no_implement("rt_sigpending\n"); 606 break; 607 case SYS_rt_sigprocmask: 608 ret = shell_sigprocmask(va_arg(ap, int), va_arg(ap, const sigset_t *), va_arg(ap, sigset_t *)); 609 break; 610 case SYS_rt_sigqueueinfo: 611 no_implement("rt_sigqueueinfo\n"); 612 break; 613 case SYS_rt_sigsuspend: 614 no_implement("rt_sigsuspend\n"); 615 break; 616 case SYS_rt_sigtimedwait: 617 no_implement("rt_sigtimedwait\n"); 618 break; 619 case SYS_send: 620 ret = shell_send(va_arg(ap, int), va_arg(ap, const void *), va_arg(ap, size_t), va_arg(ap, int)); 621 break; 622 case SYS_sendmsg: 623 ret = shell_sendmsg(va_arg(ap, int), va_arg(ap, const struct msghdr *), va_arg(ap, size_t)); 624 break; 625 case SYS_sendto: 626 fd = va_arg(ap, int); 627 if (fd == 0) 628 ret = shell_send(fd, va_arg(ap, const void *), va_arg(ap, size_t), va_arg(ap, int)); 629 else 630 ret = shell_sendto(fd, va_arg(ap, const void *), va_arg(ap, size_t), va_arg(ap, int), va_arg(ap, const struct sockaddr *), va_arg(ap, socklen_t)); 631 break; 632 case SYS_setsockopt: 633 ret = shell_setsockopt(va_arg(ap, int), va_arg(ap, int), va_arg(ap, int), va_arg(ap, const void *), va_arg(ap, socklen_t)); 634 break; 635 case SYS_shutdown: 636 ret = shell_shutdown(va_arg(ap, int), va_arg(ap, int)); 637 break; 638 case SYS_sched_get_priority_max: 639 no_implement("sched_get_priority_max\n"); 640 break; 641 case SYS_sched_get_priority_min: 642 no_implement("sched_get_priority_min\n"); 643 break; 644 case SYS_sched_getaffinity: 645 no_implement("sched_getaffinity\n"); 646 break; 647 case SYS_sched_getparam: 648 no_implement("sched_getparam\n"); 649 break; 650 case SYS_sched_getscheduler: 651 no_implement("sched_getscheduler\n"); 652 break; 653 case SYS_sched_rr_get_interval: 654 no_implement("sched_rr_get_interval\n"); 655 break; 656 case SYS_sched_setaffinity: 657 no_implement("sched_setaffinity\n"); 658 break; 659 case SYS_sched_setparam: 660 no_implement("sched_setparam\n"); 661 break; 662 case SYS_sched_setscheduler: 663 no_implement("sched_setscheduler\n"); 664 break; 665 case SYS_sched_yield: 666 no_implement("sched_yield\n"); 667 break; 668 case SYS_semctl: 669 no_implement("semctl\n"); 670 break; 671 case SYS_semget: 672 no_implement("semget\n"); 673 break; 674 case SYS_semop: 675 no_implement("semop\n"); 676 break; 677 case SYS_semtimedop: 678 no_implement("semtimedop\n"); 679 break; 680 case SYS_sendfile64: 681 no_implement("sendfile\n"); 682 break; 683 case SYS_sendmmsg: 684 no_implement("sendmmsg\n"); 685 break; 686 case SYS_set_robust_list: 687 no_implement("set_robust_list\n"); 688 break; 689 #ifdef SYS_set_thread_area 690 case SYS_set_thread_area: 691 thread_area = va_arg(ap, void *); 692 ret = 0; 693 break; 694 #endif 695 case SYS_set_tid_address: 696 tid_address = va_arg(ap, void *); 697 ret = 0; 698 break; 699 case SYS_setdomainname: 700 no_implement("setdomainname\n"); 701 break; 702 case SYS_setfsgid32: 703 no_implement("setfsgid\n"); 704 break; 705 case SYS_setfsuid32: 706 no_implement("setfsuid\n"); 707 break; 708 case SYS_setgroups32: 709 no_implement("setgroups\n"); 710 break; 711 case SYS_sethostname: 712 no_implement("sethostname\n"); 713 break; 714 case SYS_setitimer: 715 no_implement("setitimer\n"); 716 break; 717 case SYS_setns: 718 no_implement("setns\n"); 719 break; 720 case SYS_setpgid: 721 no_implement("setpgid\n"); 722 break; 723 case SYS_setpriority: 724 no_implement("setpriority\n"); 725 break; 726 case SYS_setrlimit: 727 no_implement("setrlimit\n"); 728 break; 729 case SYS_setsid: 730 no_implement("setsid\n"); 731 break; 732 case SYS_settimeofday: 733 no_implement("settimeofday\n"); 734 break; 735 case SYS_setxattr: 736 no_implement("setxattr\n"); 737 break; 738 case SYS_shmat: 739 no_implement("shmat\n"); 740 break; 741 case SYS_shmctl: 742 no_implement("shmctl\n"); 743 break; 744 case SYS_shmdt: 745 no_implement("shmdt\n"); 746 break; 747 case SYS_shmget: 748 no_implement("shmget\n"); 749 break; 750 case SYS_sigaltstack: 751 no_implement("sigaltstack\n"); 752 break; 753 case SYS_signalfd: 754 no_implement("signalfd\n"); 755 break; 756 case SYS_signalfd4: 757 no_implement("signalfd4\n"); 758 break; 759 case SYS_socket: 760 ret = shell_socket(va_arg(ap, int), va_arg(ap, int), va_arg(ap, int)); 761 break; 762 case SYS_splice: 763 no_implement("splice\n"); 764 break; 765 case SYS_stat64: 766 ret = shell_stat(va_arg(ap, const char *), va_arg(ap, struct stat *)); 767 break; 768 case SYS_statfs64: 769 no_implement("statfs64\n"); 770 break; 771 case SYS_swapoff: 772 no_implement("swapoff\n"); 773 break; 774 case SYS_swapon: 775 no_implement("swapon\n"); 776 break; 777 case SYS_symlink: 778 no_implement("symlink\n"); 779 break; 780 case SYS_symlinkat: 781 no_implement("symlinkat\n"); 782 break; 783 case SYS_sync: 784 no_implement("sync\n"); 785 break; 786 #ifdef SYS_sync_file_range 787 case SYS_sync_file_range: 788 no_implement("sync_file_range\n"); 789 break; 790 #endif 791 case SYS_sync_file_range2: 792 no_implement("sync_file_range2\n"); 793 break; 794 case SYS_syncfs: 795 no_implement("syncfs\n"); 796 break; 797 case SYS_sysinfo: 798 no_implement("sysinfo\n"); 799 break; 800 case SYS_syslog: 801 no_implement("syslog\n"); 802 break; 803 case SYS_tee: 804 no_implement("tee\n"); 805 break; 806 case SYS_tgkill: 807 no_implement("tgkill\n"); 808 break; 809 case SYS_timer_create: 810 no_implement("timer_create\n"); 811 break; 812 case SYS_timer_delete: 813 no_implement("timer_delete\n"); 814 break; 815 case SYS_timer_getoverrun: 816 no_implement("timer_getoverrun\n"); 817 break; 818 case SYS_timer_gettime: 819 no_implement("timer_gettime\n"); 820 break; 821 case SYS_timer_settime: 822 no_implement("timer_settime\n"); 823 break; 824 case SYS_timerfd_create: 825 no_implement("timerfd_create\n"); 826 break; 827 case SYS_timerfd_gettime: 828 no_implement("timerfd_gettime\n"); 829 break; 830 case SYS_timerfd_settime: 831 no_implement("timerfd_settime\n"); 832 break; 833 case SYS_times: 834 no_implement("times\n"); 835 break; 836 case SYS_tkill: 837 ret = shell_tkill(va_arg(ap, int), va_arg(ap, int)); 838 break; 839 case SYS_truncate64: 840 no_implement("truncate\n"); 841 break; 842 case SYS_ugetrlimit: 843 no_implement("ugetrlimit\n"); 844 break; 845 case SYS_umask: 846 no_implement("umask\n"); 847 break; 848 case SYS_umount2: 849 no_implement("umount2\n"); 850 break; 851 case SYS_uname: 852 ret = shell_uname(va_arg(ap, struct utsname *)); 853 break; 854 case SYS_unlink: 855 ret = shell_unlink(va_arg(ap, const char *)); 856 break; 857 case SYS_unlinkat: 858 no_implement("unlinkat\n"); 859 break; 860 case SYS_unshare: 861 no_implement("unshare\n"); 862 break; 863 case SYS_utimensat: 864 no_implement("utimensat\n"); 865 break; 866 case SYS_utimes: 867 no_implement("utimes\n"); 868 break; 869 case SYS_vhangup: 870 no_implement("vhangup\n"); 871 break; 872 case SYS_vmsplice: 873 no_implement("vmsplice\n"); 874 break; 875 case SYS_wait4: 876 no_implement("wait4\n"); 877 break; 878 case SYS_waitid: 879 no_implement("waitid\n"); 880 break; 881 case SYS_write: 882 ret = shell_write(va_arg(ap, int), va_arg(ap, const void *), va_arg(ap, size_t)); 883 break; 884 case SYS_writev: 885 ret = shell_writev(va_arg(ap, int), va_arg(ap, const struct iovec *), va_arg(ap, size_t)); 886 break; 887 default: 888 DebugBreak(); 889 } 890 891 va_end(ap); 892 893 shellif_outof(); 894 895 return ret; 896 } 354 355 long SYS_set_tid_address(long a) { 356 tid_address = (void *)a; 357 return 0; 358 } 359 360 long SYS_socket(long a, long b, long c) { 361 return shell_socket((int)a, (int)b, (int)c); 362 } 363 364 long SYS_stat64(long a, long b) { 365 return shell_stat((const char *)a, (struct stat *)b); 366 } 367 368 long SYS_tkill(long a, long b) { 369 return shell_tkill((int)a, (int)b); 370 } 371 372 long SYS_uname(long a) { 373 return shell_uname((struct utsname *)a); 374 } 375 376 long SYS_unlink(long a) { 377 return shell_unlink((const char *)a); 378 } 379 380 long SYS_utimensat() { 381 return no_implement("utimensat\n"); 382 } 383 384 long SYS_utimes() { 385 return no_implement("utimes\n"); 386 } 387 388 long SYS_write(long a, long b, long c) { 389 return shell_write((int)a, (const void *)b, (size_t)c); 390 } 391 392 long SYS_writev(long a, long b, long c) { 393 return shell_writev((int)a, (const struct iovec *)b, (size_t)c); 394 }
Note:
See TracChangeset
for help on using the changeset viewer.