tools: group scripts by what runs them
tools/windows/ .ps1 (pwsh, so usable from Linux and macOS too)
tools/posix/ .sh
tools/python/ .py
tools/ .c and .pl
The .c and .pl files stay at the top level because they are not
host-specific: the build compiles or invokes them on every platform.
Call sites updated in the Makefile, ports/mk/port.mk, docs and the
project memory. The one thing that does not survive a move on its own is
a script deriving the repo root from its own location -- all nine
PowerShell tools used Split-Path $PSScriptRoot -Parent, and memory-sync.sh
used dirname/.., both of which quietly become tools/ one level deeper.
Two levels now.
Two pre-existing Windows failures surfaced while verifying, both real and
neither caused by the move:
- schfs_fsck.c did not compile under mingw at all: --extract uses
POSIX mkdir(path,mode), symlink() and link(), none of which mingw
has. That took the whole tool with it, and `make schfs-check` with
it. mkdir maps to _mkdir; symlink and link fail loudly rather than
writing a regular file in their place, because an extracted tree
that differs from the image while reporting success defeats the
point of --extract.
- the round-trip test then failed at `ln -s`, since Git Bash cannot
create symlinks without developer mode. It skips with a message now.
Not a fudge: mkschfs's mingw build cannot see a symlink either, so
the test would have compared a tree with none against an image with
none and called it a pass -- coverage reporting itself as present
while being absent.
Verified on Windows: build clean, all seven bootcheck suites green,
make schfs-check passes.
This commit is contained in:
parent
531ef120ef
commit
754d96ebc5
26 changed files with 127 additions and 39 deletions
|
|
@ -32,6 +32,43 @@
|
|||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/* --extract on Windows.
|
||||
*
|
||||
* mingw has no POSIX mkdir(path, mode), no symlink() and no link(), because
|
||||
* Windows has no equivalent that can be created without either a privilege or
|
||||
* a reparse point. Everything else here -- --info, --check, --ls, --stat,
|
||||
* --cat, --tree -- is pure reading and works unchanged; it was only --extract
|
||||
* that would not compile, which took the whole tool with it and with it
|
||||
* `make schfs-check`.
|
||||
*
|
||||
* Directories map cleanly: _mkdir takes no mode, and Windows has no POSIX
|
||||
* permission bits to apply anyway. Symlinks and hard links do not map, so they
|
||||
* fail loudly and say why. Silently writing a regular file in their place would
|
||||
* produce an extracted tree that differs from the image while reporting
|
||||
* success, which is worse than not extracting at all -- the entire point of
|
||||
* --extract is comparing the result against what produced it.
|
||||
*/
|
||||
#ifdef _WIN32
|
||||
#include <direct.h>
|
||||
#define mkdir(path, mode) _mkdir(path)
|
||||
|
||||
static int symlink(const char *target, const char *path)
|
||||
{
|
||||
(void)target;
|
||||
fprintf(stderr, "schfs_fsck: %s: cannot create a symlink on Windows\n", path);
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int link(const char *from, const char *to)
|
||||
{
|
||||
(void)from;
|
||||
fprintf(stderr, "schfs_fsck: %s: cannot create a hard link on Windows\n", to);
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "../kernel/fs/schfs/btree.c"
|
||||
#include "../kernel/fs/schfs/space.c"
|
||||
#include "../kernel/fs/schfs/vol.c"
|
||||
|
|
|
|||
Loading…
Reference in a new issue