]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - include/search.h
usb: Clean up newly allocated device nodes in case of configuration failure
[karo-tx-uboot.git] / include / search.h
index f5165b0a989ae7cc4acab177e1d7f22bcdcee5e5..13d3be6291701a3170dbd3a15e873b6cc7378c82 100644 (file)
 
 #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,14 +68,13 @@ 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.  */
@@ -102,7 +110,7 @@ extern int hdelete_r(const char *__key, struct hsearch_data *__htab,
                     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[]);
 
 /*
@@ -115,9 +123,13 @@ extern int himport_r(struct hsearch_data *__htab,
                     const char *__env, size_t __size, const char __sep,
                     int __flag, int nvars, char * const vars[]);
 
-/* Flags for himport_r(), hdelete_r(), and hsearch_r() */
+/* 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(), 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 */