src/protocols/novell/nmfield.c

branch
gaim
changeset 20470
77693555855f
parent 13071
b98e72d4089a
parent 20469
b2836a24d81e
child 20471
1966704b3e42
--- a/src/protocols/novell/nmfield.c	Mon Apr 16 00:43:53 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,366 +0,0 @@
-/*
- * nmfield.c
- *
- * Copyright (c) 2004 Novell, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA	02111-1307	USA
- *
- */
-
-#include <string.h>
-#include <stdio.h>
-#include "nmfield.h"
-
-/* Free a field value and tag */
-static void _free_field(NMField * field);
-
-/* Free a field value */
-static void _free_field_value(NMField * field);
-
-/* Make a deep copy of the field */
-static void _copy_field(NMField * dest, NMField * src);
-
-/* Make a deep copy of the field's value */
-static void _copy_field_value(NMField * dest, NMField * src);
-
-/* Create a string from a value -- for debugging */
-static char *_value_to_string(NMField * field);
-
-static NMField *
-_add_blank_field(NMField *fields, guint32 count)
-{
-	guint32 new_len;
-
-	if (fields == NULL) {
-		fields = g_new0(NMField, 10);
-		fields->len = 10;
-	} else {
-		if (fields->len < count + 2) {
-			new_len = count + 10;
-			fields = g_realloc(fields, new_len * sizeof(NMField));
-			fields->len = new_len;
-		}
-	}
-	return fields;
-}
-
-NMField *
-nm_field_add_number(NMField * fields, const char *tag, guint32 size, guint8 method,
-					guint8 flags, guint32 value, guint8 type)
-{
-	guint32 count;
-	NMField *field;
-
-	count = nm_count_fields(fields);
-	fields = _add_blank_field(fields, count);
-
-	field = &(fields[count]);
-	field->tag = g_strdup(tag);
-	field->size = size;
-	field->method = method;
-	field->flags = flags;
-	field->value = value;
-	field->type = type;
-
-	/* Null terminate the field array */
-	field = &((fields)[count + 1]);
-	field->tag = NULL;
-	field->value = 0;
-	field->ptr_value = NULL;
-
-	return fields;
-}
-
-NMField *
-nm_field_add_pointer(NMField * fields, const char *tag, guint32 size, guint8 method,
-					 guint8 flags, gpointer value, guint8 type)
-{
-	guint32 count;
-	NMField *field = NULL;
-
-	count = nm_count_fields(fields);
-	fields = _add_blank_field(fields, count);
-
-	field = &(fields[count]);
-	field->tag = g_strdup(tag);
-	field->size = size;
-	field->method = method;
-	field->flags = flags;
-	field->ptr_value = value;
-	field->type = type;
-
-	/* Null terminate the field array */
-	field = &((fields)[count + 1]);
-	field->tag = NULL;
-	field->value = 0;
-	field->ptr_value = NULL;
-
-	return fields;
-}
-
-guint32
-nm_count_fields(NMField * fields)
-{
-	guint32 count = 0;
-
-	if (fields) {
-		while (fields->tag != NULL) {
-			count++;
-			fields++;
-		}
-	}
-
-	return count;
-}
-
-void
-nm_free_fields(NMField ** fields)
-{
-	NMField *field = NULL;
-
-	if ((fields == NULL) || (*fields == NULL))
-		return;
-
-	field = *fields;
-
-	while (field->tag != NULL) {
-		_free_field(field);
-		field++;
-	}
-
-	g_free(*fields);
-	*fields = NULL;
-}
-
-
-static void
-_free_field(NMField * field)
-{
-	if (field == NULL)
-		return;
-
-	_free_field_value(field);
-	g_free(field->tag);
-}
-
-static void
-_free_field_value(NMField * field)
-{
-	if (field == NULL)
-		return;
-
-	switch (field->type) {
-		case NMFIELD_TYPE_BINARY:
-		case NMFIELD_TYPE_UTF8:
-		case NMFIELD_TYPE_DN:
-			if (field->ptr_value != NULL) {
-				g_free(field->ptr_value);
-			}
-			break;
-
-		case NMFIELD_TYPE_ARRAY:
-		case NMFIELD_TYPE_MV:
-			nm_free_fields((NMField **)&field->ptr_value);
-			break;
-
-		default:
-			break;
-	}
-
-	field->size = 0;
-	field->ptr_value = NULL;
-}
-
-NMField *
-nm_locate_field(char *tag, NMField * fields)
-{
-	NMField *ret_fields = NULL;
-
-	if ((fields == NULL) || (tag == NULL)) {
-		return NULL;
-	}
-
-	while (fields->tag != NULL) {
-		if (g_ascii_strcasecmp(fields->tag, tag) == 0) {
-			ret_fields = fields;
-			break;
-		}
-		fields++;
-	}
-
-	return ret_fields;
-}
-
-NMField *
-nm_copy_field_array(NMField * src)
-{
-	NMField *ptr = NULL;
-	NMField *dest = NULL;
-	int count;
-
-	if (src != NULL) {
-		count = nm_count_fields(src) + 1;
-		dest = g_new0(NMField, count);
-		dest->len = count;
-		ptr = dest;
-		while (src->tag != NULL) {
-			_copy_field(ptr, src);
-			ptr++;
-			src++;
-		}
-	}
-
-	return dest;
-}
-
-static void
-_copy_field(NMField * dest, NMField * src)
-{
-	dest->type = src->type;
-	dest->flags = src->flags;
-	dest->method = src->method;
-	dest->tag = g_strdup(src->tag);
-	_copy_field_value(dest, src);
-}
-
-static void
-_copy_field_value(NMField * dest, NMField * src)
-{
-	dest->type = src->type;
-	switch (dest->type) {
-		case NMFIELD_TYPE_UTF8:
-		case NMFIELD_TYPE_DN:
-			if (src->size == 0 && src->ptr_value != NULL) {
-				src->size = strlen((char *) src->ptr_value) + 1;
-			}
-			/* fall through */
-		case NMFIELD_TYPE_BINARY:
-			if (src->size != 0 && src->ptr_value != NULL) {
-				dest->ptr_value = g_new0(char, src->size);
-				memcpy(dest->ptr_value, src->ptr_value, src->size);
-			}
-			break;
-
-		case NMFIELD_TYPE_ARRAY:
-		case NMFIELD_TYPE_MV:
-			dest->ptr_value = nm_copy_field_array((NMField *)src->ptr_value);
-			break;
-
-		default:
-			/* numeric value */
-			dest->value = src->value;
-			break;
-	}
-
-	dest->size = src->size;
-}
-
-void
-nm_remove_field(NMField * field)
-{
-	NMField *tmp;
-	guint32 len;
-
-	if ((field != NULL) && (field->tag != NULL)) {
-		_free_field(field);
-
-		/* Move fields down */
-		tmp = field + 1;
-		while (1) {
-			/* Don't overwrite the size of the array */
-			len = field->len;
-
-			*field = *tmp;
-
-			field->len = len;
-
-			if (tmp->tag == NULL)
-				break;
-
-			field++;
-			tmp++;
-		}
-	}
-}
-
-void
-nm_print_fields(NMField * fields)
-{
-	char *str = NULL;
-	NMField *field = fields;
-
-	if (fields == NULL)
-		return;
-
-	while (field->tag != NULL) {
-		if (field->type == NMFIELD_TYPE_ARRAY || field->type == NMFIELD_TYPE_MV) {
-			printf("Subarray START: %s Method = %d\n", field->tag, field->method);
-			nm_print_fields((NMField *) field->ptr_value);
-			printf("Subarray END: %s\n", field->tag);
-		} else {
-			str = _value_to_string(field);
-			printf("Tag=%s;Value=%s\n", field->tag, str);
-			g_free(str);
-			str = NULL;
-		}
-		field++;
-	}
-
-}
-
-static char *
-_value_to_string(NMField * field)
-{
-	char *value = NULL;
-
-	if (field == NULL)
-		return NULL;
-
-	/* This is a single value attribute */
-	if (((field->type == NMFIELD_TYPE_UTF8) ||
-		 (field->type == NMFIELD_TYPE_DN)) && (field->ptr_value != NULL)) {
-		value = g_strdup((const char *) field->ptr_value);
-	} else if (field->type == NMFIELD_TYPE_BINARY && field->ptr_value != NULL) {
-		value = g_new0(char, field->size);
-		memcpy(value, (const char *) field->ptr_value, field->size);
-	} else if (field->type == NMFIELD_TYPE_BOOL) {
-		if (field->value) {
-			value = g_strdup(NM_FIELD_TRUE);
-		} else {
-			value = g_strdup(NM_FIELD_FALSE);
-		}
-	} else {
-		/* assume it is a number */
-		value = g_new0(char, 20);
-
-		switch (field->type) {
-		case NMFIELD_TYPE_BYTE:
-		case NMFIELD_TYPE_WORD:
-		case NMFIELD_TYPE_DWORD:
-			value = g_strdup_printf("%ld", (long) field->value);
-			break;
-
-		case NMFIELD_TYPE_UBYTE:
-		case NMFIELD_TYPE_UWORD:
-		case NMFIELD_TYPE_UDWORD:
-			value = g_strdup_printf("%lu", (unsigned long) field->value);
-			break;
-		}
-	}
-
-	if (value == NULL)
-		value = g_strdup("NULL");
-
-	return value;
-}

mercurial