summaryrefslogtreecommitdiffstats
path: root/common/name-value.h
blob: fd0a98ceb745b214765f248520db47b6a6aa81f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* name-value.h - Parser and writer for a name-value format.
 *	Copyright (C) 2016 g10 Code GmbH
 *
 * This file is part of GnuPG.
 *
 * This file is free software; you can redistribute it and/or modify
 * it under the terms of either
 *
 *   - the GNU Lesser General Public License as published by the Free
 *     Software Foundation; either version 3 of the License, or (at
 *     your option) any later version.
 *
 * or
 *
 *   - the GNU General Public License as published by the Free
 *     Software Foundation; either version 2 of the License, or (at
 *     your option) any later version.
 *
 * or both in parallel, as here.
 *
 * GnuPG is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <https://www.gnu.org/licenses/>.
 */

#ifndef GNUPG_COMMON_NAME_VALUE_H
#define GNUPG_COMMON_NAME_VALUE_H

struct name_value_container;
typedef struct name_value_container *nvc_t;

struct name_value_entry;
typedef struct name_value_entry *nve_t;



/* Memory management, and dealing with entries.  */

/* Allocate a name value container structure.  */
nvc_t nvc_new (void);

/* Allocate a name value container structure for use with the extended
 * private key format.  */
nvc_t nvc_new_private_key (void);

/* Release a name value container structure.  */
void nvc_release (nvc_t pk);

/* Get the name.  */
char *nve_name (nve_t pke);

/* Get the value.  */
char *nve_value (nve_t pke);



/* Lookup and iteration.  */

/* Get the first non-comment entry.  */
nve_t nvc_first (nvc_t pk);

/* Get the first entry with the given name.  */
nve_t nvc_lookup (nvc_t pk, const char *name);

/* Get the next non-comment entry.  */
nve_t nve_next (nve_t entry);

/* Get the next entry with the given name.  */
nve_t nve_next_value (nve_t entry, const char *name);

/* Return the string for the first entry in NVC with NAME or NULL.  */
const char *nvc_get_string (nvc_t nvc, const char *name);

/* Return a boolean value for the first entry in NVC with NAME.  */
int nvc_get_boolean (nvc_t nvc, const char *name);



/* Adding and modifying values.  */

/* Add (NAME, VALUE) to PK.  If an entry with NAME already exists, it
   is not updated but the new entry is appended.  */
gpg_error_t nvc_add (nvc_t pk, const char *name, const char *value);

/* Add (NAME, VALUE) to PK.  If an entry with NAME already exists, it
   is updated with VALUE.  If multiple entries with NAME exist, the
   first entry is updated.  */
gpg_error_t nvc_set (nvc_t pk, const char *name, const char *value);

/* Update entry E to VALUE.  */
gpg_error_t nve_set (nve_t e, const char *value);

/* Delete the given entry from PK.  */
void nvc_delete (nvc_t pk, nve_t pke);

/* Delete the entries with NAME from PK.  */
void nvc_delete_named (nvc_t pk, const char *name);



/* Private key handling.  */

/* Get the private key.  */
gpg_error_t nvc_get_private_key (nvc_t pk, gcry_sexp_t *retsexp);

/* Set the private key.  */
gpg_error_t nvc_set_private_key (nvc_t pk, gcry_sexp_t sexp);



/* Parsing and serialization.  */

/* Parse STREAM and return a newly allocated private key container
   structure in RESULT.  If ERRLINEP is given, the line number the
   parser was last considering is stored there.  */
gpg_error_t nvc_parse (nvc_t *result, int *errlinep, estream_t stream);

/* Parse STREAM and return a newly allocated name value container
   structure in RESULT - assuming the extended private key format.  If
   ERRLINEP is given, the line number the parser was last considering
   is stored there.  */
gpg_error_t nvc_parse_private_key (nvc_t *result, int *errlinep,
                                   estream_t stream);

/* Write a representation of PK to STREAM.  */
gpg_error_t nvc_write (nvc_t pk, estream_t stream);

#endif /* GNUPG_COMMON_NAME_VALUE_H */