PROTO(3)

πŸ“¦
version 0_git20260208 Β· 2 versions
, in alpine 3.24, arch rolling, nixos 26.05, nixpkgs unstable

πŸ’– PROTO(3) πŸ’–

okay bestie, welcome to PROTO(3) from the Library Functions Manual! this page is all about rdproto, and we're gonna make it make sense, fr fr. 🫢

✨ NAME ✨

rdproto β€” parse and process a proto file listing. lowkey the whole vibe is "read the proto file, do the right thing with the files." πŸ’…

πŸ¦‹ SYNOPSIS πŸ¦‹

#include <u.h>
#include <libc.h>
#include <disk.h>

typedef void Protoenum(char *new, char *old, Dir *d, void *a)

typedef void Protowarn(char *msg, void *a)

int rdproto(char *proto, char *root, Protoenum *enm,
                                Protowarn *warn, void *a)

πŸ’… DESCRIPTION πŸ’…

rdproto reads and interprets the named proto file relative to the root directory root. it's giving "walk the list, build the tree." 🌈

Each line of the proto file specifies a file to copy. Blank lines and lines beginning with # are ignored. Indentation (usually tabs) is significant, with each level of indentation corresponding to a level in the file tree. Fields within a line are separated by white space. The first field is the last path element in the destination file tree. The second field specifies the permissions. The third field is the owner of the file, and the fourth is the group owning the file. The fifth field is the name of the file from which to copy; this file is read from the current name space, not the source file tree. All fields except the first are optional. Specifying - for permissions, owner, or group causes rdproto to fetch the corresponding information from the file rather than override it. (This is the default behavior when the fields are not present; explicitly specifying - is useful when one wishes to set, say, the file owner without setting the permissions.) πŸŽ€

Names beginning with a $ are expanded as environment variables. If the first file specified in a directory is *, all of the files in that directory are considered listed. If the first file is *, all of the files are copied, and all subdirectories are recursively considered listed. All files are considered relative to root. ✨

For each file named by the proto, enm is called with new pointing at the name of the file (without the root prefix), old pointing at the name of the source file (with the root prefix, when applicable), and Dir at the desired directory information for the new file. Only the name, uid, gid, mode, mtime, and length fields are guaranteed to be valid. The argument a is the same argument passed to rdproto; typically it points at some extra state used by the enumeration function. πŸ’–

When files or directories do not exist or cannot be read by rdproto, it formats a warning message, calls warn, and continues processing; if warn is nil, rdproto prints the warning message to standard error. 🫢

rdproto returns zero if proto was processed, -1 if it could not be opened. no cap. πŸ’€

πŸŽ€ FILES πŸŽ€

  • /sys/lib/sysconfig/proto/ β€” directory of prototype files. (the home base of proto files 🏠)
  • /sys/lib/sysconfig/proto/portproto β€” generic prototype file. (the one that's like "generic but make it iconic" ✨)

πŸ”₯ SOURCE πŸ”₯

/src/libdisk/proto.c β€” that's where the source lives, bestie. πŸ’œ

🌈 SEE ALSO 🌈

  • mk9660(1) β€” go look at this one too πŸ‘€
  • Plan 9's mkfs(8) β€” and this one, iykyk 🌸

πŸ’– okay bye bestie! that's the whole PROTO(3) page from the Library Functions Manual. The source is /src/libdisk/proto.c, and the footer is just PROTO(3) β€” no extra date or version line, periodt. πŸ’