OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [os/] [dir_unix.go] - Rev 867

Go to most recent revision | Compare with Previous | Blame | View Log

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build darwin freebsd linux netbsd openbsd

package os

import (
        "io"
        "syscall"
)

const (
        blockSize = 4096
)

func (f *File) readdirnames(n int) (names []string, err error) {
        // If this file has no dirinfo, create one.
        if f.dirinfo == nil {
                f.dirinfo = new(dirInfo)
                // The buffer must be at least a block long.
                f.dirinfo.buf = make([]byte, blockSize)
        }
        d := f.dirinfo

        size := n
        if size <= 0 {
                size = 100
                n = -1
        }

        names = make([]string, 0, size) // Empty with room to grow.
        for n != 0 {
                // Refill the buffer if necessary
                if d.bufp >= d.nbuf {
                        d.bufp = 0
                        var errno error
                        d.nbuf, errno = syscall.ReadDirent(f.fd, d.buf)
                        if errno != nil {
                                return names, NewSyscallError("readdirent", errno)
                        }
                        if d.nbuf <= 0 {
                                break // EOF
                        }
                }

                // Drain the buffer
                var nb, nc int
                nb, nc, names = syscall.ParseDirent(d.buf[d.bufp:d.nbuf], n, names)
                d.bufp += nb
                n -= nc
        }
        if n >= 0 && len(names) == 0 {
                return names, io.EOF
        }
        return names, nil
}

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.