summaryrefslogtreecommitdiffabout
path: root/libkcal/versit/vobject.c
Side-by-side diff
Diffstat (limited to 'libkcal/versit/vobject.c') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/versit/vobject.c363
1 files changed, 192 insertions, 171 deletions
diff --git a/libkcal/versit/vobject.c b/libkcal/versit/vobject.c
index 637efb2..3fac63e 100644
--- a/libkcal/versit/vobject.c
+++ b/libkcal/versit/vobject.c
@@ -43,16 +43,17 @@ DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
*/
-#include <stdlib.h>
+#ifdef WIN32
+#define snprintf _snprintf
+#define strcasecmp stricmp
+#endif
#include "vobject.h"
+#include <stdlib.h>
#include <string.h>
#include <stdio.h>
-#ifdef _WIN32_
+#include <fcntl.h>
- #define strcasecmp _stricmp
-#endif
-
-#define NAME_OF(o) o->id
+#define NAME_OF(o) o->id
#define VALUE_TYPE(o) o->valType
#define STRINGZ_VALUE_OF(o) o->val.strs
@@ -63,4 +64,29 @@ DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
#define VOBJECT_VALUE_OF(o) o->val.vobj
+typedef union ValueItem {
+ const char *strs;
+ const wchar_t *ustrs;
+ unsigned int i;
+ unsigned long l;
+ void *any;
+ VObject *vobj;
+ } ValueItem;
+
+struct VObject {
+ VObject *next;
+ const char *id;
+ VObject *prop;
+ unsigned short valType;
+ ValueItem val;
+ };
+
+typedef struct StrItem StrItem;
+
+struct StrItem {
+ StrItem *next;
+ const char *s;
+ unsigned int refCnt;
+ };
+
const char** fieldedProp;
@@ -77,5 +103,5 @@ const char** fieldedProp;
----------------------------------------------------------------------*/
-VObject* newVObject_(const char *id)
+DLLEXPORT(VObject*) newVObject_(const char *id)
{
VObject *p = (VObject*)malloc(sizeof(VObject));
@@ -88,19 +114,16 @@ VObject* newVObject_(const char *id)
}
-VObject* newVObject(const char *id)
+DLLEXPORT(VObject*) newVObject(const char *id)
{
return newVObject_(lookupStr(id));
}
-void deleteVObject(VObject *p)
+DLLEXPORT(void) deleteVObject(VObject *p)
{
- if (p->id)
unUseStr(p->id);
- if (p)
free(p);
- p = NULL;
}
-char* dupStr(const char *s, unsigned int size)
+DLLEXPORT(char*) dupStr(const char *s, unsigned int size)
{
char *t;
@@ -119,9 +142,7 @@ char* dupStr(const char *s, unsigned int size)
}
-void deleteStr(const char *p)
+DLLEXPORT(void) deleteStr(const char *p)
{
- if (p)
- free((void*)p);
- p = NULL;
+ if (p) free((void*)p);
}
@@ -138,7 +159,5 @@ static StrItem* newStrItem(const char *s, StrItem *next)
static void deleteStrItem(StrItem *p)
{
- if (p)
- free((void*)p);
- p = NULL;
+ free((void*)p);
}
@@ -148,20 +167,20 @@ static void deleteStrItem(StrItem *p)
----------------------------------------------------------------------*/
-const char* vObjectName(VObject *o)
+DLLEXPORT(const char*) vObjectName(VObject *o)
{
return NAME_OF(o);
}
-void setVObjectName(VObject *o, const char* id)
+DLLEXPORT(void) setVObjectName(VObject *o, const char* id)
{
NAME_OF(o) = id;
}
-const char* vObjectStringZValue(VObject *o)
+DLLEXPORT(const char*) vObjectStringZValue(VObject *o)
{
return STRINGZ_VALUE_OF(o);
}
-void setVObjectStringZValue(VObject *o, const char *s)
+DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s)
{
STRINGZ_VALUE_OF(o) = dupStr(s,0);
@@ -169,5 +188,5 @@ void setVObjectStringZValue(VObject *o, const char *s)
}
-void setVObjectStringZValue_(VObject *o, const char *s)
+DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s)
{
STRINGZ_VALUE_OF(o) = s;
@@ -175,10 +194,10 @@ void setVObjectStringZValue_(VObject *o, const char *s)
}
-const wchar_t* vObjectUStringZValue(VObject *o)
+DLLEXPORT(const wchar_t*) vObjectUStringZValue(VObject *o)
{
return USTRINGZ_VALUE_OF(o);
}
-void setVObjectUStringZValue(VObject *o, const wchar_t *s)
+DLLEXPORT(void) setVObjectUStringZValue(VObject *o, const wchar_t *s)
{
USTRINGZ_VALUE_OF(o) = (wchar_t*) dupStr((char*)s,(uStrLen(s)+1)*2);
@@ -186,5 +205,5 @@ void setVObjectUStringZValue(VObject *o, const wchar_t *s)
}
-void setVObjectUStringZValue_(VObject *o, const wchar_t *s)
+DLLEXPORT(void) setVObjectUStringZValue_(VObject *o, const wchar_t *s)
{
USTRINGZ_VALUE_OF(o) = s;
@@ -192,10 +211,10 @@ void setVObjectUStringZValue_(VObject *o, const wchar_t *s)
}
-unsigned int vObjectIntegerValue(VObject *o)
+DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o)
{
return INTEGER_VALUE_OF(o);
}
-void setVObjectIntegerValue(VObject *o, unsigned int i)
+DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i)
{
INTEGER_VALUE_OF(o) = i;
@@ -203,10 +222,10 @@ void setVObjectIntegerValue(VObject *o, unsigned int i)
}
-unsigned long vObjectLongValue(VObject *o)
+DLLEXPORT(unsigned long) vObjectLongValue(VObject *o)
{
return LONG_VALUE_OF(o);
}
-void setVObjectLongValue(VObject *o, unsigned long l)
+DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l)
{
LONG_VALUE_OF(o) = l;
@@ -214,10 +233,10 @@ void setVObjectLongValue(VObject *o, unsigned long l)
}
-void* vObjectAnyValue(VObject *o)
+DLLEXPORT(void*) vObjectAnyValue(VObject *o)
{
return ANY_VALUE_OF(o);
}
-void setVObjectAnyValue(VObject *o, void *t)
+DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t)
{
ANY_VALUE_OF(o) = t;
@@ -225,10 +244,10 @@ void setVObjectAnyValue(VObject *o, void *t)
}
-VObject* vObjectVObjectValue(VObject *o)
+DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o)
{
return VOBJECT_VALUE_OF(o);
}
-void setVObjectVObjectValue(VObject *o, VObject *p)
+DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p)
{
VOBJECT_VALUE_OF(o) = p;
@@ -236,5 +255,5 @@ void setVObjectVObjectValue(VObject *o, VObject *p)
}
-int vObjectValueType(VObject *o)
+DLLEXPORT(int) vObjectValueType(VObject *o)
{
return VALUE_TYPE(o);
@@ -246,5 +265,5 @@ int vObjectValueType(VObject *o)
----------------------------------------------------------------------*/
-VObject* addVObjectProp(VObject *o, VObject *p)
+DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p)
{
/* circular link list pointed to tail */
@@ -281,15 +300,15 @@ VObject* addVObjectProp(VObject *o, VObject *p)
}
-VObject* addProp(VObject *o, const char *id)
+DLLEXPORT(VObject*) addProp(VObject *o, const char *id)
{
return addVObjectProp(o,newVObject(id));
}
-VObject* addProp_(VObject *o, const char *id)
+DLLEXPORT(VObject*) addProp_(VObject *o, const char *id)
{
return addVObjectProp(o,newVObject_(id));
}
-void addList(VObject **o, VObject *p)
+DLLEXPORT(void) addList(VObject **o, VObject *p)
{
p->next = 0;
@@ -306,10 +325,10 @@ void addList(VObject **o, VObject *p)
}
-VObject* nextVObjectInList(VObject *o)
+DLLEXPORT(VObject*) nextVObjectInList(VObject *o)
{
return o->next;
}
-VObject* setValueWithSize_(VObject *prop, void *val, unsigned int size)
+DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size)
{
VObject *sizeProp;
@@ -320,11 +339,11 @@ VObject* setValueWithSize_(VObject *prop, void *val, unsigned int size)
}
-VObject* setValueWithSize(VObject *prop, void *val, unsigned int size)
+DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size)
{
- void *p = dupStr(val,size);
+ void *p = dupStr((const char *)val,size);
return setValueWithSize_(prop,p,p?size:0);
}
-void initPropIterator(VObjectIterator *i, VObject *o)
+DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o)
{
i->start = o->prop;
@@ -332,5 +351,5 @@ void initPropIterator(VObjectIterator *i, VObject *o)
}
-void initVObjectIterator(VObjectIterator *i, VObject *o)
+DLLEXPORT(void) initVObjectIterator(VObjectIterator *i, VObject *o)
{
i->start = o->next;
@@ -338,10 +357,10 @@ void initVObjectIterator(VObjectIterator *i, VObject *o)
}
-int moreIteration(VObjectIterator *i)
+DLLEXPORT(int) moreIteration(VObjectIterator *i)
{
return (i->start && (i->next==0 || i->next!=i->start));
}
-VObject* nextVObject(VObjectIterator *i)
+DLLEXPORT(VObject*) nextVObject(VObjectIterator *i)
{
if (i->start && i->next != i->start) {
@@ -358,5 +377,5 @@ VObject* nextVObject(VObjectIterator *i)
}
-VObject* isAPropertyOf(VObject *o, const char *id)
+DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id)
{
VObjectIterator i;
@@ -364,5 +383,5 @@ VObject* isAPropertyOf(VObject *o, const char *id)
while (moreIteration(&i)) {
VObject *each = nextVObject(&i);
- if (!strcasecmp(id,each->id))
+ if (!stricmp(id,each->id))
return each;
}
@@ -370,5 +389,5 @@ VObject* isAPropertyOf(VObject *o, const char *id)
}
-VObject* addGroup(VObject *o, const char *g)
+DLLEXPORT(VObject*) addGroup(VObject *o, const char *g)
{
/*
@@ -411,5 +430,5 @@ VObject* addGroup(VObject *o, const char *g)
}
-VObject* addPropValue(VObject *o, const char *p, const char *v)
+DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v)
{
VObject *prop;
@@ -419,5 +438,5 @@ VObject* addPropValue(VObject *o, const char *p, const char *v)
}
-VObject* addPropSizedValue_(VObject *o, const char *p, const char *v,
+DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v,
unsigned int size)
{
@@ -428,5 +447,5 @@ VObject* addPropSizedValue_(VObject *o, const char *p, const char *v,
}
-VObject* addPropSizedValue(VObject *o, const char *p, const char *v,
+DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v,
unsigned int size)
{
@@ -529,5 +548,5 @@ void printVObject(FILE *fp,VObject *o)
}
-void printVObjectToFile(char *fname,VObject *o)
+DLLEXPORT(void) printVObjectToFile(char *fname,VObject *o)
{
FILE *fp = fopen(fname,"w");
@@ -538,5 +557,5 @@ void printVObjectToFile(char *fname,VObject *o)
}
-void printVObjectsToFile(char *fname,VObject *list)
+DLLEXPORT(void) printVObjectsToFile(char *fname,VObject *list)
{
FILE *fp = fopen(fname,"w");
@@ -550,5 +569,5 @@ void printVObjectsToFile(char *fname,VObject *list)
}
-void cleanVObject(VObject *o)
+DLLEXPORT(void) cleanVObject(VObject *o)
{
if (o == 0) return;
@@ -574,5 +593,5 @@ void cleanVObject(VObject *o)
case VCVT_STRINGZ:
case VCVT_RAW:
- /* assume they are all allocated by malloc. */
+ /* assume they are all allocated by malloc. */
free((char*)STRINGZ_VALUE_OF(o));
break;
@@ -584,5 +603,5 @@ void cleanVObject(VObject *o)
}
-void cleanVObjects(VObject *list)
+DLLEXPORT(void) cleanVObjects(VObject *list)
{
while (list) {
@@ -611,67 +630,63 @@ static unsigned int hashStr(const char *s)
}
-const char* lookupStr(const char *s)
+DLLEXPORT(const char*) lookupStr(const char *s)
{
- char *newS;
-
- StrItem *t;
- unsigned int h = hashStr(s);
- if ((t = strTbl[h]) != 0) {
- do {
- if (strcasecmp(t->s,s) == 0) {
- t->refCnt++;
- return t->s;
- }
- t = t->next;
- } while (t);
- }
- newS = dupStr(s,0);
- strTbl[h] = newStrItem(newS,strTbl[h]);
- return newS;
+ StrItem *t;
+ unsigned int h = hashStr(s);
+ if ((t = strTbl[h]) != 0) {
+ do {
+ if (stricmp(t->s,s) == 0) {
+ t->refCnt++;
+ return t->s;
+ }
+ t = t->next;
+ } while (t);
+ }
+ s = dupStr(s,0);
+ strTbl[h] = newStrItem(s,strTbl[h]);
+ return s;
}
-void unUseStr(const char *s)
+DLLEXPORT(void) unUseStr(const char *s)
{
- StrItem *cur, *prev;
-
+ StrItem *t, *p;
unsigned int h = hashStr(s);
- cur = strTbl[h];
- prev = cur;
- while (cur != 0) {
- if (strcasecmp(cur->s,s) == 0) {
- cur->refCnt--;
- /* if that was the last reference to this string, kill it. */
- if (cur->refCnt == 0) {
- if (cur == strTbl[h]) {
- strTbl[h] = cur->next;
- deleteStr(prev->s);
- deleteStrItem(prev);
- } else {
- prev->next = cur->next;
- deleteStr(cur->s);
- deleteStrItem(cur);
- }
- return;
+ if ((t = strTbl[h]) != 0) {
+ p = t;
+ do {
+ if (stricmp(t->s,s) == 0) {
+ t->refCnt--;
+ if (t->refCnt == 0) {
+ if (p == strTbl[h]) {
+ strTbl[h] = t->next;
+ }
+ else {
+ p->next = t->next;
+ }
+ deleteStr(t->s);
+ deleteStrItem(t);
+ return;
+ }
+ }
+ p = t;
+ t = t->next;
+ } while (t);
}
- }
- prev = cur;
- cur = cur->next;
- }
}
-void cleanStrTbl()
+DLLEXPORT(void) cleanStrTbl()
{
- int i;
- for (i=0; i<STRTBLSIZE;i++) {
- StrItem *t = strTbl[i];
- while (t) {
- StrItem *p;
- deleteStr(t->s);
- p = t;
- t = t->next;
- deleteStrItem(p);
- }
- strTbl[i] = 0;
- }
+ int i;
+ for (i=0; i<STRTBLSIZE;i++) {
+ StrItem *t = strTbl[i];
+ while (t) {
+ StrItem *p;
+ deleteStr(t->s);
+ p = t;
+ t = t->next;
+ deleteStrItem(p);
+ } while (t);
+ strTbl[i] = 0;
+ }
}
@@ -808,5 +823,5 @@ static struct PreDefProp propNames[] = {
{ VCEWorldProp, 0, 0, 0 },
{ VCExNumProp, 0, 0, 0 },
- { VCExDateProp, 0, 0, 0 },
+ { VCExpDateProp, 0, 0, 0 },
{ VCExpectProp, 0, 0, 0 },
{ VCExtAddressProp, 0, 0, 0 },
@@ -922,5 +937,5 @@ static struct PreDefProp* lookupPropInfo(const char* str)
for (i = 0; propNames[i].name; i++)
- if (strcasecmp(str, propNames[i].name) == 0) {
+ if (stricmp(str, propNames[i].name) == 0) {
return &propNames[i];
}
@@ -930,10 +945,10 @@ static struct PreDefProp* lookupPropInfo(const char* str)
-const char* lookupProp_(const char* str)
+DLLEXPORT(const char*) lookupProp_(const char* str)
{
int i;
for (i = 0; propNames[i].name; i++)
- if (strcasecmp(str, propNames[i].name) == 0) {
+ if (stricmp(str, propNames[i].name) == 0) {
const char* s;
s = propNames[i].alias?propNames[i].alias:propNames[i].name;
@@ -944,10 +959,10 @@ const char* lookupProp_(const char* str)
-const char* lookupProp(const char* str)
+DLLEXPORT(const char*) lookupProp(const char* str)
{
int i;
for (i = 0; propNames[i].name; i++)
- if (strcasecmp(str, propNames[i].name) == 0) {
+ if (stricmp(str, propNames[i].name) == 0) {
const char *s;
fieldedProp = propNames[i].fields;
@@ -973,9 +988,5 @@ typedef struct OFile {
} OFile;
-
-/* vCalendar files need crlf linebreaks. The disabled functions didn't provide
- that. */
#if 0
-
static void appendsOFile(OFile *fp, const char *s)
{
@@ -996,8 +1007,5 @@ stuff:
fp->limit = fp->limit + OFILE_REALLOC_SIZE;
if (OFILE_REALLOC_SIZE <= slen) fp->limit += slen;
- if (fp->s)
- fp->s = realloc(fp->s,fp->limit);
- else
- fp->s = malloc(fp->limit);
+ fp->s = (char *) realloc(fp->s,fp->limit);
if (fp->s) goto stuff;
}
@@ -1024,5 +1032,5 @@ stuff:
else if (fp->alloc) {
fp->limit = fp->limit + OFILE_REALLOC_SIZE;
- fp->s = realloc(fp->s,fp->limit);
+ fp->s = (char *) realloc(fp->s,fp->limit);
if (fp->s) goto stuff;
}
@@ -1033,7 +1041,5 @@ stuff:
}
}
-
#else
-
static void appendcOFile_(OFile *fp, char c)
{
@@ -1116,5 +1122,5 @@ static int writeBase64(OFile *fp, unsigned char *s, long len)
while (cur < len) {
- /* collect the triplet of bytes into 'trip' */
+ /* collect the triplet of bytes into 'trip' */
trip = 0;
for (i = 0; i < 3; i++) {
@@ -1128,5 +1134,5 @@ static int writeBase64(OFile *fp, unsigned char *s, long len)
trip = trip >> 6;
if ((3 - i) < (cur - len))
- quad[i] = '='; /* pad char */
+ quad[i] = '='; /* pad char */
else if (b < 26) quad[i] = (char)b + 'A';
else if (b < 52) quad[i] = (char)(b - 26) + 'a';
@@ -1146,23 +1152,40 @@ static int writeBase64(OFile *fp, unsigned char *s, long len)
}
-/* this function really sucks. Too basic. */
-static void writeQPString(OFile *fp, const char *s, int qp)
+static void writeString(OFile *fp, const char *s)
+{
+ appendsOFile(fp,s);
+}
+
+static void writeQPString(OFile *fp, const char *s)
{
+ char buf[4];
+ int count=0;
const char *p = s;
+
while (*p) {
- if (*p == '\n') {
- if (p[1]) appendsOFile(fp,"=0A=");
- }
- if (*p == '=' && qp)
- appendsOFile(fp,"=3D");
- else
- appendcOFile(fp,*p);
- p++;
+ /* break up lines biggger than 75 chars */
+ if(count >=74){
+ count=0;
+ appendsOFile(fp,"=\n");
+ }
+
+ /* escape any non ASCII characters and '=' as per rfc1521 */
+ if (*p<= 0x1f || *p >=0x7f || *p == '=' ) {
+ sprintf(buf,"=%02X",(unsigned char)*p);
+ appendsOFile(fp,buf);
+ count+=3;
+ } else {
+ appendcOFile(fp,*p);
+ count++;
+ }
+ p++;
}
}
+
+
static void writeVObject_(OFile *fp, VObject *o);
-static void writeValue(OFile *fp, VObject *o, unsigned long size)
+static void writeValue(OFile *fp, VObject *o, unsigned long size,int quote)
{
if (o == 0) return;
@@ -1170,16 +1193,12 @@ static void writeValue(OFile *fp, VObject *o, unsigned long size)
case VCVT_USTRINGZ: {
char *s = fakeCString(USTRINGZ_VALUE_OF(o));
- if (isAPropertyOf(o, VCQuotedPrintableProp))
- writeQPString(fp, s, 1);
- else
- writeQPString(fp, s, 0);
+ if(quote) writeQPString(fp, s);
+ else writeString(fp,s);
deleteStr(s);
break;
}
case VCVT_STRINGZ: {
- if (isAPropertyOf(o, VCQuotedPrintableProp))
- writeQPString(fp, STRINGZ_VALUE_OF(o), 1);
- else
- writeQPString(fp, STRINGZ_VALUE_OF(o), 0);
+ if(quote) writeQPString(fp, STRINGZ_VALUE_OF(o));
+ else writeString(fp,STRINGZ_VALUE_OF(o));
break;
}
@@ -1221,5 +1240,5 @@ static void writeAttrValue(OFile *fp, VObject *o)
if (VALUE_TYPE(o)) {
appendcOFile(fp,'=');
- writeValue(fp,o,0);
+ writeValue(fp,o,0,0);
}
}
@@ -1231,8 +1250,7 @@ static void writeGroup(OFile *fp, VObject *o)
strcpy(buf1,NAME_OF(o));
while ((o=isAPropertyOf(o,VCGroupingProp)) != 0) {
- strncpy(buf2,STRINGZ_VALUE_OF(o),sizeof(buf2));
- buf2[sizeof(buf2)] = '\0';
- strncat(buf2,".",sizeof(buf2)-strlen(buf2)-1);
- strncat(buf2,buf1,sizeof(buf2)-strlen(buf2)-1);
+ strcpy(buf2,STRINGZ_VALUE_OF(o));
+ strcat(buf2,".");
+ strcat(buf2,buf1);
strcpy(buf1,buf2);
}
@@ -1244,5 +1262,5 @@ static int inList(const char **list, const char *s)
if (list == 0) return 0;
while (*list) {
- if (strcasecmp(*list,s) == 0) return 1;
+ if (stricmp(*list,s) == 0) return 1;
list++;
}
@@ -1252,4 +1270,5 @@ static int inList(const char **list, const char *s)
static void writeProp(OFile *fp, VObject *o)
{
+ int isQuoted=0;
if (NAME_OF(o)) {
struct PreDefProp *pi;
@@ -1271,6 +1290,8 @@ static void writeProp(OFile *fp, VObject *o)
VObject *eachProp = nextVObject(&t);
s = NAME_OF(eachProp);
- if (strcasecmp(VCGroupingProp,s) && !inList(fields_,s))
+ if (stricmp(VCGroupingProp,s) && !inList(fields_,s))
writeAttrValue(fp,eachProp);
+ if (stricmp(VCQPProp,s)==0 || stricmp(VCQuotedPrintableProp,s)==0)
+ isQuoted=1;
}
if (fields_) {
@@ -1280,12 +1301,12 @@ static void writeProp(OFile *fp, VObject *o)
appendcOFile(fp,':');
while (*fields) {
- VObject *tl = isAPropertyOf(o,*fields);
+ VObject *t = isAPropertyOf(o,*fields);
i++;
- if (tl) n = i;
+ if (t) n = i;
fields++;
}
fields = fields_;
for (i=0;i<n;i++) {
- writeValue(fp,isAPropertyOf(o,*fields),0);
+ writeValue(fp,isAPropertyOf(o,*fields),0,isQuoted);
fields++;
if (i<(n-1)) appendcOFile(fp,';');
@@ -1299,5 +1320,5 @@ static void writeProp(OFile *fp, VObject *o)
if (p) size = LONG_VALUE_OF(p);
appendcOFile(fp,':');
- writeValue(fp,o,size);
+ writeValue(fp,o,size,isQuoted);
}
@@ -1336,5 +1357,5 @@ void writeVObject(FILE *fp, VObject *o)
}
-void writeVObjectToFile(char *fname, VObject *o)
+DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o)
{
FILE *fp = fopen(fname,"w");
@@ -1345,5 +1366,5 @@ void writeVObjectToFile(char *fname, VObject *o)
}
-void writeVObjectsToFile(char *fname, VObject *list)
+DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list)
{
FILE *fp = fopen(fname,"w");
@@ -1357,5 +1378,5 @@ void writeVObjectsToFile(char *fname, VObject *list)
}
-char* writeMemVObject(char *s, int *len, VObject *o)
+DLLEXPORT(char*) writeMemVObject(char *s, int *len, VObject *o)
{
OFile ofp;
@@ -1367,5 +1388,5 @@ char* writeMemVObject(char *s, int *len, VObject *o)
}
-char* writeMemVObjects(char *s, int *len, VObject *list)
+DLLEXPORT(char*) writeMemVObjects(char *s, int *len, VObject *list)
{
OFile ofp;
@@ -1383,5 +1404,5 @@ char* writeMemVObjects(char *s, int *len, VObject *list)
APIs to do fake Unicode stuff.
----------------------------------------------------------------------*/
-wchar_t* fakeUnicode(const char *ps, int *bytes)
+DLLEXPORT(wchar_t*) fakeUnicode(const char *ps, int *bytes)
{
wchar_t *r, *pw;
@@ -1406,5 +1427,5 @@ wchar_t* fakeUnicode(const char *ps, int *bytes)
}
-int uStrLen(const wchar_t *u)
+DLLEXPORT(int) uStrLen(const wchar_t *u)
{
int i = 0;
@@ -1413,9 +1434,9 @@ int uStrLen(const wchar_t *u)
}
-char* fakeCString(const wchar_t *u)
+DLLEXPORT(char*) fakeCString(const wchar_t *u)
{
char *s, *t;
int len = uStrLen(u) + 1;
- t = s = (char*)malloc(len+1);
+ t = s = (char*)malloc(len);
while (*u) {
if (*u == (wchar_t)0x2028)