You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.9 KiB

/*****
* Abstract:
*
* The internal structures that represent an attribute list. This is made
* available for slpd to speed its access to values for predicate evaluation.
****/
/******************************************************************************
*
* Individual values
*
* What is a value?
*
* In SLP an individual attribute can be associated with a list of values. A
* value is the data associated with a tag. Depending on the type of
* attribute, there can be zero, one, or many values associated with a single
* tag.
*****************************************************************************/
typedef struct xx_value_t
{
struct xx_value_t *next;
int escaped_len;
int unescaped_len;
union
{
SLPBoolean va_bool;
int va_int;
char *va_str; /* This is used for keyword, string, and opaque. */
} data; /* Stores the value of the variable. Note, any string must be copied into the struct. */
/* Memory handling */
struct xx_value_t *next_chunk; /* The next chunk of allocated memory in the value list. */
struct xx_value_t *last_value_in_chunk; /* The last value in the chunk. Only set by the chunk head. */
} value_t;
/******************************************************************************
*
* Individual attributes (vars)
*
* What is a var?
*
* A var is a variable tag that is associated with a list of values. Zero or
* more vars are kept in a single SLPAttributes object. Each value stored in
* a var is kept in a value struct.
*****************************************************************************/
/* An individual attribute in the struct. */
typedef struct xx_var_t
{
struct xx_var_t *next; /* Pointer to the next variable. */
SLPType type; /* The type of this variable. */
const char *tag; /* The name of this variable. */
unsigned int tag_len; /* The length of the tag. */
value_t *list; /* The list of values. */
int list_size; /* The number of values in the list. */
SLPBoolean modified; /* Flag. Set to be true if the attribute should be included in the next freshen. */
} var_t;
/******************************************************************************
*
* All the attributes.
*
*****************************************************************************/
/* The opaque struct representing a SLPAttributes handle.
*/
struct xx_SLPAttributes
{
SLPBoolean strict; /* Are we using strict typing? */
char *lang; /* Language. */
var_t *attrs; /* List of vars to be sent. */
int attr_count; /* The number of attributes */
};
/* Finds a variable by its tag. */
var_t *attr_val_find_str(struct xx_SLPAttributes *slp_attr, const char *tag, int tag_len);
/* Finds the type of an attribute. */
SLPError SLPAttrGetType_len(SLPAttributes attr_h, const char *tag, int tag_len, SLPType *type);