PROTO(2)PROTO(2)NAME
rdproto - parse and process a proto file listing
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.
Each line of the proto file specifies a file to copy. Blank lines and
lines beginning with # are ignored. Indentation (usually tabs) is sig‐
nificant, 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 direc‐
tory 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; typi‐
cally 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.
FILES
/sys/lib/sysconfig/proto/
directory of prototype files.
/sys/lib/sysconfig/proto/portproto
generic prototype file.
SOURCE
/sys/src/libdisk/proto.c
SEE ALSOmk9660(8), mkfs(8)PROTO(2)