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 significant, with each level of indenta-
tion 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 speci-
fying - is useful when one wishes to set, say, the file
owner without setting the permissions.)
Names beginning with a `$' are expanded as environment vari-
ables. 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.
Page 1 Plan 9 (printed 10/25/25)
PROTO(2) PROTO(2)
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 con-
tinues processing; if warn is nil, rdproto prints the warn-
ing 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 ALSO
mk9660(8), mkfs(8)
Page 2 Plan 9 (printed 10/25/25)