summaryrefslogtreecommitdiff
path: root/library/backend/vobject.cpp
Side-by-side diff
Diffstat (limited to 'library/backend/vobject.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/backend/vobject.cpp1
1 files changed, 1 insertions, 0 deletions
diff --git a/library/backend/vobject.cpp b/library/backend/vobject.cpp
index b6d17dc..4c8de70 100644
--- a/library/backend/vobject.cpp
+++ b/library/backend/vobject.cpp
@@ -568,384 +568,385 @@ struct PreDefProp {
unsigned int flags;
};
/* flags in PreDefProp */
#define PD_BEGIN 0x1
#define PD_INTERNAL 0x2
static const char *adrFields[] = {
VCPostalBoxProp,
VCExtAddressProp,
VCStreetAddressProp,
VCCityProp,
VCRegionProp,
VCPostalCodeProp,
VCCountryNameProp,
0
};
static const char *nameFields[] = {
VCFamilyNameProp,
VCGivenNameProp,
VCAdditionalNamesProp,
VCNamePrefixesProp,
VCNameSuffixesProp,
NULL
};
static const char *orgFields[] = {
VCOrgNameProp,
VCOrgUnitProp,
VCOrgUnit2Prop,
VCOrgUnit3Prop,
VCOrgUnit4Prop,
NULL
};
static const char *AAlarmFields[] = {
VCRunTimeProp,
VCSnoozeTimeProp,
VCRepeatCountProp,
VCAudioContentProp,
0
};
/* ExDate -- has unamed fields */
/* RDate -- has unamed fields */
static const char *DAlarmFields[] = {
VCRunTimeProp,
VCSnoozeTimeProp,
VCRepeatCountProp,
VCDisplayStringProp,
0
};
static const char *MAlarmFields[] = {
VCRunTimeProp,
VCSnoozeTimeProp,
VCRepeatCountProp,
VCEmailAddressProp,
VCNoteProp,
0
};
static const char *PAlarmFields[] = {
VCRunTimeProp,
VCSnoozeTimeProp,
VCRepeatCountProp,
VCProcedureNameProp,
0
};
static struct PreDefProp propNames[] = {
{ VC7bitProp, 0, 0, 0 },
{ VC8bitProp, 0, 0, 0 },
{ VCAAlarmProp, 0, AAlarmFields, 0 },
{ VCAdditionalNamesProp, 0, 0, 0 },
{ VCAdrProp, 0, adrFields, 0 },
{ VCAgentProp, 0, 0, 0 },
{ VCAIFFProp, 0, 0, 0 },
{ VCAOLProp, 0, 0, 0 },
{ VCAppleLinkProp, 0, 0, 0 },
{ VCAttachProp, 0, 0, 0 },
{ VCAttendeeProp, 0, 0, 0 },
{ VCATTMailProp, 0, 0, 0 },
{ VCAudioContentProp, 0, 0, 0 },
{ VCAVIProp, 0, 0, 0 },
{ VCBase64Prop, 0, 0, 0 },
{ VCBBSProp, 0, 0, 0 },
{ VCBirthDateProp, 0, 0, 0 },
{ VCBMPProp, 0, 0, 0 },
{ VCBodyProp, 0, 0, 0 },
{ VCBusinessRoleProp, 0, 0, 0 },
{ VCCalProp, 0, 0, PD_BEGIN },
{ VCCaptionProp, 0, 0, 0 },
{ VCCardProp, 0, 0, PD_BEGIN },
{ VCCarProp, 0, 0, 0 },
{ VCCategoriesProp, 0, 0, 0 },
{ VCCellularProp, 0, 0, 0 },
{ VCCGMProp, 0, 0, 0 },
{ VCCharSetProp, 0, 0, 0 },
{ VCCIDProp, VCContentIDProp, 0, 0 },
{ VCCISProp, 0, 0, 0 },
{ VCCityProp, 0, 0, 0 },
{ VCClassProp, 0, 0, 0 },
{ VCCommentProp, 0, 0, 0 },
{ VCCompletedProp, 0, 0, 0 },
{ VCContentIDProp, 0, 0, 0 },
{ VCCountryNameProp, 0, 0, 0 },
{ VCDAlarmProp, 0, DAlarmFields, 0 },
{ VCDataSizeProp, 0, 0, PD_INTERNAL },
{ VCDayLightProp, 0, 0, 0 },
{ VCDCreatedProp, 0, 0, 0 },
{ VCDeliveryLabelProp, 0, 0, 0 },
{ VCDescriptionProp, 0, 0, 0 },
{ VCDIBProp, 0, 0, 0 },
{ VCDisplayStringProp, 0, 0, 0 },
{ VCDomesticProp, 0, 0, 0 },
{ VCDTendProp, 0, 0, 0 },
{ VCDTstartProp, 0, 0, 0 },
{ VCDueProp, 0, 0, 0 },
{ VCEmailAddressProp, 0, 0, 0 },
{ VCEncodingProp, 0, 0, 0 },
{ VCEndProp, 0, 0, 0 },
{ VCEventProp, 0, 0, PD_BEGIN },
{ VCEWorldProp, 0, 0, 0 },
{ VCExNumProp, 0, 0, 0 },
{ VCExpDateProp, 0, 0, 0 },
{ VCExpectProp, 0, 0, 0 },
{ VCExtAddressProp, 0, 0, 0 },
{ VCFamilyNameProp, 0, 0, 0 },
{ VCFaxProp, 0, 0, 0 },
{ VCFullNameProp, 0, 0, 0 },
{ VCGeoLocationProp, 0, 0, 0 },
{ VCGeoProp, 0, 0, 0 },
{ VCGIFProp, 0, 0, 0 },
{ VCGivenNameProp, 0, 0, 0 },
{ VCGroupingProp, 0, 0, 0 },
{ VCHomeProp, 0, 0, 0 },
{ VCIBMMailProp, 0, 0, 0 },
{ VCInlineProp, 0, 0, 0 },
{ VCInternationalProp, 0, 0, 0 },
{ VCInternetProp, 0, 0, 0 },
{ VCISDNProp, 0, 0, 0 },
{ VCJPEGProp, 0, 0, 0 },
{ VCLanguageProp, 0, 0, 0 },
{ VCLastModifiedProp, 0, 0, 0 },
{ VCLastRevisedProp, 0, 0, 0 },
{ VCLocationProp, 0, 0, 0 },
{ VCLogoProp, 0, 0, 0 },
{ VCMailerProp, 0, 0, 0 },
{ VCMAlarmProp, 0, MAlarmFields, 0 },
{ VCMCIMailProp, 0, 0, 0 },
{ VCMessageProp, 0, 0, 0 },
{ VCMETProp, 0, 0, 0 },
{ VCModemProp, 0, 0, 0 },
{ VCMPEG2Prop, 0, 0, 0 },
{ VCMPEGProp, 0, 0, 0 },
{ VCMSNProp, 0, 0, 0 },
{ VCNamePrefixesProp, 0, 0, 0 },
{ VCNameProp, 0, nameFields, 0 },
{ VCNameSuffixesProp, 0, 0, 0 },
{ VCNoteProp, 0, 0, 0 },
{ VCOrgNameProp, 0, 0, 0 },
{ VCOrgProp, 0, orgFields, 0 },
{ VCOrgUnit2Prop, 0, 0, 0 },
{ VCOrgUnit3Prop, 0, 0, 0 },
{ VCOrgUnit4Prop, 0, 0, 0 },
{ VCOrgUnitProp, 0, 0, 0 },
{ VCPagerProp, 0, 0, 0 },
{ VCPAlarmProp, 0, PAlarmFields, 0 },
{ VCParcelProp, 0, 0, 0 },
{ VCPartProp, 0, 0, 0 },
{ VCPCMProp, 0, 0, 0 },
{ VCPDFProp, 0, 0, 0 },
{ VCPGPProp, 0, 0, 0 },
{ VCPhotoProp, 0, 0, 0 },
{ VCPICTProp, 0, 0, 0 },
{ VCPMBProp, 0, 0, 0 },
{ VCPostalBoxProp, 0, 0, 0 },
{ VCPostalCodeProp, 0, 0, 0 },
{ VCPostalProp, 0, 0, 0 },
{ VCPowerShareProp, 0, 0, 0 },
{ VCPreferredProp, 0, 0, 0 },
{ VCPriorityProp, 0, 0, 0 },
{ VCProcedureNameProp, 0, 0, 0 },
{ VCProdIdProp, 0, 0, 0 },
{ VCProdigyProp, 0, 0, 0 },
{ VCPronunciationProp, 0, 0, 0 },
{ VCPSProp, 0, 0, 0 },
{ VCPublicKeyProp, 0, 0, 0 },
{ VCQPProp, VCQuotedPrintableProp, 0, 0 },
+ { VCQPProp, VCBase64Prop, 0, 0 },
{ VCQuickTimeProp, 0, 0, 0 },
{ VCQuotedPrintableProp, 0, 0, 0 },
{ VCRDateProp, 0, 0, 0 },
{ VCRegionProp, 0, 0, 0 },
{ VCRelatedToProp, 0, 0, 0 },
{ VCRepeatCountProp, 0, 0, 0 },
{ VCResourcesProp, 0, 0, 0 },
{ VCRNumProp, 0, 0, 0 },
{ VCRoleProp, 0, 0, 0 },
{ VCRRuleProp, 0, 0, 0 },
{ VCRSVPProp, 0, 0, 0 },
{ VCRunTimeProp, 0, 0, 0 },
{ VCSequenceProp, 0, 0, 0 },
{ VCSnoozeTimeProp, 0, 0, 0 },
{ VCStartProp, 0, 0, 0 },
{ VCStatusProp, 0, 0, 0 },
{ VCStreetAddressProp, 0, 0, 0 },
{ VCSubTypeProp, 0, 0, 0 },
{ VCSummaryProp, 0, 0, 0 },
{ VCTelephoneProp, 0, 0, 0 },
{ VCTIFFProp, 0, 0, 0 },
{ VCTimeZoneProp, 0, 0, 0 },
{ VCTitleProp, 0, 0, 0 },
{ VCTLXProp, 0, 0, 0 },
{ VCTodoProp, 0, 0, PD_BEGIN },
{ VCTranspProp, 0, 0, 0 },
{ VCUniqueStringProp, 0, 0, 0 },
{ VCURLProp, 0, 0, 0 },
{ VCURLValueProp, 0, 0, 0 },
{ VCValueProp, 0, 0, 0 },
{ VCVersionProp, 0, 0, 0 },
{ VCVideoProp, 0, 0, 0 },
{ VCVoiceProp, 0, 0, 0 },
{ VCWAVEProp, 0, 0, 0 },
{ VCWMFProp, 0, 0, 0 },
{ VCWorkProp, 0, 0, 0 },
{ VCX400Prop, 0, 0, 0 },
{ VCX509Prop, 0, 0, 0 },
{ VCXRuleProp, 0, 0, 0 },
{ 0,0,0,0 }
};
static struct PreDefProp* lookupPropInfo(const char* str)
{
/* brute force for now, could use a hash table here. */
int i;
for (i = 0; propNames[i].name; i++)
if (qstricmp(str, propNames[i].name) == 0) {
return &propNames[i];
}
return 0;
}
DLLEXPORT(const char*) lookupProp_(const char* str)
{
int i;
for (i = 0; propNames[i].name; i++)
if (qstricmp(str, propNames[i].name) == 0) {
const char* s;
s = propNames[i].alias?propNames[i].alias:propNames[i].name;
return lookupStr(s);
}
return lookupStr(str);
}
DLLEXPORT(const char*) lookupProp(const char* str)
{
int i;
for (i = 0; propNames[i].name; i++)
if (qstricmp(str, propNames[i].name) == 0) {
const char *s;
fieldedProp = propNames[i].fields;
s = propNames[i].alias?propNames[i].alias:propNames[i].name;
return lookupStr(s);
}
fieldedProp = 0;
return lookupStr(str);
}
/*----------------------------------------------------------------------
APIs to Output text form.
----------------------------------------------------------------------*/
#define OFILE_REALLOC_SIZE 256
typedef struct OFile {
FILE *fp;
char *s;
int len;
int limit;
int alloc:1;
int fail:1;
} OFile;
#if 0
static void appendsOFile(OFile *fp, const char *s)
{
int slen;
if (fp->fail) return;
slen = strlen(s);
if (fp->fp) {
fwrite(s,1,slen,fp->fp);
}
else {
stuff:
if (fp->len + slen < fp->limit) {
memcpy(fp->s+fp->len,s,slen);
fp->len += slen;
return;
}
else if (fp->alloc) {
fp->limit = fp->limit + OFILE_REALLOC_SIZE;
if (OFILE_REALLOC_SIZE <= slen) fp->limit += slen;
fp->s = (char *) realloc(fp->s,fp->limit);
if (fp->s) goto stuff;
}
if (fp->alloc)
free(fp->s);
fp->s = 0;
fp->fail = 1;
}
}
static void appendcOFile(OFile *fp, char c)
{
if (fp->fail) return;
if (fp->fp) {
fputc(c,fp->fp);
}
else {
stuff:
if (fp->len+1 < fp->limit) {
fp->s[fp->len] = c;
fp->len++;
return;
}
else if (fp->alloc) {
fp->limit = fp->limit + OFILE_REALLOC_SIZE;
fp->s = (char *) realloc(fp->s,fp->limit);
if (fp->s) goto stuff;
}
if (fp->alloc)
free(fp->s);
fp->s = 0;
fp->fail = 1;
}
}
#else
static void appendcOFile_(OFile *fp, char c)
{
if (fp->fail) return;
if (fp->fp) {
fputc(c,fp->fp);
}
else {
stuff:
if (fp->len+1 < fp->limit) {
fp->s[fp->len] = c;
fp->len++;
return;
}
else if (fp->alloc) {
fp->limit = fp->limit + OFILE_REALLOC_SIZE;
fp->s = (char *)realloc(fp->s,fp->limit);
if (fp->s) goto stuff;
}
if (fp->alloc)
free(fp->s);
fp->s = 0;
fp->fail = 1;
}
}
static void appendcOFile(OFile *fp, char c)
{
if (c == '\n') {
/* write out as <CR><LF> */
appendcOFile_(fp,0xd);
appendcOFile_(fp,0xa);
}
else
appendcOFile_(fp,c);
}
static void appendsOFile(OFile *fp, const char *s)
{