Mon, 14 Jan 2008 03:40:20 +0000
Remove a useless NULL check before a g_free().
| 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: |
|
22199
27d96e1ae236
Remove a useless NULL check before a g_free().
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
167 | g_free(field->ptr_value); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
168 | break; |
| 8675 | 169 | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
170 | case NMFIELD_TYPE_ARRAY: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
171 | case NMFIELD_TYPE_MV: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
172 | nm_free_fields((NMField **)&field->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
173 | break; |
| 8675 | 174 | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
175 | default: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
176 | break; |
| 8675 | 177 | } |
| 178 | ||
| 179 | field->size = 0; | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
180 | field->ptr_value = NULL; |
| 8675 | 181 | } |
| 182 | ||
| 183 | NMField * | |
| 184 | nm_locate_field(char *tag, NMField * fields) | |
| 185 | { | |
| 186 | NMField *ret_fields = NULL; | |
| 187 | ||
| 188 | if ((fields == NULL) || (tag == NULL)) { | |
| 189 | return NULL; | |
| 190 | } | |
| 191 | ||
| 192 | while (fields->tag != NULL) { | |
| 193 | if (g_ascii_strcasecmp(fields->tag, tag) == 0) { | |
| 194 | ret_fields = fields; | |
| 195 | break; | |
| 196 | } | |
| 197 | fields++; | |
| 198 | } | |
| 199 | ||
| 200 | return ret_fields; | |
| 201 | } | |
| 202 | ||
| 203 | NMField * | |
| 204 | nm_copy_field_array(NMField * src) | |
| 205 | { | |
| 206 | NMField *ptr = NULL; | |
| 207 | NMField *dest = NULL; | |
| 208 | int count; | |
| 209 | ||
| 210 | if (src != NULL) { | |
| 211 | count = nm_count_fields(src) + 1; | |
| 212 | dest = g_new0(NMField, count); | |
| 213 | dest->len = count; | |
| 214 | ptr = dest; | |
| 215 | while (src->tag != NULL) { | |
| 216 | _copy_field(ptr, src); | |
| 217 | ptr++; | |
| 218 | src++; | |
| 219 | } | |
| 220 | } | |
| 221 | ||
| 222 | return dest; | |
| 223 | } | |
| 224 | ||
| 225 | static void | |
| 226 | _copy_field(NMField * dest, NMField * src) | |
| 227 | { | |
| 228 | dest->type = src->type; | |
| 229 | dest->flags = src->flags; | |
| 230 | dest->method = src->method; | |
| 231 | dest->tag = g_strdup(src->tag); | |
| 232 | _copy_field_value(dest, src); | |
| 233 | } | |
| 234 | ||
| 235 | static void | |
| 236 | _copy_field_value(NMField * dest, NMField * src) | |
| 237 | { | |
| 238 | dest->type = src->type; | |
| 239 | switch (dest->type) { | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
240 | case NMFIELD_TYPE_UTF8: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
241 | case NMFIELD_TYPE_DN: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
242 | if (src->size == 0 && src->ptr_value != NULL) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
243 | src->size = strlen((char *) src->ptr_value) + 1; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
244 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
245 | /* fall through */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
246 | case NMFIELD_TYPE_BINARY: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
247 | if (src->size != 0 && src->ptr_value != NULL) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
248 | dest->ptr_value = g_new0(char, src->size); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
249 | memcpy(dest->ptr_value, src->ptr_value, src->size); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
250 | } |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
251 | break; |
| 8675 | 252 | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
253 | case NMFIELD_TYPE_ARRAY: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
254 | case NMFIELD_TYPE_MV: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
255 | dest->ptr_value = nm_copy_field_array((NMField *)src->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
256 | break; |
| 8675 | 257 | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
258 | default: |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
259 | /* numeric value */ |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
260 | dest->value = src->value; |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
261 | break; |
| 8675 | 262 | } |
| 263 | ||
| 264 | dest->size = src->size; | |
| 265 | } | |
| 266 | ||
| 267 | void | |
| 268 | nm_remove_field(NMField * field) | |
| 269 | { | |
| 270 | NMField *tmp; | |
| 271 | guint32 len; | |
| 272 | ||
| 273 | if ((field != NULL) && (field->tag != NULL)) { | |
| 274 | _free_field(field); | |
| 275 | ||
| 276 | /* Move fields down */ | |
| 277 | tmp = field + 1; | |
| 278 | while (1) { | |
| 279 | /* Don't overwrite the size of the array */ | |
| 280 | len = field->len; | |
| 281 | ||
| 282 | *field = *tmp; | |
| 283 | ||
| 284 | field->len = len; | |
| 285 | ||
| 286 | if (tmp->tag == NULL) | |
| 287 | break; | |
| 288 | ||
| 289 | field++; | |
| 290 | tmp++; | |
| 291 | } | |
| 292 | } | |
| 293 | } | |
| 294 | ||
| 295 | void | |
| 296 | nm_print_fields(NMField * fields) | |
| 297 | { | |
| 298 | char *str = NULL; | |
| 299 | NMField *field = fields; | |
| 300 | ||
| 301 | if (fields == NULL) | |
| 302 | return; | |
| 303 | ||
| 304 | while (field->tag != NULL) { | |
| 305 | if (field->type == NMFIELD_TYPE_ARRAY || field->type == NMFIELD_TYPE_MV) { | |
| 306 | 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
|
307 | nm_print_fields((NMField *) field->ptr_value); |
| 8675 | 308 | printf("Subarray END: %s\n", field->tag); |
| 309 | } else { | |
| 310 | str = _value_to_string(field); | |
| 311 | printf("Tag=%s;Value=%s\n", field->tag, str); | |
| 312 | g_free(str); | |
| 313 | str = NULL; | |
| 314 | } | |
| 315 | field++; | |
| 316 | } | |
| 317 | ||
| 318 | } | |
| 319 | ||
| 320 | static char * | |
| 321 | _value_to_string(NMField * field) | |
| 322 | { | |
| 323 | char *value = NULL; | |
| 324 | ||
| 325 | if (field == NULL) | |
| 326 | return NULL; | |
| 327 | ||
| 328 | /* This is a single value attribute */ | |
| 329 | if (((field->type == NMFIELD_TYPE_UTF8) || | |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
330 | (field->type == NMFIELD_TYPE_DN)) && (field->ptr_value != NULL)) { |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
331 | value = g_strdup((const char *) field->ptr_value); |
|
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
332 | } else if (field->type == NMFIELD_TYPE_BINARY && field->ptr_value != NULL) { |
| 8675 | 333 | value = g_new0(char, field->size); |
|
8933
0f1e8160581d
[gaim-migrate @ 9703]
Mike Stoddard <mistoddard@novell.com>
parents:
8684
diff
changeset
|
334 | memcpy(value, (const char *) field->ptr_value, field->size); |
| 8675 | 335 | } else if (field->type == NMFIELD_TYPE_BOOL) { |
| 336 | if (field->value) { | |
| 337 | value = g_strdup(NM_FIELD_TRUE); | |
| 338 | } else { | |
| 339 | value = g_strdup(NM_FIELD_FALSE); | |
| 340 | } | |
| 341 | } else { | |
| 342 | /* assume it is a number */ | |
| 343 | value = g_new0(char, 20); | |
| 344 | ||
| 345 | switch (field->type) { | |
| 346 | case NMFIELD_TYPE_BYTE: | |
| 347 | case NMFIELD_TYPE_WORD: | |
| 348 | case NMFIELD_TYPE_DWORD: | |
| 349 | value = g_strdup_printf("%ld", (long) field->value); | |
| 350 | break; | |
| 351 | ||
| 352 | case NMFIELD_TYPE_UBYTE: | |
| 353 | case NMFIELD_TYPE_UWORD: | |
| 354 | case NMFIELD_TYPE_UDWORD: | |
| 355 | value = g_strdup_printf("%lu", (unsigned long) field->value); | |
| 356 | break; | |
| 357 | } | |
| 358 | } | |
| 359 | ||
| 360 | if (value == NULL) | |
| 361 | value = g_strdup("NULL"); | |
| 362 | ||
| 363 | return value; | |
| 364 | } |