glenda.party
term% ls -F
term% pwd
$home/manuals/9front/2/proto
term% cat index.txt
PROTO(2)                      System Calls Manual                     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  except  lines  in
       the  form of attr=val which sets an attribute (see below).  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 ex‐
       cept 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.

       Attributes, lines in the form of attr=val, apply to all  files  in  the
       current  indention  level after the attribute line.  Attributes are in‐
       herited to deeper levels but each level can override them  individualy.
       The attribute skip=regexp skips all file names matching the regular ex‐
       pression regexp for * and + operations using regexp(2).   If  owner  or
       group  is  left  unspecified  on  a  file, the attributes uid=owner and
       gid=group will override these fields.  The  mode=mode  attribute  adds,
       sets  or masks file permission bits if permissions where not explicitly
       specified on the file. If multiple mode= lines are given  and  mode  is
       not  a  set  operation (forced by !  character) the modes are combined.
       Except for the special !  character, mode has the  same  syntax  as  in
       chmod(1).

       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 ALSO
       mk9660(8), mkfs(8), regexp(2), chmod(1).



                                                                      PROTO(2)