diff options
Diffstat (limited to 'include/search.h')
| -rw-r--r-- | include/search.h | 37 | 
1 files changed, 25 insertions, 12 deletions
| diff --git a/include/search.h b/include/search.h index 93e1cbc6d..13d3be629 100644 --- a/include/search.h +++ b/include/search.h @@ -32,6 +32,12 @@  #define __set_errno(val) do { errno = val; } while (0) +enum env_op { +	env_op_create, +	env_op_delete, +	env_op_overwrite, +}; +  /* Action which shall be performed in the call the hsearch.  */  typedef enum {  	FIND, @@ -41,6 +47,9 @@ typedef enum {  typedef struct entry {  	const char *key;  	char *data; +	int (*callback)(const char *name, const char *value, enum env_op op, +		int flags); +	int flags;  } ENTRY;  /* Opaque type for internal use.  */ @@ -59,21 +68,20 @@ struct hsearch_data {  	unsigned int filled;  /*   * Callback function which will check whether the given change for variable - * "name" from "oldval" to "newval" may be applied or not, and possibly apply - * such change. + * "item" to "newval" may be applied or not, and possibly apply such change.   * When (flag & H_FORCE) is set, it shall not print out any error message and   * shall force overwriting of write-once variables.  .* Must return 0 for approval, 1 for denial.   */ -	int (*apply)(const char *name, const char *oldval, -			const char *newval, int flag); +	int (*change_ok)(const ENTRY *__item, const char *newval, enum env_op, +		int flag);  };  /* Create a new hashing table which will at most contain NEL elements.  */  extern int hcreate_r(size_t __nel, struct hsearch_data *__htab);  /* Destroy current internal hashing table.  */ -extern void hdestroy_r(struct hsearch_data *__htab, int do_apply); +extern void hdestroy_r(struct hsearch_data *__htab);  /*   * Search for entry matching ITEM.key in internal hash table.  If @@ -82,7 +90,7 @@ extern void hdestroy_r(struct hsearch_data *__htab, int do_apply);   * ITEM.data.   * */  extern int hsearch_r(ENTRY __item, ACTION __action, ENTRY ** __retval, -		     struct hsearch_data *__htab); +		     struct hsearch_data *__htab, int __flag);  /*   * Search for an entry matching `MATCH'.  Otherwise, Same semantics @@ -99,10 +107,10 @@ extern int hstrstr_r(const char *__match, int __last_idx, ENTRY ** __retval,  /* Search and delete entry matching ITEM.key in internal hash table. */  extern int hdelete_r(const char *__key, struct hsearch_data *__htab, -			int do_apply); +		     int __flag);  extern ssize_t hexport_r(struct hsearch_data *__htab, -		     const char __sep, char **__resp, size_t __size, +		     const char __sep, int __flag, char **__resp, size_t __size,  		     int argc, char * const argv[]);  /* @@ -113,10 +121,15 @@ extern ssize_t hexport_r(struct hsearch_data *__htab,   */  extern int himport_r(struct hsearch_data *__htab,  		     const char *__env, size_t __size, const char __sep, -		     int __flag, int nvars, char * const vars[], int do_apply); +		     int __flag, int nvars, char * const vars[]); + +/* Walk the whole table calling the callback on each element */ +extern int hwalk_r(struct hsearch_data *__htab, int (*callback)(ENTRY *)); -/* Flags for himport_r() */ -#define	H_NOCLEAR	(1 << 0) /* do not clear hash table before importing */ -#define	H_FORCE		(1 << 1) /* overwrite read-only/write-once variables */ +/* Flags for himport_r(), hexport_r(), hdelete_r(), and hsearch_r() */ +#define H_NOCLEAR	(1 << 0) /* do not clear hash table before importing */ +#define H_FORCE		(1 << 1) /* overwrite read-only/write-once variables */ +#define H_INTERACTIVE	(1 << 2) /* indicate that an import is user directed */ +#define H_HIDE_DOT	(1 << 3) /* don't print env vars that begin with '.' */  #endif /* search.h */ |