Fix some example code

This commit is contained in:
Justine Tunney 2022-04-29 08:19:09 -07:00
parent e4b559c76a
commit a85406da4c
2 changed files with 127 additions and 124 deletions

View file

@ -22,20 +22,20 @@ unix.umask(mask)
Write('<dd>%.4o\r\n' % {mask}) Write('<dd>%.4o\r\n' % {mask})
Write('<dt>unix.getsid(0)\r\n') Write('<dt>unix.getsid(0)\r\n')
sid, errno = unix.getsid(0) sid, err = unix.getsid(0)
if sid then if sid then
Write('<dd>%d\r\n' % {sid}) Write('<dd>%d\r\n' % {sid})
else else
Write('<dd>%s\r\n' % {tostring(errno)}) Write('<dd>%s\r\n' % {err})
end end
Write('<dt>unix.gethostname()\r\n') Write('<dt>unix.gethostname()\r\n')
Write('<dd>%s\r\n' % {EscapeHtml(unix.gethostname())}) Write('<dd>%s\r\n' % {EscapeHtml(assert(unix.gethostname()))})
Write('<dt>unix.getcwd()\r\n') Write('<dt>unix.getcwd()\r\n')
Write('<dd>%s\r\n' % {EscapeHtml(unix.getcwd())}) Write('<dd>%s\r\n' % {EscapeHtml(assert(unix.getcwd()))})
function PrintResourceLimit(name, id) function PrintResourceLimit(name, id)
soft, errno, hard = unix.getrlimit(id) soft, hard = unix.getrlimit(id)
Write('<dt>getrlimit(%s)\r\n' % {name}) Write('<dt>getrlimit(%s)\r\n' % {name})
if soft then if soft then
Write('<dd>') Write('<dd>')
@ -54,7 +54,7 @@ function PrintResourceLimit(name, id)
end end
Write('\r\n') Write('\r\n')
else else
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%s\r\n' % {EscapeHtml(tostring(hard))})
end end
end end
PrintResourceLimit('RLIMIT_AS', unix.RLIMIT_AS) PrintResourceLimit('RLIMIT_AS', unix.RLIMIT_AS)
@ -66,7 +66,7 @@ PrintResourceLimit('RLIMIT_NOFILE', unix.RLIMIT_NOFILE)
Write('<dt>unix.siocgifconf()\r\n') Write('<dt>unix.siocgifconf()\r\n')
Write('<dd>\r\n') Write('<dd>\r\n')
ifs, errno = unix.siocgifconf() ifs, err = unix.siocgifconf()
if ifs then if ifs then
for i = 1,#ifs do for i = 1,#ifs do
if ifs[i].netmask ~= 0 then if ifs[i].netmask ~= 0 then
@ -77,215 +77,217 @@ if ifs then
Write('%s %s/%d<br>\r\n' % {EscapeHtml(ifs[i].name), FormatIp(ifs[i].ip), cidr}) Write('%s %s/%d<br>\r\n' % {EscapeHtml(ifs[i].name), FormatIp(ifs[i].ip), cidr})
end end
else else
Write('%s\r\n' % {EscapeHtml(tostring(errno))}) Write('%s\r\n' % {err})
end end
enabled, errno = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_DEBUG) enabled, err = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_DEBUG)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_DEBUG)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_DEBUG)\r\n')
if errno then if enabled then -- is nil on error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%d\r\n' % {enabled}) -- should be 0 or 1
else else
Write('<dd>%s\r\n' % {enabled}) Write('<dd>%s\r\n' % {err})
end end
enabled, errno = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_ACCEPTCONN) enabled, err = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_ACCEPTCONN)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_ACCEPTCONN)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_ACCEPTCONN)\r\n')
if errno then if enabled then -- is nil on error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%d\r\n' % {enabled}) -- should be 0 or 1
else else
Write('<dd>%s\r\n' % {enabled}) Write('<dd>%s\r\n' % {err})
end end
enabled, errno = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_REUSEADDR) enabled, err = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_REUSEADDR)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_REUSEADDR)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_REUSEADDR)\r\n')
if errno then if enabled then -- is nil on error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%d\r\n' % {enabled}) -- should be 0 or 1
else else
Write('<dd>%s\r\n' % {enabled}) Write('<dd>%s\r\n' % {err})
end end
enabled, errno = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_REUSEPORT) enabled, err = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_REUSEPORT)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_REUSEPORT)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_REUSEPORT)\r\n')
if errno then if enabled then -- is nil on error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%d\r\n' % {enabled}) -- should be 0 or 1
else else
Write('<dd>%s\r\n' % {enabled}) Write('<dd>%s\r\n' % {err})
end end
enabled, errno = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_KEEPALIVE) enabled, err = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_KEEPALIVE)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_KEEPALIVE)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_KEEPALIVE)\r\n')
if errno then if enabled then -- is nil on error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%s\r\n' % {enabled}) -- should be 0 or 1
else else
Write('<dd>%s\r\n' % {enabled}) Write('<dd>%s\r\n' % {err})
end end
enabled, errno = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_NODELAY) enabled, err = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_NODELAY)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_NODELAY)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_NODELAY)\r\n')
if errno then if enabled then -- is nil on error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%s\r\n' % {enabled}) -- should be 0 or 1
else else
Write('<dd>%s\r\n' % {enabled}) Write('<dd>%s\r\n' % {err})
end end
secs, errno, micros = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_RCVTIMEO) secs, nanos = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_RCVTIMEO)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_RCVTIMEO)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_RCVTIMEO)\r\n')
if errno then if secs then -- is nil on error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%d seconds + %d nanoseconds\r\n' % {secs, nanos})
else else
Write('<dd>%d sec %d µs\r\n' % {secs, micros}) err = nanos
Write('<dd>%s\r\n' % {err})
end end
secs, errno, micros = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_SNDTIMEO) secs, nanos = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_SNDTIMEO)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_SNDTIMEO)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_SNDTIMEO)\r\n')
if errno then if secs then -- is nil on error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%d seconds + %d nanoseconds\r\n' % {secs, nanos})
else else
Write('<dd>%d sec %d µs\r\n' % {secs, micros}) err = nanos -- unix.Errno is always second result
Write('<dd>%s\r\n' % {err})
end end
enabled, errno = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_DONTROUTE) enabled, err = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_DONTROUTE)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_DONTROUTE)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_DONTROUTE)\r\n')
if errno then if enabled then -- is nil if error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%d\r\n' % {enabled}) -- should be 0 or 1
else else
Write('<dd>%s\r\n' % {enabled}) Write('<dd>%s\r\n' % {err})
end end
bytes, errno = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_SNDBUF) bytes, err = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_SNDBUF)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_SNDBUF)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_SNDBUF)\r\n')
if errno then if bytes then -- is nil if error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))})
else
Write('<dd>%d\r\n' % {bytes}) Write('<dd>%d\r\n' % {bytes})
else
Write('<dd>%s\r\n' % {err})
end end
bytes, errno = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_RCVBUF) bytes, err = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_RCVBUF)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_RCVBUF)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_RCVBUF)\r\n')
if errno then if bytes then -- is nil if error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))})
else
Write('<dd>%d\r\n' % {bytes}) Write('<dd>%d\r\n' % {bytes})
else
Write('<dd>%s\r\n' % {err})
end end
bytes, errno = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_FASTOPEN) bytes, err = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_FASTOPEN)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_FASTOPEN)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_FASTOPEN)\r\n')
if errno then if bytes then -- is nil if error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))})
else
Write('<dd>%d\r\n' % {bytes}) Write('<dd>%d\r\n' % {bytes})
else
Write('<dd>%s\r\n' % {err})
end end
enabled, errno = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_BROADCAST) enabled, err = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_BROADCAST)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_BROADCAST)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_BROADCAST)\r\n')
if errno then if enabled then -- is nil if error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%d\r\n' % {enabled}) -- should be 1 or 0
else else
Write('<dd>%s\r\n' % {enabled}) Write('<dd>%s\r\n' % {err})
end end
enabled, errno = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_CORK) enabled, err = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_CORK)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_CORK)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_CORK)\r\n')
if errno then if enabled then -- is nil if error
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%d\r\n' % {enabled}) -- should be 1 or 0
else else
Write('<dd>%s\r\n' % {enabled}) Write('<dd>%s\r\n' % {err})
end end
enabled, errno = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_QUICKACK) enabled, err = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_QUICKACK)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_QUICKACK)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_QUICKACK)\r\n')
if errno then if enabled then
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%d\r\n' % {enabled})
else else
Write('<dd>%s\r\n' % {enabled}) Write('<dd>%s\r\n' % {err})
end end
enabled, errno = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_DEFER_ACCEPT) enabled, err = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_DEFER_ACCEPT)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_DEFER_ACCEPT)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_DEFER_ACCEPT)\r\n')
if errno then if enabled then
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))})
else
Write('<dd>%s\r\n' % {enabled}) Write('<dd>%s\r\n' % {enabled})
else
Write('<dd>%s\r\n' % {err})
end end
enabled, errno = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_FASTOPEN_CONNECT) enabled, err = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_FASTOPEN_CONNECT)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_FASTOPEN_CONNECT)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_FASTOPEN_CONNECT)\r\n')
if errno then if err then
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))}) Write('<dd>%s\r\n' % {err})
else else
Write('<dd>%s\r\n' % {enabled}) Write('<dd>%s\r\n' % {enabled})
end end
bytes, errno = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_SNDLOWAT) bytes, err = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_SNDLOWAT)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_SNDLOWAT)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_SNDLOWAT)\r\n')
if errno then if bytes then
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))})
else
Write('<dd>%d\r\n' % {bytes}) Write('<dd>%d\r\n' % {bytes})
else
Write('<dd>%s\r\n' % {err})
end end
bytes, errno = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_RCVLOWAT) bytes, err = unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_RCVLOWAT)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_RCVLOWAT)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_SOCKET, unix.SO_RCVLOWAT)\r\n')
if errno then if bytes then
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))})
else
Write('<dd>%d\r\n' % {bytes}) Write('<dd>%d\r\n' % {bytes})
else
Write('<dd>%s\r\n' % {err})
end end
bytes, errno = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_KEEPCNT) bytes, err = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_KEEPCNT)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_KEEPCNT)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_KEEPCNT)\r\n')
if errno then if bytes then
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))})
else
Write('<dd>%d\r\n' % {bytes}) Write('<dd>%d\r\n' % {bytes})
else
Write('<dd>%s\r\n' % {err})
end end
bytes, errno = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_MAXSEG) bytes, err = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_MAXSEG)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_MAXSEG)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_MAXSEG)\r\n')
if errno then if bytes then
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))})
else
Write('<dd>%d\r\n' % {bytes}) Write('<dd>%d\r\n' % {bytes})
else
Write('<dd>%s\r\n' % {err})
end end
bytes, errno = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_SYNCNT) bytes, err = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_SYNCNT)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_SYNCNT)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_SYNCNT)\r\n')
if errno then if bytes then
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))})
else
Write('<dd>%d\r\n' % {bytes}) Write('<dd>%d\r\n' % {bytes})
else
Write('<dd>%s\r\n' % {err})
end end
bytes, errno = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_NOTSENT_LOWAT) bytes, err = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_NOTSENT_LOWAT)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_NOTSENT_LOWAT)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_NOTSENT_LOWAT)\r\n')
if errno then if bytes then
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))})
else
Write('<dd>%d\r\n' % {bytes}) Write('<dd>%d\r\n' % {bytes})
else
Write('<dd>%s\r\n' % {err})
end end
bytes, errno = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_WINDOW_CLAMP) bytes, err = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_WINDOW_CLAMP)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_WINDOW_CLAMP)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_WINDOW_CLAMP)\r\n')
if errno then if bytes then
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))})
else
Write('<dd>%d\r\n' % {bytes}) Write('<dd>%d\r\n' % {bytes})
else
Write('<dd>%s\r\n' % {err})
end end
bytes, errno = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_KEEPIDLE) bytes, err = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_KEEPIDLE)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_KEEPIDLE)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_KEEPIDLE)\r\n')
if errno then if bytes then
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))})
else
Write('<dd>%d\r\n' % {bytes}) Write('<dd>%d\r\n' % {bytes})
else
Write('<dd>%s\r\n' % {err})
end end
bytes, errno = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_KEEPINTVL) bytes, err = unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_KEEPINTVL)
Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_KEEPINTVL)\r\n') Write('<dt>unix.getsockopt(GetClientFd(), unix.SOL_TCP, unix.TCP_KEEPINTVL)\r\n')
if errno then if bytes then
Write('<dd>%s\r\n' % {EscapeHtml(tostring(errno))})
else
Write('<dd>%d\r\n' % {bytes}) Write('<dd>%d\r\n' % {bytes})
else
Write('<dd>%s\r\n' % {err})
end end
Write('<dt>unix.environ()\r\n') Write('<dt>unix.environ()\r\n')

View file

@ -318,12 +318,13 @@ REPL
redbean.com -i binarytrees.lua 15 redbean.com -i binarytrees.lua 15
In this mode redbean won't start a web server and instead functions When the `-i` flag is passed (for interpreter mode), redbean won't
like the `lua` command. The first command line argument becomes the start a web server and instead functions like the `lua` command. The
script you want to run. If you don't supply a script, then the repl first command line argument becomes the script you want to run. If you
without a web server is displayed. This is useful for testing since don't supply a script, then the repl without a web server is
redbean extensions and modules for the Lua language, are still made displayed. This is useful for testing since redbean extensions and
available. You can also write redbean scripts with shebang lines: modules for the Lua language, are still made available. You can also
write redbean scripts with shebang lines:
#!/usr/bin/redbean -i #!/usr/bin/redbean -i
print('hello world') print('hello world')
@ -1452,14 +1453,14 @@ MAXMIND MODULE
This module may be used to get city/country/asn/etc from IPs, e.g. This module may be used to get city/country/asn/etc from IPs, e.g.
-- .init.lua -- .init.lua
maxmind = require "maxmind" maxmind = require 'maxmind'
asndb = maxmind.open('/usr/local/share/maxmind/GeoLite2-ASN.mmdb') asndb = maxmind.open('/usr/local/share/maxmind/GeoLite2-ASN.mmdb')
-- request handler -- request handler
as = asndb:lookup(GetRemoteAddr()) as = asndb:lookup(GetRemoteAddr())
if as then if as then
asnum = as:get("autonomous_system_number") asnum = as:get('autonomous_system_number')
asorg = as:get("autonomous_system_organization") asorg = as:get('autonomous_system_organization')
Write(EscapeHtml(asnum)) Write(EscapeHtml(asnum))
Write(' ') Write(' ')
Write(EscapeHtml(asorg)) Write(EscapeHtml(asorg))
@ -1483,7 +1484,7 @@ UNIX MODULE
Returns a file descriptor integer that needs to be closed, e.g. Returns a file descriptor integer that needs to be closed, e.g.
fd = assert(open("/etc/passwd", unix.O_RDONLY)) fd = assert(unix.open("/etc/passwd", unix.O_RDONLY))
print(unix.read(fd)) print(unix.read(fd))
unix.close(fd) unix.close(fd)
@ -1622,9 +1623,9 @@ UNIX MODULE
Performs `$PATH` lookup of executable. Performs `$PATH` lookup of executable.
unix = require "unix" unix = require 'unix'
prog = assert(unix.commandv("ls")) prog = assert(unix.commandv('ls'))
unix.execve(prog, {prog, "-hal", "."}, {PATH="/bin"}) unix.execve(prog, {prog, '-hal', '.'}, {'PATH=/bin'})
unix.exit(127) unix.exit(127)
We automatically suffix `.com` and `.exe` for all platforms when We automatically suffix `.com` and `.exe` for all platforms when