diff options
| author | Charles Forsyth <charles.forsyth@gmail.com> | 2015-04-28 12:50:32 +0100 |
|---|---|---|
| committer | Charles Forsyth <charles.forsyth@gmail.com> | 2015-04-28 12:50:32 +0100 |
| commit | 95e7767e5b06c4582d7f542cedef2cb626ab69ab (patch) | |
| tree | 91a2073b3cb09448d8f6f90d04421ebdcc38ac50 /appl | |
| parent | 4cec8170d67d1ae0bc2a5a9e246e8c6ba7eed314 (diff) | |
return command error status; adjust style
Diffstat (limited to 'appl')
| -rw-r--r-- | appl/cmd/ls.b | 60 |
1 files changed, 30 insertions, 30 deletions
diff --git a/appl/cmd/ls.b b/appl/cmd/ls.b index 616580fc..ceb98f94 100644 --- a/appl/cmd/ls.b +++ b/appl/cmd/ls.b @@ -47,8 +47,8 @@ sortby: int; out: ref Bufio->Iobuf; stderr: ref FD; -dwIndex: int; -dwQueue: array of Dir; +delaydir: array of ref Dir; +delayindex: int; badmodule(p: string) { @@ -139,65 +139,65 @@ init(nil: ref Context, argv: list of string) popt++; } + errs := 0; for(; argv != nil; argv = tl argv) - ls(hd argv); - delayWrite(); + errs |= !ls(hd argv); + delaywrite(); out.flush(); + if(errs != 0) + raise "fail:errors"; } -ls(file: string) +ls(file: string): int { dir: Dir; ok: int; (ok, dir) = sys->stat(file); if(ok == -1) { - sys->fprint(stderr, "ls: stat %s: %r\n", file); - return; + sys->fprint(stderr, "ls: %s: %r\n", file); + return 0; } if(dopt || (dir.mode & Sys->DMDIR) == 0) { # delay write: save it in the queue to sort by sortby - if(dwIndex == 0) - dwQueue = array[30] of Dir; - else if(len dwQueue == dwIndex) { - # expand dwQueue - tmp := array[2 * dwIndex] of Dir; - tmp[0:] = dwQueue; - dwQueue = tmp; + if(delayindex == 0) + delaydir = array[30] of ref Dir; + else if(len delaydir == delayindex) { + tmp := array[2 * delayindex] of ref Dir; + tmp[0:] = delaydir; + delaydir = tmp; } (dirname, filename) := str->splitstrr(file, "/"); if(dirname != "") { dir.name = dirname + filename; dir.dev |= PREFIX; } - dwQueue[dwIndex++] = dir; - return; + delaydir[delayindex++] = ref dir; + return 1; } - delayWrite(); + delaywrite(); (d, n) := readdir->init(file, sortby); - if( n < 0) - sys->fprint(stderr, "ls: Readdir: %s: %r\n", file); - else - lsprint(file, d[0:n]); + if(n < 0){ + sys->fprint(stderr, "ls: %s: %r\n", file); + return 0; + } + lsprint(file, d[0:n]); + return 1; } -delayWrite() +delaywrite() { - if(dwIndex == 0) + if(delayindex == 0) return; - a := array[dwIndex] of ref Dir; - for (i := 0; i < dwIndex; i++) - a[i] = ref dwQueue[i]; - (b, n) := readdir->sortdir(a, sortby); + (b, n) := readdir->sortdir(delaydir[0:delayindex], sortby); lsprint("", b[0:n]); - # reset dwIndex - dwIndex = 0; - dwQueue = nil; + delayindex = 0; + delaydir = nil; } Widths: adt { |
