Coverity reports a potenatially TOCTOU bug, CWE-367, in copyfile(). Turns out we tried to fall back to copy when readlink() failed, in the case when the user requested to copy symlinks. It's better to fail hard if stat() reports symlink and readlink() right after fails to read the symlink ... Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
-lite: The missing C-lib functions
Libite, or -lite, is a light-weight library of utility functions and
missing C library functions.
Helper Macros
blkdev(dev)
Create block device
chardev(dev)
Create character device
-
erase(path)Erase file/directory with
remove(). Errors on stderr -
makedir(path)Create directory, like
mkdir(). Errors on stderr -
makefifo(path)Create a FIFO, like
mkfifo(). Errors on stderr -
touch(path)Create a file, or update mtime. Errors on stderr
-
S_ISEXEC(mode_t m)
Mysteriously missing from GLIBC
UNUSED(var)
Shorter and more readable version of var __attribute__ ((unused))
Generic Functions
-
chomp(str)Perl like chomp function, chop off last char if newline.
-
copyfile(src, dst, len, symlink)Like the shell
cp(1)anddd(1),can also create symlinks. -
dir(dir, ext, filter, list, strip)Wrapper for
scandir()with optional filter. Returns a list of names: files and directories that must be freed after use. See the unit test at the bottom for an example. -
fexist(file)Check for the existance of a file, returns True(1) or False(0).
-
fisdir(path)Check for the existance of a directory, returns True(1) or False(0).
-
fmode(file)Returns the
mode_tbits of a file or directory. -
rsync(src, dst, delete, *filter())Very simple
rsync()to copy files files and directories recursively. -
tempfile()Secure replacement for
tmpfile(). Creates an invisible temporary file in/tmpthat is removed when the returned %FILE pointer is closed.
OpenBSD Functions
The following are the popular OpenBSD string functions.
strlcpy(dst, src, len)strlcat(dst, src, len)strtonum()
TODO
- Improve documentation, possibly use kdoc or gdoc2 to generate docs from API.