vendor/golang.org/x/sys/unix/syscall_darwin.go
changeset 251 1c52a0eeb952
parent 242 2a9ec03fe5a1
child 256 6d9efbef00a9
equal deleted inserted replaced
250:c040f992052f 251:1c52a0eeb952
    75 		return nil, err
    75 		return nil, err
    76 	}
    76 	}
    77 	return buf[0 : n/siz], nil
    77 	return buf[0 : n/siz], nil
    78 }
    78 }
    79 
    79 
    80 //sys   ptrace(request int, pid int, addr uintptr, data uintptr) (err error)
    80 func direntIno(buf []byte) (uint64, bool) {
       
    81 	return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
       
    82 }
       
    83 
       
    84 func direntReclen(buf []byte) (uint64, bool) {
       
    85 	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
       
    86 }
       
    87 
       
    88 func direntNamlen(buf []byte) (uint64, bool) {
       
    89 	return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))
       
    90 }
       
    91 
    81 func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }
    92 func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }
    82 func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }
    93 func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }
    83 
    94 
    84 const (
    95 const (
    85 	attrBitMapCount = 5
    96 	attrBitMapCount = 5
   106 	_p0, err = BytePtrFromString(path)
   117 	_p0, err = BytePtrFromString(path)
   107 	if err != nil {
   118 	if err != nil {
   108 		return nil, err
   119 		return nil, err
   109 	}
   120 	}
   110 
   121 
   111 	_, _, e1 := Syscall6(
   122 	if err := getattrlist(_p0, unsafe.Pointer(&attrList), unsafe.Pointer(&attrBuf[0]), uintptr(len(attrBuf)), int(options)); err != nil {
   112 		SYS_GETATTRLIST,
   123 		return nil, err
   113 		uintptr(unsafe.Pointer(_p0)),
       
   114 		uintptr(unsafe.Pointer(&attrList)),
       
   115 		uintptr(unsafe.Pointer(&attrBuf[0])),
       
   116 		uintptr(len(attrBuf)),
       
   117 		uintptr(options),
       
   118 		0,
       
   119 	)
       
   120 	if e1 != 0 {
       
   121 		return nil, e1
       
   122 	}
   124 	}
   123 	size := *(*uint32)(unsafe.Pointer(&attrBuf[0]))
   125 	size := *(*uint32)(unsafe.Pointer(&attrBuf[0]))
   124 
   126 
   125 	// dat is the section of attrBuf that contains valid data,
   127 	// dat is the section of attrBuf that contains valid data,
   126 	// without the 4 byte length header. All attribute offsets
   128 	// without the 4 byte length header. All attribute offsets
   149 		}
   151 		}
   150 	}
   152 	}
   151 	return
   153 	return
   152 }
   154 }
   153 
   155 
       
   156 //sys getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error)
       
   157 
   154 //sysnb pipe() (r int, w int, err error)
   158 //sysnb pipe() (r int, w int, err error)
   155 
   159 
   156 func Pipe(p []int) (err error) {
   160 func Pipe(p []int) (err error) {
   157 	if len(p) != 2 {
   161 	if len(p) != 2 {
   158 		return EINVAL
   162 		return EINVAL
   166 	var bufsize uintptr
   170 	var bufsize uintptr
   167 	if len(buf) > 0 {
   171 	if len(buf) > 0 {
   168 		_p0 = unsafe.Pointer(&buf[0])
   172 		_p0 = unsafe.Pointer(&buf[0])
   169 		bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
   173 		bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
   170 	}
   174 	}
   171 	r0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(_p0), bufsize, uintptr(flags))
   175 	return getfsstat(_p0, bufsize, flags)
   172 	n = int(r0)
       
   173 	if e1 != 0 {
       
   174 		err = e1
       
   175 	}
       
   176 	return
       
   177 }
   176 }
   178 
   177 
   179 func xattrPointer(dest []byte) *byte {
   178 func xattrPointer(dest []byte) *byte {
   180 	// It's only when dest is set to NULL that the OS X implementations of
   179 	// It's only when dest is set to NULL that the OS X implementations of
   181 	// getxattr() and listxattr() return the current sizes of the named attributes.
   180 	// getxattr() and listxattr() return the current sizes of the named attributes.
   296 	attributes := [2]Timespec{times[1], times[0]}
   295 	attributes := [2]Timespec{times[1], times[0]}
   297 	options := 0
   296 	options := 0
   298 	if flags&AT_SYMLINK_NOFOLLOW != 0 {
   297 	if flags&AT_SYMLINK_NOFOLLOW != 0 {
   299 		options |= FSOPT_NOFOLLOW
   298 		options |= FSOPT_NOFOLLOW
   300 	}
   299 	}
   301 	_, _, e1 := Syscall6(
   300 	return setattrlist(
   302 		SYS_SETATTRLIST,
   301 		_p0,
   303 		uintptr(unsafe.Pointer(_p0)),
   302 		unsafe.Pointer(&attrList),
   304 		uintptr(unsafe.Pointer(&attrList)),
   303 		unsafe.Pointer(&attributes),
   305 		uintptr(unsafe.Pointer(&attributes)),
   304 		unsafe.Sizeof(attributes),
   306 		uintptr(unsafe.Sizeof(attributes)),
   305 		options)
   307 		uintptr(options),
   306 }
   308 		0,
   307 
   309 	)
   308 //sys setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error)
   310 	if e1 != 0 {
       
   311 		return e1
       
   312 	}
       
   313 	return nil
       
   314 }
       
   315 
   309 
   316 func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error {
   310 func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error {
   317 	// Darwin doesn't support SYS_UTIMENSAT
   311 	// Darwin doesn't support SYS_UTIMENSAT
   318 	return ENOSYS
   312 	return ENOSYS
   319 }
   313 }
   320 
   314 
   321 /*
   315 /*
   322  * Wrapped
   316  * Wrapped
   323  */
   317  */
   324 
   318 
       
   319 //sys	fcntl(fd int, cmd int, arg int) (val int, err error)
       
   320 
   325 //sys	kill(pid int, signum int, posix int) (err error)
   321 //sys	kill(pid int, signum int, posix int) (err error)
   326 
   322 
   327 func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) }
   323 func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) }
   328 
   324 
   329 //sys	ioctl(fd int, req uint, arg uintptr) (err error)
   325 //sys	ioctl(fd int, req uint, arg uintptr) (err error)
   330 
   326 
   331 // ioctl itself should not be exposed directly, but additional get/set
   327 //sys   sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL
   332 // functions for specific types are permissible.
       
   333 
       
   334 // IoctlSetInt performs an ioctl operation which sets an integer value
       
   335 // on fd, using the specified request number.
       
   336 func IoctlSetInt(fd int, req uint, value int) error {
       
   337 	return ioctl(fd, req, uintptr(value))
       
   338 }
       
   339 
       
   340 func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
       
   341 	return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
       
   342 }
       
   343 
       
   344 func ioctlSetTermios(fd int, req uint, value *Termios) error {
       
   345 	return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
       
   346 }
       
   347 
       
   348 // IoctlGetInt performs an ioctl operation which gets an integer value
       
   349 // from fd, using the specified request number.
       
   350 func IoctlGetInt(fd int, req uint) (int, error) {
       
   351 	var value int
       
   352 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
       
   353 	return value, err
       
   354 }
       
   355 
       
   356 func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
       
   357 	var value Winsize
       
   358 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
       
   359 	return &value, err
       
   360 }
       
   361 
       
   362 func IoctlGetTermios(fd int, req uint) (*Termios, error) {
       
   363 	var value Termios
       
   364 	err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
       
   365 	return &value, err
       
   366 }
       
   367 
   328 
   368 func Uname(uname *Utsname) error {
   329 func Uname(uname *Utsname) error {
   369 	mib := []_C_int{CTL_KERN, KERN_OSTYPE}
   330 	mib := []_C_int{CTL_KERN, KERN_OSTYPE}
   370 	n := unsafe.Sizeof(uname.Sysname)
   331 	n := unsafe.Sizeof(uname.Sysname)
   371 	if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
   332 	if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
   409 	}
   370 	}
   410 
   371 
   411 	return nil
   372 	return nil
   412 }
   373 }
   413 
   374 
       
   375 func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
       
   376 	if raceenabled {
       
   377 		raceReleaseMerge(unsafe.Pointer(&ioSync))
       
   378 	}
       
   379 	var length = int64(count)
       
   380 	err = sendfile(infd, outfd, *offset, &length, nil, 0)
       
   381 	written = int(length)
       
   382 	return
       
   383 }
       
   384 
       
   385 //sys	sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)
       
   386 
   414 /*
   387 /*
   415  * Exposed directly
   388  * Exposed directly
   416  */
   389  */
   417 //sys	Access(path string, mode uint32) (err error)
   390 //sys	Access(path string, mode uint32) (err error)
   418 //sys	Adjtime(delta *Timeval, olddelta *Timeval) (err error)
   391 //sys	Adjtime(delta *Timeval, olddelta *Timeval) (err error)
   419 //sys	Chdir(path string) (err error)
   392 //sys	Chdir(path string) (err error)
   420 //sys	Chflags(path string, flags int) (err error)
   393 //sys	Chflags(path string, flags int) (err error)
   421 //sys	Chmod(path string, mode uint32) (err error)
   394 //sys	Chmod(path string, mode uint32) (err error)
   422 //sys	Chown(path string, uid int, gid int) (err error)
   395 //sys	Chown(path string, uid int, gid int) (err error)
   423 //sys	Chroot(path string) (err error)
   396 //sys	Chroot(path string) (err error)
       
   397 //sys	ClockGettime(clockid int32, time *Timespec) (err error)
   424 //sys	Close(fd int) (err error)
   398 //sys	Close(fd int) (err error)
   425 //sys	Dup(fd int) (nfd int, err error)
   399 //sys	Dup(fd int) (nfd int, err error)
   426 //sys	Dup2(from int, to int) (err error)
   400 //sys	Dup2(from int, to int) (err error)
   427 //sys	Exchangedata(path1 string, path2 string, options int) (err error)
   401 //sys	Exchangedata(path1 string, path2 string, options int) (err error)
   428 //sys	Exit(code int)
   402 //sys	Exit(code int)
   433 //sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
   407 //sys	Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
   434 //sys	Fchown(fd int, uid int, gid int) (err error)
   408 //sys	Fchown(fd int, uid int, gid int) (err error)
   435 //sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
   409 //sys	Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
   436 //sys	Flock(fd int, how int) (err error)
   410 //sys	Flock(fd int, how int) (err error)
   437 //sys	Fpathconf(fd int, name int) (val int, err error)
   411 //sys	Fpathconf(fd int, name int) (val int, err error)
   438 //sys	Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
       
   439 //sys	Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
       
   440 //sys	Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
       
   441 //sys	Fsync(fd int) (err error)
   412 //sys	Fsync(fd int) (err error)
   442 //sys	Ftruncate(fd int, length int64) (err error)
   413 //sys	Ftruncate(fd int, length int64) (err error)
   443 //sys	Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64
       
   444 //sys	Getdtablesize() (size int)
   414 //sys	Getdtablesize() (size int)
   445 //sysnb	Getegid() (egid int)
   415 //sysnb	Getegid() (egid int)
   446 //sysnb	Geteuid() (uid int)
   416 //sysnb	Geteuid() (uid int)
   447 //sysnb	Getgid() (gid int)
   417 //sysnb	Getgid() (gid int)
   448 //sysnb	Getpgid(pid int) (pgid int, err error)
   418 //sysnb	Getpgid(pid int) (pgid int, err error)
   458 //sys	Kqueue() (fd int, err error)
   428 //sys	Kqueue() (fd int, err error)
   459 //sys	Lchown(path string, uid int, gid int) (err error)
   429 //sys	Lchown(path string, uid int, gid int) (err error)
   460 //sys	Link(path string, link string) (err error)
   430 //sys	Link(path string, link string) (err error)
   461 //sys	Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
   431 //sys	Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
   462 //sys	Listen(s int, backlog int) (err error)
   432 //sys	Listen(s int, backlog int) (err error)
   463 //sys	Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
       
   464 //sys	Mkdir(path string, mode uint32) (err error)
   433 //sys	Mkdir(path string, mode uint32) (err error)
   465 //sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
   434 //sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
   466 //sys	Mkfifo(path string, mode uint32) (err error)
   435 //sys	Mkfifo(path string, mode uint32) (err error)
   467 //sys	Mknod(path string, mode uint32, dev int) (err error)
   436 //sys	Mknod(path string, mode uint32, dev int) (err error)
   468 //sys	Open(path string, mode int, perm uint32) (fd int, err error)
   437 //sys	Open(path string, mode int, perm uint32) (fd int, err error)
   476 //sys	Rename(from string, to string) (err error)
   445 //sys	Rename(from string, to string) (err error)
   477 //sys	Renameat(fromfd int, from string, tofd int, to string) (err error)
   446 //sys	Renameat(fromfd int, from string, tofd int, to string) (err error)
   478 //sys	Revoke(path string) (err error)
   447 //sys	Revoke(path string) (err error)
   479 //sys	Rmdir(path string) (err error)
   448 //sys	Rmdir(path string) (err error)
   480 //sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
   449 //sys	Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
   481 //sys	Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
   450 //sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
   482 //sys	Setegid(egid int) (err error)
   451 //sys	Setegid(egid int) (err error)
   483 //sysnb	Seteuid(euid int) (err error)
   452 //sysnb	Seteuid(euid int) (err error)
   484 //sysnb	Setgid(gid int) (err error)
   453 //sysnb	Setgid(gid int) (err error)
   485 //sys	Setlogin(name string) (err error)
   454 //sys	Setlogin(name string) (err error)
   486 //sysnb	Setpgid(pid int, pgid int) (err error)
   455 //sysnb	Setpgid(pid int, pgid int) (err error)
   490 //sysnb	Setreuid(ruid int, euid int) (err error)
   459 //sysnb	Setreuid(ruid int, euid int) (err error)
   491 //sysnb	Setrlimit(which int, lim *Rlimit) (err error)
   460 //sysnb	Setrlimit(which int, lim *Rlimit) (err error)
   492 //sysnb	Setsid() (pid int, err error)
   461 //sysnb	Setsid() (pid int, err error)
   493 //sysnb	Settimeofday(tp *Timeval) (err error)
   462 //sysnb	Settimeofday(tp *Timeval) (err error)
   494 //sysnb	Setuid(uid int) (err error)
   463 //sysnb	Setuid(uid int) (err error)
   495 //sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
       
   496 //sys	Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
       
   497 //sys	Symlink(path string, link string) (err error)
   464 //sys	Symlink(path string, link string) (err error)
   498 //sys	Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
   465 //sys	Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
   499 //sys	Sync() (err error)
   466 //sys	Sync() (err error)
   500 //sys	Truncate(path string, length int64) (err error)
   467 //sys	Truncate(path string, length int64) (err error)
   501 //sys	Umask(newmask int) (oldmask int)
   468 //sys	Umask(newmask int) (oldmask int)