/ util / cbfstool / flashmap / kv_pair.h
kv_pair.h
  1  /* SPDX-License-Identifier: BSD-3-Clause or GPL-2.0-only */
  2  
  3  #ifndef FLASHMAP_LIB_KV_PAIR_H__
  4  #define FLASHMAP_LIB_KV_PAIR_H__
  5  
  6  #include <stdio.h>
  7  #include <inttypes.h>
  8  #include <string.h>
  9  
 10  /* key=value string pair list */
 11  #define KV_PAIR_MAX_VALUE_LEN	   1024
 12  
 13  enum kv_pair_style {
 14  	KV_STYLE_PAIR,		/* key1="value1" key2="value2" */
 15  	KV_STYLE_VALUE,		/* | value1 | value2 | */
 16  	KV_STYLE_LONG,		/* key1		| value1 */
 17  				/* key2		| value2 */
 18  };
 19  
 20  struct kv_pair {
 21  	char *key;
 22  	char *value;
 23  	struct kv_pair *next;
 24  };
 25  
 26  extern enum kv_pair_style kv_pair_get_style(void);
 27  
 28  extern void kv_pair_set_style(enum kv_pair_style style);
 29  
 30  /*
 31   * kv_pair_new	-  create new key=value pair
 32   *
 33   * returns pointer to new key=value pair
 34   * returns NULL to indicate error
 35   */
 36  extern struct kv_pair *kv_pair_new(void);
 37  
 38  /*
 39   * kv_pair_add	-  add new key=value pair to list
 40   *
 41   * @kv_list:	key=value pair list
 42   * @key:	key string
 43   * @value:	value string
 44   *
 45   * returns pointer to new key=value pair
 46   * returns NULL to indicate error
 47   */
 48  extern struct kv_pair *kv_pair_add(struct kv_pair *kv_list,
 49  				   const char *key, const char *value);
 50  
 51  /*
 52   * kv_pair_add_bool  -	add new boolean kvpair to list
 53   *
 54   * @kv_list:	key=value pair list
 55   * @key:	key string
 56   * @value:	value
 57   *
 58   * returns pointer to new key=value pair
 59   * returns NULL to indicate error
 60   */
 61  extern struct kv_pair *kv_pair_add_bool(struct kv_pair *kv_list,
 62  					const char *key, int value);
 63  
 64  /*
 65   * kv_pair_fmt	-  add key=value pair based on printf format
 66   *		   NOTE: uses variable argument list
 67   *
 68   * @kv_list:	list of key=value pairs
 69   * @kv_key:	key string
 70   * @format:	printf-style format for value input
 71   * @...:	arguments to format
 72   *
 73   * returns pointer to new key=value pair
 74   * returns NULL to indicate error
 75   */
 76  extern struct kv_pair *kv_pair_fmt(struct kv_pair *kv_list,
 77  				   const char *kv_key, const char *format, ...)
 78  #if defined(_WIN32) || (_WIN64)
 79  				   __attribute__((format(gnu_printf, 3, 4)));
 80  #else
 81  				   __attribute__((format(printf, 3, 4)));
 82  #endif
 83  
 84  /*
 85   * kv_pair_free  -  clean a key=value pair list
 86   *
 87   * @kv_list:	pointer to key=value list
 88   */
 89  extern void kv_pair_free(struct kv_pair *kv_list);
 90  
 91  /*
 92   * kv_pair_print  -  print a key=value pair list
 93   *
 94   * @kv_list:	pointer to key=value list
 95   * @style:	print style
 96   */
 97  extern void kv_pair_print_to_file(FILE* fp, struct kv_pair *kv_list,
 98  				  enum kv_pair_style style);
 99  
100  /*
101   * kv_pair_print  -  print a key=value pair list to gsys output
102   *
103   * @kv_list:	pointer to key=value list
104   */
105  extern void kv_pair_print(struct kv_pair *kv_list);
106  
107  
108  /*
109   * kv_pair_get_value  -  return first value with key match
110   *
111   * @kv_list:	pointer to key=value list
112   * @kv_key:	key string
113   */
114  extern const char *kv_pair_get_value(struct kv_pair *kv_list,
115  				     const char *kv_key);
116  
117  /*
118   * kv_pair_size  -  return number of kv pairs in the chain
119   *
120   * @kv_list:	pointer to key=value list
121   */
122  extern int kv_pair_size(struct kv_pair *kv_list);
123  
124  #endif /* FLASHMAP_LIB_KV_PAIR_H__ */