mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-29 14:00:29 +00:00
Make improvements
- Expand redbean UNIX module - Expand redbean documentation - Ensure Lua copyright is embedded in binary - Increase the PATH_MAX limit especially on NT - Use column major sorting for linenoise completions - Fix some suboptimalities in redbean's new UNIX API - Figured out right flags for Multics newline in raw mode
This commit is contained in:
parent
cf3174dc74
commit
2046c0d2ae
305 changed files with 6602 additions and 4221 deletions
|
@ -2,15 +2,20 @@
|
|||
-- and pipe its output to the http user
|
||||
local unix = require "unix"
|
||||
function main()
|
||||
if GetHostOs() == 'WINDOWS' then
|
||||
cmd = 'dir'
|
||||
else
|
||||
cmd = 'ls'
|
||||
end
|
||||
syscall = 'commandv'
|
||||
ls, errno = unix.commandv("ls")
|
||||
ls, errno = unix.commandv(cmd)
|
||||
if ls then
|
||||
syscall = 'pipe'
|
||||
reader, writer, errno = unix.pipe()
|
||||
if reader then
|
||||
oldint = unix.sigaction(unix.SIGINT, unix.SIG_IGN)
|
||||
oldquit = unix.sigaction(unix.SIGQUIT, unix.SIG_IGN)
|
||||
oldmask = unix.sigprocmask(unix.SIG_BLOCK, unix.SIGCHLD)
|
||||
-- oldint = unix.sigaction(unix.SIGINT, unix.SIG_IGN)
|
||||
-- oldquit = unix.sigaction(unix.SIGQUIT, unix.SIG_IGN)
|
||||
-- oldmask = unix.sigprocmask(unix.SIG_BLOCK, unix.SIGCHLD)
|
||||
syscall = 'fork'
|
||||
child, errno = unix.fork()
|
||||
if child then
|
||||
|
@ -19,10 +24,10 @@ function main()
|
|||
unix.dup(writer)
|
||||
unix.close(writer)
|
||||
unix.close(reader)
|
||||
unix.sigaction(unix.SIGINT, oldint)
|
||||
unix.sigaction(unix.SIGQUIT, oldquit)
|
||||
unix.sigprocmask(unix.SIG_SETMASK, oldmask)
|
||||
unix.execve(ls, {ls, "-Shal"})
|
||||
-- unix.sigaction(unix.SIGINT, oldint)
|
||||
-- unix.sigaction(unix.SIGQUIT, oldquit)
|
||||
-- unix.sigprocmask(unix.SIG_SETMASK, oldmask)
|
||||
unix.execve(ls, {ls, '-Shal'})
|
||||
unix.exit(127)
|
||||
else
|
||||
unix.close(writer)
|
||||
|
@ -31,21 +36,21 @@ function main()
|
|||
while true do
|
||||
data, errno = unix.read(reader)
|
||||
if data then
|
||||
if data ~= "" then
|
||||
if data ~= '' then
|
||||
Write(data)
|
||||
else
|
||||
break
|
||||
end
|
||||
elseif errno ~= unix.EINTR then
|
||||
Log(kLogWarn, string.format('read() failed: %s', unix.strerror(errno)))
|
||||
Log(kLogWarn, 'read() failed: %s' % {unix.strerror(errno)})
|
||||
break
|
||||
end
|
||||
end
|
||||
unix.close(reader)
|
||||
unix.wait(-1)
|
||||
unix.sigaction(unix.SIGINT, oldint)
|
||||
unix.sigaction(unix.SIGQUIT, oldquit)
|
||||
unix.sigprocmask(unix.SIG_SETMASK, oldmask)
|
||||
-- unix.sigaction(unix.SIGINT, oldint)
|
||||
-- unix.sigaction(unix.SIGQUIT, oldquit)
|
||||
-- unix.sigprocmask(unix.SIG_SETMASK, oldmask)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
@ -53,6 +58,6 @@ function main()
|
|||
end
|
||||
SetStatus(200)
|
||||
SetHeader('Content-Type', 'text/plain')
|
||||
Write(string.format('error %s calling %s()', unix.strerrno(errno), syscall))
|
||||
Write('error %s calling %s()' % {unix.strerrno(errno), syscall})
|
||||
end
|
||||
main()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue