list.c

来自「性能优秀的SIP Proxy」· C语言 代码 · 共 152 行

C
152
字号
/*  * $Id: list.c,v 1.7 2006/05/24 08:53:34 bogdan_iancu Exp $  * * UNIXODBC module * * Copyright (C) 2005-2006 Marco Lorrai * * This file is part of openser, a free SIP server. * * openser 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; either version 2 of the License, or * (at your option) any later version * * openser 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 * * * History: * -------- *  2005-12-01  initial commit (chgen) *  2006-04-04  simplified link list (sgupta) *  2006-05-05  removed static allocation of 1k per column data (sgupta) */#include "../../dprint.h"#include "../../mem/mem.h"#include "list.h"int insert(list** start, list** link, int n, strn* value){	int i = 0;	if(!(*start)) {		*link = (list*)pkg_malloc(sizeof(list));		if(!(*link)) {			LOG(L_ERR,"ERROR:unixodbc:insert: Not enough pkg memory (1)\n");			return -1;		}		(*link)->rownum = n;		(*link)->next = NULL;		(*link)->lengths = (unsigned long*)pkg_malloc(sizeof(unsigned long)*n);		if(!(*link)->lengths) {			LOG(L_ERR,"ERROR:unixodbc:insert: Not enough pkg memory (2)\n");			pkg_free(*link);			*link = NULL;			return -1;		}		for(i=0; i<n; i++)			(*link)->lengths[i] = strlen(value[i].s) + 1;		(*link)->data = (char**)pkg_malloc(sizeof(char*)*n);		if(!(*link)->data) {			LOG(L_ERR,"ERROR:unixodbc:insert: Not enough pkg memory (3)\n");			pkg_free( (*link)->lengths );			pkg_free(*link);			*link = NULL;			return -1;		}		for(i=0; i<n; i++) {			(*link)->data[i] = pkg_malloc(sizeof(char) * (*link)->lengths[i]);			if(!(*link)->data[i]) {				LOG(L_ERR,"ERROR:unixodbc:insert: Not enough pkg memory "					"(4)\n");				pkg_free( (*link)->lengths );				pkg_free( (*link)->data );				pkg_free(*link);				*link = NULL;				return -1;			}			strncpy((*link)->data[i], value[i].s, (*link)->lengths[i]);		}			*start = *link;		return 0;	}	else	{		list* nlink;		nlink=(list*)pkg_malloc(sizeof(list));		if(!nlink) {			LOG(L_ERR,"ERROR:unixodbc:insert: Not enough pkg memory (5)\n");			return -1;		}		nlink->rownum = n;		nlink->lengths = (unsigned long*)pkg_malloc(sizeof(unsigned long)*n);		if(!nlink->lengths) {			LOG(L_ERR,"ERROR:unixodbc:insert: Not enough pkg memory (6)\n");			pkg_free(nlink);			nlink = NULL;			return -1;		}		for(i=0; i<n; i++)			nlink->lengths[i] = strlen(value[i].s) + 1;		nlink->data = (char**)pkg_malloc(sizeof(char*)*n);		if(!nlink->data) {			LOG(L_ERR,"ERROR:unixodbc:insert: Not enough pkg memory (7)\n");			pkg_free( nlink->lengths );			pkg_free(nlink);			nlink = NULL;			return -1;		}		for(i=0; i<n; i++) {			nlink->data[i] = pkg_malloc(sizeof(char) * nlink->lengths[i]);			if(!nlink->data[i]) {				LOG(L_ERR,"ERROR:unixodbc:insert: Not enough pkg memory "					"(8)\n");				pkg_free( nlink->lengths );				pkg_free( nlink->data );				pkg_free(nlink);				nlink = NULL;				return -1;			}			strncpy(nlink->data[i], value[i].s, nlink->lengths[i]);		}		nlink->next = NULL;		(*link)->next = nlink;		*link = (*link)->next;		return 0;	}}void destroy(list *start){	int i = 0;	while(start) {		list* temp = start;		start = start->next;		for(i = 0; i < temp->rownum; i++)			pkg_free( temp->data[i] );		pkg_free(temp->data);		pkg_free(temp->lengths);		pkg_free(temp);	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?