summaryrefslogtreecommitdiff
path: root/src/pkg/syscall/syscall_darwin.go
diff options
context:
space:
mode:
authorOndřej Surý <ondrej@sury.org>2011-04-26 09:55:32 +0200
committerOndřej Surý <ondrej@sury.org>2011-04-26 09:55:32 +0200
commit7b15ed9ef455b6b66c6b376898a88aef5d6a9970 (patch)
tree3ef530baa80cdf29436ba981f5783be6b4d2202b /src/pkg/syscall/syscall_darwin.go
parent50104cc32a498f7517a51c8dc93106c51c7a54b4 (diff)
downloadgolang-7b15ed9ef455b6b66c6b376898a88aef5d6a9970.tar.gz
Imported Upstream version 2011.04.13upstream/2011.04.13
Diffstat (limited to 'src/pkg/syscall/syscall_darwin.go')
-rw-r--r--src/pkg/syscall/syscall_darwin.go76
1 files changed, 53 insertions, 23 deletions
diff --git a/src/pkg/syscall/syscall_darwin.go b/src/pkg/syscall/syscall_darwin.go
index 552c9c154..30b57cf55 100644
--- a/src/pkg/syscall/syscall_darwin.go
+++ b/src/pkg/syscall/syscall_darwin.go
@@ -12,6 +12,8 @@
package syscall
+import "unsafe"
+
const OS = "darwin"
type SockaddrDatalink struct {
@@ -26,6 +28,34 @@ type SockaddrDatalink struct {
raw RawSockaddrDatalink
}
+// ParseDirent parses up to max directory entries in buf,
+// appending the names to names. It returns the number
+// bytes consumed from buf, the number of entries added
+// to names, and the new names slice.
+func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {
+ origlen := len(buf)
+ for max != 0 && len(buf) > 0 {
+ dirent := (*Dirent)(unsafe.Pointer(&buf[0]))
+ if dirent.Reclen == 0 {
+ buf = nil
+ break
+ }
+ buf = buf[dirent.Reclen:]
+ if dirent.Ino == 0 { // File absent in directory.
+ continue
+ }
+ bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0]))
+ var name = string(bytes[0:dirent.Namlen])
+ if name == "." || name == ".." { // Useless names
+ continue
+ }
+ max--
+ count++
+ names = append(names, name)
+ }
+ return origlen - len(buf), count, names
+}
+
/*
* Wrapped
*/
@@ -45,8 +75,8 @@ func Kill(pid int, signum int) (errno int) { return kill(pid, signum, 1) }
//sys Chown(path string, uid int, gid int) (errno int)
//sys Chroot(path string) (errno int)
//sys Close(fd int) (errno int)
-//sys Dup(fd int) (nfd int, errno int)
-//sys Dup2(from int, to int) (errno int)
+//sysnb Dup(fd int) (nfd int, errno int)
+//sysnb Dup2(from int, to int) (errno int)
//sys Exchangedata(path1 string, path2 string, options int) (errno int)
//sys Exit(code int)
//sys Fchdir(fd int) (errno int)
@@ -61,20 +91,20 @@ func Kill(pid int, signum int) (errno int) { return kill(pid, signum, 1) }
//sys Ftruncate(fd int, length int64) (errno int)
//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, errno int) = SYS_GETDIRENTRIES64
//sys Getdtablesize() (size int)
-//sys Getegid() (egid int)
-//sys Geteuid() (uid int)
+//sysnb Getegid() (egid int)
+//sysnb Geteuid() (uid int)
//sys Getfsstat(buf []Statfs_t, flags int) (n int, errno int) = SYS_GETFSSTAT64
-//sys Getgid() (gid int)
-//sys Getpgid(pid int) (pgid int, errno int)
-//sys Getpgrp() (pgrp int)
-//sys Getpid() (pid int)
-//sys Getppid() (ppid int)
+//sysnb Getgid() (gid int)
+//sysnb Getpgid(pid int) (pgid int, errno int)
+//sysnb Getpgrp() (pgrp int)
+//sysnb Getpid() (pid int)
+//sysnb Getppid() (ppid int)
//sys Getpriority(which int, who int) (prio int, errno int)
-//sys Getrlimit(which int, lim *Rlimit) (errno int)
-//sys Getrusage(who int, rusage *Rusage) (errno int)
-//sys Getsid(pid int) (sid int, errno int)
-//sys Getuid() (uid int)
-//sys Issetugid() (tainted bool)
+//sysnb Getrlimit(which int, lim *Rlimit) (errno int)
+//sysnb Getrusage(who int, rusage *Rusage) (errno int)
+//sysnb Getsid(pid int) (sid int, errno int)
+//sysnb Getuid() (uid int)
+//sysnb Issetugid() (tainted bool)
//sys Kqueue() (fd int, errno int)
//sys Lchown(path string, uid int, gid int) (errno int)
//sys Link(path string, link string) (errno int)
@@ -95,18 +125,18 @@ func Kill(pid int, signum int) (errno int) { return kill(pid, signum, 1) }
//sys Seek(fd int, offset int64, whence int) (newoffset int64, errno int) = SYS_LSEEK
//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (errno int)
//sys Setegid(egid int) (errno int)
-//sys Seteuid(euid int) (errno int)
-//sys Setgid(gid int) (errno int)
+//sysnb Seteuid(euid int) (errno int)
+//sysnb Setgid(gid int) (errno int)
//sys Setlogin(name string) (errno int)
-//sys Setpgid(pid int, pgid int) (errno int)
+//sysnb Setpgid(pid int, pgid int) (errno int)
//sys Setpriority(which int, who int, prio int) (errno int)
//sys Setprivexec(flag int) (errno int)
-//sys Setregid(rgid int, egid int) (errno int)
-//sys Setreuid(ruid int, euid int) (errno int)
-//sys Setrlimit(which int, lim *Rlimit) (errno int)
-//sys Setsid() (pid int, errno int)
-//sys Settimeofday(tp *Timeval) (errno int)
-//sys Setuid(uid int) (errno int)
+//sysnb Setregid(rgid int, egid int) (errno int)
+//sysnb Setreuid(ruid int, euid int) (errno int)
+//sysnb Setrlimit(which int, lim *Rlimit) (errno int)
+//sysnb Setsid() (pid int, errno int)
+//sysnb Settimeofday(tp *Timeval) (errno int)
+//sysnb Setuid(uid int) (errno int)
//sys Stat(path string, stat *Stat_t) (errno int) = SYS_STAT64
//sys Statfs(path string, stat *Statfs_t) (errno int) = SYS_STATFS64
//sys Symlink(path string, link string) (errno int)