X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=libcitadel%2Flib%2Fvcard.c;h=f12a4efb599642dd7a2931de9e0c58fce25869fb;hb=19fb2763b48d73c87bf6852d29e84353fd941842;hp=05b691668503e494baf339c6e2307c7924b38fad;hpb=4e1fb9dc1f29fc490b60316d8522866539aec201;p=citadel.git diff --git a/libcitadel/lib/vcard.c b/libcitadel/lib/vcard.c index 05b691668..f12a4efb5 100644 --- a/libcitadel/lib/vcard.c +++ b/libcitadel/lib/vcard.c @@ -1,11 +1,21 @@ /* - * $Id: vcard.c 5754 2007-11-16 05:52:26Z ajc $ - * * vCard implementation for Citadel * * Copyright (C) 1999-2008 by the citadel.org development team. - * This code is freely redistributable under the terms of the GNU General - * Public License. All other rights reserved. + * + * This program is open source 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 3 of the License, or + * (at your option) any later version. + * + * 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 */ @@ -83,7 +93,7 @@ void remove_charset_attribute(char *strbuf) * propname name of new property * propvalue value of new property */ -void vcard_add_prop(struct vCard *v, char *propname, char *propvalue) { +void vcard_add_prop(struct vCard *v, const char *propname, const char *propvalue) { ++v->numprops; v->prop = realloc(v->prop, (v->numprops * sizeof(struct vCardProp)) ); @@ -91,7 +101,12 @@ void vcard_add_prop(struct vCard *v, char *propname, char *propvalue) { v->prop[v->numprops-1].value = strdup(propvalue); } - +/* + * Constructor - returns a new struct vcard given a serialized vcard + */ +struct vCard *VCardLoad(StrBuf *vbtext) { + return vcard_load((char*)ChrPtr(vbtext)); +} /* * Constructor - returns a new struct vcard given a serialized vcard @@ -123,22 +138,24 @@ struct vCard *vcard_load(char *vtext) { } v = vcard_new(); - if (v == NULL) return v; + if (v == NULL) + { + free(mycopy); + return v; + } ptr = mycopy; while (!IsEmptyStr(ptr)) { - colonpos = (-1); - nlpos = (-1); colonpos = pattern2(ptr, ":"); nlpos = pattern2(ptr, "\n"); if ((nlpos > colonpos) && (colonpos > 0)) { namebuf = malloc(colonpos + 1); valuebuf = malloc(nlpos - colonpos + 1); - strncpy(namebuf, ptr, colonpos); - namebuf[colonpos] = 0; - strncpy(valuebuf, &ptr[colonpos+1], nlpos-colonpos-1); - valuebuf[nlpos-colonpos-1] = 0; + memcpy(namebuf, ptr, colonpos); + namebuf[colonpos] = '\0'; + memcpy(valuebuf, &ptr[colonpos+1], nlpos-colonpos-1); + valuebuf[nlpos-colonpos-1] = '\0'; if (!strcasecmp(namebuf, "end")) { valid = 0;