Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/lib/libc/gen/Attic/getcap.3,v retrieving revision 1.7 retrieving revision 1.10 diff -u -p -r1.7 -r1.10 --- src/lib/libc/gen/Attic/getcap.3 1998/02/05 07:28:01 1.7 +++ src/lib/libc/gen/Attic/getcap.3 1998/04/29 19:12:09 1.10 @@ -1,4 +1,4 @@ -.\" $NetBSD: getcap.3,v 1.7 1998/02/05 07:28:01 perry Exp $ +.\" $NetBSD: getcap.3,v 1.10 1998/04/29 19:12:09 fair Exp $ .\" .\" Copyright (c) 1992, 1993 .\" The Regents of the University of California. All rights reserved. @@ -37,7 +37,7 @@ .\" @(#)getcap.3 8.4 (Berkeley) 5/13/94 .\" .Dd May 13, 1994 -.Dt GETCAP 3 +.Dt GETCAP 3 .Os .Sh NAME .Nm cgetent , @@ -51,6 +51,8 @@ .Nm cgetnext , .Nm cgetclose .Nd capability database access routines +.Sh LIBRARY +.Lb libc .Sh SYNOPSIS .Fd #include .Ft int @@ -74,7 +76,7 @@ .Ft int .Fn cgetclose "void" .Sh DESCRIPTION -.Fn Cgetent +.Fn cgetent extracts the capability .Fa name from the database specified by the @@ -82,16 +84,19 @@ from the database specified by the terminated file array .Fa db_array and returns a pointer to a -.Xr malloc Ns \&'d +.Xr malloc 3 Ns \&'d copy of it in -.Fa buf . -.Nm Cgetent -will first look for files ending in -.Nm .db +.Fa buf . +.Fn cgetent +will first look for files ending in +.Pa .db (see -.Xr cap_mkdb 1) -before accessing the ASCII file. -.Fa Buf +.Xr cap_mkdb 1 ) +before accessing the +.Tn ASCII +file. +.Pp +.Fa buf must be retained through all subsequent calls to .Fn cgetmatch , .Fn cgetcap , @@ -100,55 +105,57 @@ must be retained through all subsequent and .Fn cgetustr , but may then be -.Xr free Ns \&'d. -On success 0 is returned, 1 if the returned -record contains an unresolved -.Nm tc -expansion, -\-1 if the requested record couldn't be found, -\-2 if a system error was encountered (couldn't open/read a file, etc.) also -setting -.Va errno , +.Xr free 3 Ns \&'d. +.Pp +On success 0 is returned, 1 if the returned record contains an unresolved +.Qq tc +expansion, \-1 if the requested record couldn't be found, \-2 if +a system error was encountered (couldn't open/read a file, etc.) +also setting +.Va errno , and \-3 if a potential reference loop is detected (see -.Ic tc= +.Qq tc=name comments below). .Pp -.Nm Cgetset +.Fn cgetset enables the addition of a character buffer containing a single capability -record entry -to the capability database. +record entry to the capability database. Conceptually, the entry is added as the first ``file'' in the database, and -is therefore searched first on the call to -.Nm cgetent . -The entry is passed in +is therefore searched first on the call to +.Fn cgetent . +The entry is passed in .Fa ent . -If -.Fa ent +If +.Fa ent is .Dv NULL , -the current entry is removed from the database. -.Nm Cgetset -must precede the database traversal. It must be called before the -.Nm cgetent -call. If a sequential access is being performed (see below), it must be called -before the first sequential access call ( -.Nm cgetfirst +the current entry is removed from the database. +.Pp +.Fn cgetset +must precede the database traversal. +It must be called before the +.Fn cgetent +call. +If a sequential access is being performed (see below), it must be called +before the first sequential access call +.Po +.Fn cgetfirst or -.Nm cgetnext -), or be directly preceded by a -.Nm cgetclose +.Fn cgetnext +.Pc , +or be directly preceded by a +.Fn cgetclose call. On success 0 is returned and \-1 on failure. .Pp -.Nm Cgetmatch +.Fn cgetmatch will return 0 if .Fa name is one of the names of the capability record .Fa buf , -\-1 if -not. +\-1 if not. .Pp -.Nm Cgetcap +.Fn cgetcap searches the capability record .Fa buf for the capability @@ -157,21 +164,22 @@ with type .Fa type . A .Fa type -is specified using any single character. If a colon (`:') is used, an -untyped capability will be searched for (see below for explanation of -types). A pointer to the value of +is specified using any single character. +If a colon (`:') is used, an untyped capability will be searched +for (see below for explanation of types). +A pointer to the value of .Fa cap in .Fa buf is returned on success, .Dv NULL -if the requested capability couldn't be -found. The end of the capability value is signaled by a `:' or +if the requested capability couldn't be found. +The end of the capability value is signaled by a `:' or .Tn ASCII .Dv NUL (see below for capability database syntax). .Pp -.Nm Cgetnum +.Fn cgetnum retrieves the value of the numeric capability .Fa cap from the capability record pointed to by @@ -180,10 +188,10 @@ The numeric value is returned in the .Ft long pointed to by .Fa num . -0 is returned on success, \-1 if the requested numeric capability couldn't -be found. +0 is returned on success, +\-1 if the requested numeric capability couldn't be found. .Pp -.Nm Cgetstr +.Fn cgetstr retrieves the value of the string capability .Fa cap from the capability record pointed to by @@ -191,7 +199,7 @@ from the capability record pointed to by A pointer to a decoded, .Dv NUL terminated, -.Xr malloc Ns \&'d +.Xr malloc 3 Ns \&'d copy of the string is returned in the .Ft char * pointed to by @@ -202,74 +210,78 @@ is returned on success, \-1 if the reque be found, \-2 if a system error was encountered (storage allocation failure). .Pp -.Nm Cgetustr -is identical to -.Nm cgetstr +.Fn cgetustr +is identical to +.Fn cgetstr except that it does not expand special characters, but rather returns each character of the capability string literally. .Pp -.Nm Cgetfirst , -.Nm cgetnext , -comprise a function group that provides for sequential -access of the +.Fn cgetfirst , +.Fn cgetnext , +comprise a function group that provides for sequential access of the .Dv NULL pointer terminated array of file names, .Fa db_array . -.Nm Cgetfirst +.Fn cgetfirst returns the first record in the database and resets the access to the first record. -.Nm Cgetnext +.Fn cgetnext returns the next record in the database with respect to the record returned by the previous -.Nm cgetfirst +.Fn cgetfirst or -.Nm cgetnext -call. If there is no such previous call, the first record in the database is -returned. +.Fn cgetnext +call. +If there is no such previous call, +the first record in the database is returned. Each record is returned in a -.Xr malloc Ns \&'d -copy pointed to by -.Fa buf . -.Ic Tc +.Xr malloc 3 Ns \&'d +copy pointed to by +.Fa buf . +.Qq tc expansion is done (see -.Ic tc= +.Qq tc=name comments below). +.Pp Upon completion of the database 0 is returned, 1 is returned upon successful -return of record with possibly more remaining (we haven't reached the end of +return of record with possibly more remaining (we haven't reached the end of the database yet), 2 is returned if the record contains an unresolved -.Nm tc +.Qq tc expansion, \-1 is returned if an system error occurred, and \-2 -is returned if a potential reference loop is detected (see -.Ic tc= +is returned if a potential reference loop is detected (see +.Qq tc=name comments below). Upon completion of database (0 return) the database is closed. .Pp -.Nm Cgetclose -closes the sequential access and frees any memory and file descriptors -being used. Note that it does not erase the buffer pushed by a call to -.Nm cgetset . +.Fn cgetclose +closes the sequential access and frees any memory and file descriptors +being used. +Note that it does not erase the buffer pushed by a call to +.Fn cgetset . .Sh CAPABILITY DATABASE SYNTAX Capability databases are normally .Tn ASCII -and may be edited with standard -text editors. Blank lines and lines beginning with a `#' are comments -and are ignored. Lines ending with a `\|\e' indicate that the next line -is a continuation of the current line; the `\|\e' and following newline -are ignored. Long lines are usually continued onto several physical +and may be edited with standard text editors. +Blank lines and lines beginning with a `#' are comments and are ignored. +Lines ending with a `\|\e' indicate that the next line is a continuation +of the current line; the `\|\e' and following newline are ignored. +Long lines are usually continued onto several physical lines by ending each line except the last with a `\|\e'. .Pp -Capability databases consist of a series of records, one per logical -line. Each record contains a variable number of `:'-separated fields -(capabilities). Empty fields consisting entirely of white space +Capability databases consist of a series of records, one per logical line. +Each record contains a variable number of `:'-separated fields (capabilities). +Empty fields consisting entirely of white space characters (spaces and tabs) are ignored. .Pp The first capability of each record specifies its names, separated by `|' -characters. These names are used to reference records in the database. +characters. +These names are used to reference records in the database. By convention, the last name is usually a comment and is not intended as -a lookup tag. For example, the +a lookup tag. +For example, the .Em vt100 record from the -.Nm termcap +.Pa termcap database begins: .Pp .Dl "d0\||\|vt100\||\|vt100-am\||\|vt100am\||\|dec vt100:" @@ -291,30 +303,32 @@ has value does not exist .El .Pp -Names consist of one or more characters. Names may contain any character -except `:', but it's usually best to restrict them to the printable -characters and avoid use of graphics like `#', `=', `%', `@', etc. Types -are single characters used to separate capability names from their -associated typed values. Types may be any character except a `:'. -Typically, graphics like `#', `=', `%', etc. are used. Values may be any -number of characters and may contain any character except `:'. +Names consist of one or more characters. +Names may contain any character except `:', but it's usually best +to restrict them to the printable characters and avoid use of +graphics like `#', `=', `%', `@', etc. +.Pp +Types are single characters used to separate capability names from +their associated typed values. +Types may be any character except a `:'. +Typically, graphics like `#', `=', `%', etc. are used. +Values may be any number of characters and may contain any character except `:'. .Sh CAPABILITY DATABASE SEMANTICS -Capability records describe a set of (name, value) bindings. Names may -have multiple values bound to them. Different values for a name are -distinguished by their +Capability records describe a set of (name, value) bindings. +Names may have multiple values bound to them. +Different values for a name are distinguished by their .Fa types . -.Nm Cgetcap +.Fn cgetcap will return a pointer to a value of a name given the capability name and the type of the value. .Pp The types `#' and `=' are conventionally used to denote numeric and -string typed values, but no restriction on those types is enforced. The -functions -.Nm cgetnum +string typed values, but no restriction on those types is enforced. +The functions +.Fn cgetnum and -.Nm cgetstr -can be used to implement the traditional syntax and semantics of `#' -and `='. +.Fn cgetstr +can be used to implement the traditional syntax and semantics of `#' and `='. Typeless capabilities are typically used to denote boolean objects with presence or absence indicating truth and false values respectively. This interpretation is conveniently represented by: @@ -322,40 +336,42 @@ This interpretation is conveniently repr .Dl "(getcap(buf, name, ':') != NULL)" .Pp A special capability, -.Ic tc= name , +.Qq tc=name , is used to indicate that the record specified by .Fa name should be substituted for the -.Ic tc +.Qq tc capability. -.Ic Tc +.Qq tc capabilities may interpolate records which also contain -.Ic tc +.Qq tc capabilities and more than one -.Ic tc -capability may be used in a record. A -.Ic tc -expansion scope (i.e., where the argument is searched for) contains the +.Qq tc +capability may be used in a record. +A +.Qq tc +expansion scope (i.e. where the argument is searched for) contains the file in which the -.Ic tc +.Qq tc is declared and all subsequent files in the file array. .Pp When a database is searched for a capability record, the first matching -record in the search is returned. When a record is scanned for a -capability, the first matching capability is returned; the capability -.Ic :nameT@: +record in the search is returned. +When a record is scanned for a capability, the first matching +capability is returned; the capability +.Qq :nameT@: will hide any following definition of a value of type .Em T for .Fa name ; and the capability -.Ic :name@: +.Qq :name@: will prevent any following values of .Fa name from being seen. .Pp These features combined with -.Ic tc +.Qq tc capabilities can be used to generate variations of other databases and records by either adding new capabilities, overriding definitions with new definitions, or hiding following definitions via `@' capabilities. @@ -367,8 +383,18 @@ example\||\|an example of binding multip :tc=more: .Ed .Pp -The capability foo has two values bound to it (bar of type `%' and blah of -type `^') and any other value bindings are hidden. The capability abc +The capability +.Em foo +has two values bound to it +.Po +.Em bar +of type `%' and +.Em blah +of type `^' +.Pc +and any other value bindings are hidden. +The capability +.Em abc also has two values bound but only a value of type `$' is prevented from being defined in the capability record more. .Pp @@ -382,21 +408,49 @@ file2: .Ed .Pp The records are extracted by calling -.Nm cgetent -with file1 preceding file2. -In the capability record new in file1, fript=bar overrides the definition -of fript=foo interpolated from the capability record old in file2, -who-cares@ prevents the definition of any who-cares definitions in old -from being seen, glork#200 is inherited from old, and blah and anything -defined by the record extensions is added to those definitions in old. -Note that the position of the fript=bar and who-cares@ definitions before -tc=old is important here. If they were after, the definitions in old +.Fn cgetent +with +.Fa file1 +preceding +.Fa file2 . +In the capability record +.Em new +in +.Fa file1 , +.Qq fript=bar +overrides the definition of +.Qq fript=foo +interpolated from the capability record +.Em old +in +.Fa file2, +.Qq who-cares@ +prevents the definition of any who-cares definitions in +.Em old +from being seen, +.Qq glork#200 +is inherited from +.Em old , +and +.Em blah +and anything defined by the record extensions is added to those +definitions in +.Em old . +Note that the position of the +.Qq fript=bar +and +.Qq who-cares@ +definitions before +.Qq tc=old +is important here. +If they were after, the definitions in +.Em old would take precedence. .Sh CGETNUM AND CGETSTR SYNTAX AND SEMANTICS Two types are predefined by -.Nm cgetnum +.Fn cgetnum and -.Nm cgetstr : +.Fn cgetstr : .Bl -column "nameXnumber" .Sm off .It Em name No \&# Em number Ta numeric @@ -406,7 +460,7 @@ has value .Em number .It Em name No = Em string Ta "string capability" .Em name -has value +has value .Em string .It Em name No \&#@ Ta "the numeric capability" .Em name @@ -428,7 +482,8 @@ Otherwise, if the number starts with a it is interpreted as an octal number. Otherwise the number is interpreted as a decimal number. .Pp -String capability values may contain any character. Non-printable +String capability values may contain any character. +Non-printable .Dv ASCII codes, new lines, and colons may be conveniently represented by the use of escape sequences: @@ -447,7 +502,8 @@ of escape sequences: .El .Pp A `\|\e' may be followed by up to three octal digits directly specifies -the numeric code for a character. The use of +the numeric code for a character. +The use of .Tn ASCII .Dv NUL Ns s , while easily @@ -457,41 +513,41 @@ are typically used to denote the end of use `\e\|200' to represent a .Dv NUL . .Sh DIAGNOSTICS -.Nm Cgetent , -.Nm cgetset , -.Nm cgetmatch , -.Nm cgetnum , -.Nm cgetstr , -.Nm cgetustr , -.Nm cgetfirst , +.Fn cgetent , +.Fn cgetset , +.Fn cgetmatch , +.Fn cgetnum , +.Fn cgetstr , +.Fn cgetustr , +.Fn cgetfirst , and -.Nm cgetnext +.Fn cgetnext return a value greater than or equal to 0 on success and a value less than 0 on failure. -.Nm Cgetcap +.Fn cgetcap returns a character pointer on success and a .Dv NULL on failure. .Pp -.Nm Cgetent , -and -.Nm cgetseq -may fail and set +.Fn cgetent , +and +.Fn cgetseq +may fail and set .Va errno for any of the errors specified for the library functions: -.Xr fopen 2 , -.Xr fclose 2 , +.Xr fopen 3 , +.Xr fclose 3 , .Xr open 2 , -and +and .Xr close 2 . .Pp -.Nm Cgetent , -.Nm cgetset , -.Nm cgetstr , +.Fn cgetent , +.Fn cgetset , +.Fn cgetstr , and -.Nm cgetustr -may fail and set -.Va errno +.Fn cgetustr +may fail and set +.Va errno as follows: .Bl -tag -width Er .It Bq Er ENOMEM @@ -504,10 +560,10 @@ No memory to allocate. Colons (`:') can't be used in names, types, or values. .Pp There are no checks for -.Ic tc= name +.Qq tc=name loops in -.Nm cgetent . +.Fn cgetent . .Pp -The buffer added to the database by a call to -.Nm cgetset +The buffer added to the database by a call to +.Fn cgetset is not unique to the database but is rather prepended to any database used.