archie/prospero/lib/psrv/ad2l_atr.c
2024-05-27 16:13:40 +02:00

102 lines
3.2 KiB
C

/*
* Copyright (c) 1993 by the University of Southern California
*
* For copying and distribution information, please see the file
* <usc-copyr.h>.
*
* Written by bcn, 17 January 1993
*/
#include <usc-copyr.h>
#include <stdarg.h>
#include <pfs.h>
#include <perrno.h>
/*
* ad2l_seq1_atr - add single element sequence attribute to link
*
* The routines ad2l_seq1_atr is intended to provide a high level
* interface for adding a common form of attribute to a link,
* adding a sequence attribute. If compiled under ANSI C, it
* allows the addition of sequence attributes. If under non
* ANSI C, it allows the addition of a sequence attribute with
* a single element value.
*
* This functions is intended for use by information service providers
* converting information from their database to link information to be
* returned by a Prospero server.
*/
int
ad2l_seq_atr(VLINK l, /* Link to receive attribute */
char precedence, /* To what the attribute applies */
char nature, /* Nature of the attribute */
char *aname, /* The name of the attribute */
...) /* Elements of the value */
{
va_list ap;
char *seq_elem; /* Element of sequence */
PATTRIB at = atalloc();
if(!at) RETURNPFAILURE;
at->precedence = precedence;
at->nature = nature;
at->aname = stcopy(aname);
at->avtype = ATR_SEQUENCE;
va_start(ap, aname);
while(seq_elem = va_arg(ap, char *)) {
at->value.sequence = tkappend(seq_elem, at->value.sequence);
}
va_end(ap);
APPEND_ITEM(at, l->lattrib);
return(PSUCCESS);
}
/*
* ad2l_am_atr - add access method attribute to link
*
* The routine ad2l_am_atr is intended to provide a high level
* interface for adding the common form of the access method attribute to
* a link, adding an access method attribute with the first four generic
* arguments null (the value will be taken from the link itself).
*
* This function is intended for use by information service providers
* converting information from their database to link information to be
* returned by a Prospero server.
*/
void
ad2l_am_atr(VLINK l, /* Link to receive attribute */
char *am, /* The access method */
...) /* Specific elements of the value */
{
PATTRIB at = atalloc();
va_list ap;
char *arg; /* Arguments to access method */
va_start(ap, am);
arg = va_arg(ap, char *);
va_end(ap);
at->precedence = ATR_PREC_CACHED;
at->nature = ATR_NATURE_FIELD;
at->aname = stcopy("ACCESS-METHOD");
at->avtype = ATR_SEQUENCE;
at->value.sequence = tkappend(am, at->value.sequence);
if(arg) {
at->value.sequence = tkappend("", at->value.sequence);
at->value.sequence = tkappend("", at->value.sequence);
at->value.sequence = tkappend("", at->value.sequence);
at->value.sequence = tkappend("", at->value.sequence);
at->value.sequence = tkappend(arg, at->value.sequence);
}
while(arg = va_arg(ap, char *)) {
at->value.sequence = tkappend(arg,at->value.sequence);
}
APPEND_ITEM(at, l->lattrib);
}