A big update final push before 1.6 release. Here is the detailed rundown of the changes
/lib/term.lua
1. delay calling gpu.getViewport() when creating a terminal window. this fixes scenarios where the gpu could be a proxy object that doesn't have a viewport defined yet.
2. big blink cleanup to minimize the potential number of gpu calls during blink, and simplify the code
/lib/sh.lua, /lib/process.lua
1. moving shell sandboxing code to process library. This actually simplifies creating the sandbox for processes and handling process crash (process lib and sh lib shared common crash code)
/bin/rc.lua
1. found a bug in restart, fixed
/lib/pipes.lua
1. required update to be compatible with internal(private) methods to the sh library
/lib/package.lua
1. just aesthetic cleanup of error reporting
/bin/mktmp.lua
1. use existing os.tmpname() helper method
/init.lua and (added) /lib/tools/boot.lua
1. moving all the code I can to tools file to allow the memory to unload after boot completes.
/bin/ls.lua
1. fixing symbolic links to directory display (had extra /)
/lib/event.lua
1. refactor listeners and timers into common registers (fully backwards compatible). Provides a mechanism for drivers to know about ALL events without stealing them from the main process. Will document it later when the api is hardened (new api, event.register)
2. memory savings due to refactor
3. protecting computer.pullSignal! this is critical, user scripts that were previously pulling diirection from the computer api were able to put the kernel in a bad state. computer.pullSignal is still available, but it calls the event api to correctly dispatch events as drivers expect.
devfs
1. eeprom and eeprom-data are now dynamically available. This is significant, now when a user removes the eeprom, it will not be listed in /dev
2. devfs upgrade, support built for future dynamic folders (such as /dev/filesystems/)
autorun
1. code cleanup
oppm
1. fixing cwd expected by oppm.lua during initial install (if using .install via `install oppm`)
Allowing removal of dev points can have unintended side effects because the dev points cannot be recreated without a reboot
For example, `cp -f /tmp/eeprom /dev/eeprom` breaks because cp first removes the target file - and then is not allowed to create it with io.write(path, 'w')
using buffers for term stream string (used in devfs)
simulate enter key and split clipboards on multiline paste
delay proxy calls to eeprom until actually using /dev/eeprom
all reads on /dev/null (returns nil)
fix grep using ^
make term resize event handler safer by adding it to each window. this will have the same memory cost, but is more reliable
fix cp path check for copying dirs into themselves. there was a bug where /path/a_dir looked like a parent of /path/a_dir_2
cleanup df format by not adding padding on the far right side of the table
make init event handler slightly more efficient by waiting specifically for the init signal, rather than a specified amount of time
mv had some weird problems with missing files or empty quoted args - fix and added unit tests
rm force should have no prompt and always return success
term.read() ^c now returns false broke lua prompt on ^c
any false return from a stream read should be indicative of a broken or ended stream to be more compliant with io.read behavior
e.g.
Assume you have a script that print to stdout as well as stderr:
[test.lua]
print("foo")
io.stderr:write("bar")
Then run this script, redirecting [2] to stdout, and [1] to dev null, then piping to grep
./test.lua 2>&1 >/dev/null | grep baz
This test should print NOTHING to the terminal, "foo" went to dev null, "bar" when to stdout, and grep matched on "baz", thus should not print. But the bug I found was that [2] was redirected to terminal tty stdout and then AFTER that the piping code added a pipe on [1], but [2] was already pointing to tty. The fix is to move the piping before redirections are created, so that when [2] redirects to stdout, stdout is already the pipe.
Also:
Fixed a bug with command substitution not concatenating strings
Split /bin/ls for ultra simple formatting for low mem systems
Remove all instances of absolute paths to lib/tools and use package searching
renaming guid to uuid and removing useless method toHex
adding text read and writer, compare to c++ stdlib stringstream. needed for advanced devfs
fix globbing with relative paths and . and .. in path
moving install confirmation before calling .install
fix cp: cp -r . /another/path (should copy contents of current dir)
fix cat when stdin is missing or closed
improved devfs supporting custom dir handlers for dynamic file listing
other non functional changes to clean up code and improved error messages