Exemple #1
0
static void writeResourceData(AbstractFile* file, ResourceData* data, FlipDataFunc flipData, int tabLength) {
  unsigned char* dataBuf;
  char* tabs;
  int i;
  
  tabs = (char*) malloc(sizeof(char) * (tabLength + 1));
  for(i = 0; i < tabLength; i++) {
    tabs[i] = '\t';
  }
  tabs[tabLength] = '\0';
  
  abstractFilePrint(file, "%s<dict>\n", tabs);
  abstractFilePrint(file, "%s\t<key>Attributes</key>\n%s\t<string>0x%04x</string>\n", tabs, tabs, data->attributes);
  abstractFilePrint(file, "%s\t<key>Data</key>\n%s\t<data>\n", tabs, tabs);
  
  if(flipData) {
    dataBuf = (unsigned char*) malloc(data->dataLength);
    memcpy(dataBuf, data->data, data->dataLength);
    (*flipData)(dataBuf, 1);
    writeBase64(file, dataBuf, data->dataLength, tabLength + 1, 43);
    free(dataBuf);
  } else {
    writeBase64(file, data->data, data->dataLength, tabLength + 1, 43);
  }
  
  abstractFilePrint(file, "%s\t</data>\n", tabs);
  abstractFilePrint(file, "%s\t<key>ID</key>\n%s\t<string>%d</string>\n", tabs, tabs, data->id);
  abstractFilePrint(file, "%s\t<key>Name</key>\n%s\t<string>%s</string>\n", tabs, tabs, data->name);
  abstractFilePrint(file, "%s</dict>\n", tabs);
  
  free(tabs);
}
Exemple #2
0
static void writeValue(OFile *fp, VObject *o, unsigned long size, bool nosemi)
{
    if (o == 0) return;
    switch (VALUE_TYPE(o)) {
	case VCVT_STRINGZ: {
	    writeEncString(fp, STRINGZ_VALUE_OF(o), nosemi);
	    break;
	    }
	case VCVT_UINT: {
	    char buf[16];
	    sprintf(buf,"%u", INTEGER_VALUE_OF(o));
	    appendsOFile(fp,buf);
	    break;
	    }
	case VCVT_ULONG: {
	    char buf[16];
	    sprintf(buf,"%lu", LONG_VALUE_OF(o));
	    appendsOFile(fp,buf);
	    break;
	    }
	case VCVT_RAW: {
	    appendcOFile(fp,'\n');
	    writeBase64(fp,(unsigned char*)(ANY_VALUE_OF(o)),size);
	    break;
	    }
	case VCVT_VOBJECT:
	    appendcOFile(fp,'\n');
	    writeVObject_(fp,VOBJECT_VALUE_OF(o));
	    break;
	}
}
Exemple #3
0
static void writeEncString(OFile *fp, const char *s, bool nosemi)
{
    /*
	only A-Z, 0-9 and
       "'"  (ASCII code 39)
       "("  (ASCII code 40)
       ")"  (ASCII code 41)
       "+"  (ASCII code 43)
       ","  (ASCII code 44)
       "-"  (ASCII code 45)
       "/"  (ASCII code 47)
       "?"  (ASCII code 63)

       should remain un-encoded.
       '=' needs to be encoded as it is the escape character.
       ';' needs to be as it is a field separator.

     */
    const char *p = s;
    switch ( vobj_enc ) {
	case EightBit:
	    while (*p) {
		if ( *p == '\n' || nosemi && ( *p == '\\' || *p == ';' ) )
		    appendcOFile(fp, '\\');
		appendcOFile(fp, *p);
		p++;
	    }
	    break;
	case QuotedPrintable:
	    while (*p) {
		const char *rep = qpReplaceChar(*p);
		if (rep)
		    appendsOFile(fp, rep);
		else if ( *p == ';' && nosemi )
		    appendsOFile(fp, "=3B");
		else if ( *p == ' ' ) {
		    if ( !p[1] || p[1] == '\n' ) // RFC 1521
			appendsOFile(fp, "=20");
		    else
			appendcOFile(fp, *p);
		} else
		    appendcOFile(fp, *p);
		p++;
	    }
	    break;
	case Base64:
	    writeBase64(fp, (unsigned char*)p, strlen(p));
	    break;
    }
}
Exemple #4
0
static void writeValue(OFile *fp, VObject *o, unsigned long size)
{
    if (o == 0) return;
    switch (VALUE_TYPE(o)) {
	case VCVT_USTRINGZ: {
	    char *s = fakeCString(USTRINGZ_VALUE_OF(o));
	    if (isAPropertyOf(o, VCQuotedPrintableProp))
	      writeQPString(fp, s, 1);
	    else
	      writeQPString(fp, s, 0);
	    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);
	    break;
	    }
	case VCVT_UINT: {
	    char buf[16];
	    snprintf(buf,sizeof(buf),"%u", INTEGER_VALUE_OF(o));
	    appendsOFile(fp,buf);
	    break;
	    }
	case VCVT_ULONG: {
	    char buf[16];
	    snprintf(buf,sizeof(buf),"%lu", LONG_VALUE_OF(o));
	    appendsOFile(fp,buf);
	    break;
	    }
	case VCVT_RAW: {
	    appendcOFile(fp,'\n');
	    writeBase64(fp,(unsigned char*)(ANY_VALUE_OF(o)),size);
	    break;
	    }
	case VCVT_VOBJECT:
	    appendcOFile(fp,'\n');
	    writeVObject_(fp,VOBJECT_VALUE_OF(o));
	    break;
	}
}