Sat, 08 Sep 2007 03:09:35 +0000
The FSF changed its address a while ago; our files were out of date.
This is a quick update done with a for loop, find, and sed.
| 8675 | 1 | /* |
| 2 | * nmfield.c | |
| 3 | * | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
4 | * Copyright (c) 2004 Novell, Inc. All Rights Reserved. |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
5 | * |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
6 | * This program is free software; you can redistribute it and/or modify |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
7 | * it under the terms of the GNU General Public License as published by |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
8 | * the Free Software Foundation; version 2 of the License. |
| 8675 | 9 | * |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
13 | * GNU General Public License for more details. |
|
8684
7ec649752daa
[gaim-migrate @ 9437]
Christian Hammond <chipx86@chipx86.com>
parents:
8675
diff
changeset
|
14 | * |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
16 | * along with this program; if not, write to the Free Software |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
15435
diff
changeset
|
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 8675 | 18 | * |
| 19 | */ | |
| 20 | ||
| 21 | #include <string.h> | |
| 22 | #include <stdio.h> | |
| 23 | #include "nmfield.h" | |
| 24 | ||
| 25 | /* Free a field value and tag */ | |
| 26 | static void _free_field(NMField * field); | |
| 27 | ||
| 28 | /* Free a field value */ | |
| 29 | static void _free_field_value(NMField * field); | |
| 30 | ||
| 31 | /* Make a deep copy of the field */ | |
| 32 | static void _copy_field(NMField * dest, NMField * src); | |
| 33 | ||
| 34 | /* Make a deep copy of the field's value */ | |
| 35 | static void _copy_field_value(NMField * dest, NMField * src); | |
| 36 | ||
| 37 | /* Create a string from a value -- for debugging */ | |
| 38 | static char *_value_to_string(NMField * field); | |
| 39 | ||
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
40 | static NMField * |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
41 | _add_blank_field(NMField *fields, guint32 count) |
| 8675 | 42 | { |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
43 | guint32 new_len; |
| 8675 | 44 | |
| 45 | if (fields == NULL) { | |
| 46 | fields = g_new0(NMField, 10); | |
| 47 | fields->len = 10; | |
| 48 | } else { | |
| 49 | if (fields->len < count + 2) { | |
| 50 | new_len = count + 10; | |
| 51 | fields = g_realloc(fields, new_len * sizeof(NMField)); | |
| 52 | fields->len = new_len; | |
| 53 | } | |
| 54 | } | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
55 | return fields; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
56 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
57 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
58 | NMField * |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
59 | nm_field_add_number(NMField * fields, const char *tag, guint32 size, guint8 method, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
60 | guint8 flags, guint32 value, guint8 type) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
61 | { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
62 | guint32 count; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
63 | NMField *field; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
64 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
65 | count = nm_count_fields(fields); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
66 | fields = _add_blank_field(fields, count); |
| 8675 | 67 | |
| 68 | field = &(fields[count]); | |
| 69 | field->tag = g_strdup(tag); | |
| 70 | field->size = size; | |
| 71 | field->method = method; | |
| 72 | field->flags = flags; | |
| 73 | field->value = value; | |
| 74 | field->type = type; | |
| 75 | ||
| 76 | /* Null terminate the field array */ | |
| 77 | field = &((fields)[count + 1]); | |
| 78 | field->tag = NULL; | |
| 79 | field->value = 0; | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
80 | field->ptr_value = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
81 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
82 | return fields; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
83 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
84 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
85 | NMField * |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
86 | nm_field_add_pointer(NMField * fields, const char *tag, guint32 size, guint8 method, |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
87 | guint8 flags, gpointer value, guint8 type) |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
88 | { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
89 | guint32 count; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
90 | NMField *field = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
91 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
92 | count = nm_count_fields(fields); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
93 | fields = _add_blank_field(fields, count); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
94 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
95 | field = &(fields[count]); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
96 | field->tag = g_strdup(tag); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
97 | field->size = size; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
98 | field->method = method; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
99 | field->flags = flags; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
100 | field->ptr_value = value; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
101 | field->type = type; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
102 | |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
103 | /* Null terminate the field array */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
104 | field = &((fields)[count + 1]); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
105 | field->tag = NULL; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
106 | field->value = 0; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
107 | field->ptr_value = NULL; |
| 8675 | 108 | |
| 109 | return fields; | |
| 110 | } | |
| 111 | ||
| 112 | guint32 | |
| 113 | nm_count_fields(NMField * fields) | |
| 114 | { | |
| 115 | guint32 count = 0; | |
| 116 | ||
| 117 | if (fields) { | |
| 118 | while (fields->tag != NULL) { | |
| 119 | count++; | |
| 120 | fields++; | |
| 121 | } | |
| 122 | } | |
| 123 | ||
| 124 | return count; | |
| 125 | } | |
| 126 | ||
| 127 | void | |
| 128 | nm_free_fields(NMField ** fields) | |
| 129 | { | |
| 130 | NMField *field = NULL; | |
| 131 | ||
| 132 | if ((fields == NULL) || (*fields == NULL)) | |
| 133 | return; | |
| 134 | ||
| 135 | field = *fields; | |
| 136 | ||
| 137 | while (field->tag != NULL) { | |
| 138 | _free_field(field); | |
| 139 | field++; | |
| 140 | } | |
| 141 | ||
| 142 | g_free(*fields); | |
| 143 | *fields = NULL; | |
| 144 | } | |
| 145 | ||
| 146 | ||
| 147 | static void | |
| 148 | _free_field(NMField * field) | |
| 149 | { | |
| 150 | if (field == NULL) | |
| 151 | return; | |
| 152 | ||
| 153 | _free_field_value(field); | |
| 154 | g_free(field->tag); | |
| 155 | } | |
| 156 | ||
| 157 | static void | |
| 158 | _free_field_value(NMField * field) | |
| 159 | { | |
| 160 | if (field == NULL) | |
| 161 | return; | |
| 162 | ||
| 163 | switch (field->type) { | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
164 | case NMFIELD_TYPE_BINARY: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
165 | case NMFIELD_TYPE_UTF8: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
166 | case NMFIELD_TYPE_DN: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
167 | if (field->ptr_value != NULL) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
168 | g_free(field->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
169 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
170 | break; |
| 8675 | 171 | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
172 | case NMFIELD_TYPE_ARRAY: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
173 | case NMFIELD_TYPE_MV: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
174 | nm_free_fields((NMField **)&field->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
175 | break; |
| 8675 | 176 | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
177 | default: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
178 | break; |
| 8675 | 179 | } |
| 180 | ||
| 181 | field->size = 0; | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
182 | field->ptr_value = NULL; |
| 8675 | 183 | } |
| 184 | ||
| 185 | NMField * | |
| 186 | nm_locate_field(char *tag, NMField * fields) | |
| 187 | { | |
| 188 | NMField *ret_fields = NULL; | |
| 189 | ||
| 190 | if ((fields == NULL) || (tag == NULL)) { | |
| 191 | return NULL; | |
| 192 | } | |
| 193 | ||
| 194 | while (fields->tag != NULL) { | |
| 195 | if (g_ascii_strcasecmp(fields->tag, tag) == 0) { | |
| 196 | ret_fields = fields; | |
| 197 | break; | |
| 198 | } | |
| 199 | fields++; | |
| 200 | } | |
| 201 | ||
| 202 | return ret_fields; | |
| 203 | } | |
| 204 | ||
| 205 | NMField * | |
| 206 | nm_copy_field_array(NMField * src) | |
| 207 | { | |
| 208 | NMField *ptr = NULL; | |
| 209 | NMField *dest = NULL; | |
| 210 | int count; | |
| 211 | ||
| 212 | if (src != NULL) { | |
| 213 | count = nm_count_fields(src) + 1; | |
| 214 | dest = g_new0(NMField, count); | |
| 215 | dest->len = count; | |
| 216 | ptr = dest; | |
| 217 | while (src->tag != NULL) { | |
| 218 | _copy_field(ptr, src); | |
| 219 | ptr++; | |
| 220 | src++; | |
| 221 | } | |
| 222 | } | |
| 223 | ||
| 224 | return dest; | |
| 225 | } | |
| 226 | ||
| 227 | static void | |
| 228 | _copy_field(NMField * dest, NMField * src) | |
| 229 | { | |
| 230 | dest->type = src->type; | |
| 231 | dest->flags = src->flags; | |
| 232 | dest->method = src->method; | |
| 233 | dest->tag = g_strdup(src->tag); | |
| 234 | _copy_field_value(dest, src); | |
| 235 | } | |
| 236 | ||
| 237 | static void | |
| 238 | _copy_field_value(NMField * dest, NMField * src) | |
| 239 | { | |
| 240 | dest->type = src->type; | |
| 241 | switch (dest->type) { | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
242 | case NMFIELD_TYPE_UTF8: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
243 | case NMFIELD_TYPE_DN: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
244 | if (src->size == 0 && src->ptr_value != NULL) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
245 | src->size = strlen((char *) src->ptr_value) + 1; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
246 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
247 | /* fall through */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
248 | case NMFIELD_TYPE_BINARY: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
249 | if (src->size != 0 && src->ptr_value != NULL) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
250 | dest->ptr_value = g_new0(char, src->size); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
251 | memcpy(dest->ptr_value, src->ptr_value, src->size); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
252 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
253 | break; |
| 8675 | 254 | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
255 | case NMFIELD_TYPE_ARRAY: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
256 | case NMFIELD_TYPE_MV: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
257 | dest->ptr_value = nm_copy_field_array((NMField *)src->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
258 | break; |
| 8675 | 259 | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
260 | default: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
261 | /* numeric value */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
262 | dest->value = src->value; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
263 | break; |
| 8675 | 264 | } |
| 265 | ||
| 266 | dest->size = src->size; | |
| 267 | } | |
| 268 | ||
| 269 | void | |
| 270 | nm_remove_field(NMField * field) | |
| 271 | { | |
| 272 | NMField *tmp; | |
| 273 | guint32 len; | |
| 274 | ||
| 275 | if ((field != NULL) && (field->tag != NULL)) { | |
| 276 | _free_field(field); | |
| 277 | ||
| 278 | /* Move fields down */ | |
| 279 | tmp = field + 1; | |
| 280 | while (1) { | |
| 281 | /* Don't overwrite the size of the array */ | |
| 282 | len = field->len; | |
| 283 | ||
| 284 | *field = *tmp; | |
| 285 | ||
| 286 | field->len = len; | |
| 287 | ||
| 288 | if (tmp->tag == NULL) | |
| 289 | break; | |
| 290 | ||
| 291 | field++; | |
| 292 | tmp++; | |
| 293 | } | |
| 294 | } | |
| 295 | } | |
| 296 | ||
| 297 | void | |
| 298 | nm_print_fields(NMField * fields) | |
| 299 | { | |
| 300 | char *str = NULL; | |
| 301 | NMField *field = fields; | |
| 302 | ||
| 303 | if (fields == NULL) | |
| 304 | return; | |
| 305 | ||
| 306 | while (field->tag != NULL) { | |
| 307 | if (field->type == NMFIELD_TYPE_ARRAY || field->type == NMFIELD_TYPE_MV) { | |
| 308 | printf("Subarray START: %s Method = %d\n", field->tag, field->method); | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
309 | nm_print_fields((NMField *) field->ptr_value); |
| 8675 | 310 | printf("Subarray END: %s\n", field->tag); |
| 311 | } else { | |
| 312 | str = _value_to_string(field); | |
| 313 | printf("Tag=%s;Value=%s\n", field->tag, str); | |
| 314 | g_free(str); | |
| 315 | str = NULL; | |
| 316 | } | |
| 317 | field++; | |
| 318 | } | |
| 319 | ||
| 320 | } | |
| 321 | ||
| 322 | static char * | |
| 323 | _value_to_string(NMField * field) | |
| 324 | { | |
| 325 | char *value = NULL; | |
| 326 | ||
| 327 | if (field == NULL) | |
| 328 | return NULL; | |
| 329 | ||
| 330 | /* This is a single value attribute */ | |
| 331 | if (((field->type == NMFIELD_TYPE_UTF8) || | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
332 | (field->type == NMFIELD_TYPE_DN)) && (field->ptr_value != NULL)) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
333 | value = g_strdup((const char *) field->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
334 | } else if (field->type == NMFIELD_TYPE_BINARY && field->ptr_value != NULL) { |
| 8675 | 335 | value = g_new0(char, field->size); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
336 | memcpy(value, (const char *) field->ptr_value, field->size); |
| 8675 | 337 | } else if (field->type == NMFIELD_TYPE_BOOL) { |
| 338 | if (field->value) { | |
| 339 | value = g_strdup(NM_FIELD_TRUE); | |
| 340 | } else { | |
| 341 | value = g_strdup(NM_FIELD_FALSE); | |
| 342 | } | |
| 343 | } else { | |
| 344 | /* assume it is a number */ | |
| 345 | value = g_new0(char, 20); | |
| 346 | ||
| 347 | switch (field->type) { | |
| 348 | case NMFIELD_TYPE_BYTE: | |
| 349 | case NMFIELD_TYPE_WORD: | |
| 350 | case NMFIELD_TYPE_DWORD: | |
| 351 | value = g_strdup_printf("%ld", (long) field->value); | |
| 352 | break; | |
| 353 | ||
| 354 | case NMFIELD_TYPE_UBYTE: | |
| 355 | case NMFIELD_TYPE_UWORD: | |
| 356 | case NMFIELD_TYPE_UDWORD: | |
| 357 | value = g_strdup_printf("%lu", (unsigned long) field->value); | |
| 358 | break; | |
| 359 | } | |
| 360 | } | |
| 361 | ||
| 362 | if (value == NULL) | |
| 363 | value = g_strdup("NULL"); | |
| 364 | ||
| 365 | return value; | |
| 366 | } |