Exemplo n.º 1
0
static void writeNSizResource(NSizResource* data, char* buffer) {
  char itemBuffer[1024];
  char* sha1Buffer;
  
  (*buffer) = '\0';
  itemBuffer[0] = '\0';
  
  strcat(buffer, plistHeader);
  if(data->sha1Digest != NULL) {
    sha1Buffer = convertBase64(data->sha1Digest, 20, 1, 42);
    sprintf(itemBuffer, "\t<key>SHA-1-digest</key>\n\t<data>\n%s\t</data>\n", sha1Buffer);
    free(sha1Buffer);
    strcat(buffer, itemBuffer);
  }
  sprintf(itemBuffer, "\t<key>block-checksum-2</key>\n\t<integer>%d</integer>\n", (int32_t)(data->blockChecksum2));
  strcat(buffer, itemBuffer);
  if(data->isVolume) {
    sprintf(itemBuffer, "\t<key>bytes</key>\n\t<integer>%d</integer>\n", (int32_t)(data->bytes));
    strcat(buffer, itemBuffer);
    sprintf(itemBuffer, "\t<key>date</key>\n\t<integer>%d</integer>\n", (int32_t)(data->modifyDate));
    strcat(buffer, itemBuffer);
  }
  sprintf(itemBuffer, "\t<key>part-num</key>\n\t<integer>%d</integer>\n", (int32_t)(data->partitionNumber));
  strcat(buffer, itemBuffer);
  sprintf(itemBuffer, "\t<key>version</key>\n\t<integer>%d</integer>\n", (int32_t)(data->version));
  strcat(buffer, itemBuffer);
  if(data->isVolume) {
    sprintf(itemBuffer, "\t<key>bytes</key>\n\t<integer>%d</integer>\n", (int32_t)(data->volumeSignature));
    strcat(buffer, itemBuffer);
  }
  strcat(buffer, plistFooter);
}
Exemplo n.º 2
0
char* getXmlFromDictionary(Dictionary* myself, int tabsCount) {
	char tabs[100];
	char buffer[4096];
	char* toReturn;
	char* ret;
	size_t toReturnSize;
	int i;
	DictValue* curValue;
	
	tabs[0] = '\0';
	for(i = 0; i < tabsCount; i++) {
		strcat(tabs, "\t");
	}

	
	sprintf(buffer, "%s<dict>\n", tabs);
	toReturnSize = sizeof(char) * (strlen(buffer) + 1);
	toReturn = malloc(toReturnSize);
	toReturn = strcpy(toReturn, buffer);
	
	curValue = myself->values;
	while(curValue != NULL) {
		sprintf(buffer, "%s\t<key>%s</key>\n", tabs, curValue->key);
		toReturnSize += sizeof(char) * (strlen(buffer) + 1);
		toReturn = realloc(toReturn, toReturnSize);
		toReturn = strcat(toReturn, buffer);
		
		if(curValue->type == DictionaryType) {
			ret = getXmlFromDictionary((Dictionary*)curValue, tabsCount + 1);
			toReturnSize += sizeof(char) * (strlen(ret) + 1);
			toReturn = realloc(toReturn, toReturnSize);
			toReturn = strcat(toReturn, ret);
			free(ret);
		} else if(curValue->type == StringType) {
			sprintf(buffer, "%s\t<string>%s</string>\n", tabs, ((StringValue*)curValue)->value);
			toReturnSize += sizeof(char) * (strlen(buffer) + 1);
			toReturn = realloc(toReturn, toReturnSize);
			toReturn = strcat(toReturn, buffer);
		} else if(curValue->type == DataType) {
			char* base64 = convertBase64(((DataValue*)curValue)->value, ((DataValue*)curValue)->len, 0, -1);
			sprintf(buffer, "%s\t<data>", tabs);
			toReturnSize += sizeof(char) * (strlen(buffer) + strlen(base64) + 1);
			toReturn = realloc(toReturn, toReturnSize);
			toReturn = strcat(toReturn, buffer);
			toReturn = strcat(toReturn, base64);
			sprintf(buffer, "</data>\n", tabs);
			toReturnSize += sizeof(char) * (strlen(buffer) + 1);
			toReturn = realloc(toReturn, toReturnSize);
			toReturn = strcat(toReturn, buffer);
			free(base64);
		} else if(curValue->type == IntegerType) {
			sprintf(buffer, "%s\t<integer>%d</integer>\n", tabs, ((IntegerValue*)curValue)->value);
			toReturnSize += sizeof(char) * (strlen(buffer) + 1);
			toReturn = realloc(toReturn, toReturnSize);
			toReturn = strcat(toReturn, buffer);
		} else if(curValue->type == ArrayType) {
			ret = getXmlFromArrayValue((ArrayValue*)curValue, tabsCount + 1);
			toReturnSize += sizeof(char) * (strlen(ret) + 1);
			toReturn = realloc(toReturn, toReturnSize);
			toReturn = strcat(toReturn, ret);
			free(ret);
		} else if(curValue->type == BoolType) {
			if(((BoolValue*)curValue)->value) {
				sprintf(buffer, "%s\t<true/>\n", tabs);
			} else {
				sprintf(buffer, "%s\t<false/>\n", tabs);
			}
			toReturnSize += sizeof(char) * (strlen(buffer) + 1);
			toReturn = realloc(toReturn, toReturnSize);
			toReturn = strcat(toReturn, buffer);
		}
		
		curValue = curValue->next;
	}
	
	sprintf(buffer, "%s</dict>\n", tabs);
	toReturnSize += sizeof(char) * (strlen(buffer) + 1);
	toReturn = realloc(toReturn, toReturnSize);
	toReturn = strcat(toReturn, buffer);
	
	return toReturn;
}