Commit aed2c025 authored by Jonathan Beck's avatar Jonathan Beck

fix some warnings and indent

parent 0bca81e7
......@@ -20,6 +20,7 @@
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
#include <readline/readline.h>
......
......@@ -87,7 +87,7 @@ int main(int argc, char *argv[])
iphone_afc_get_file_attr(afc, "/iTunesOnTheGoPlaylist.plist", &stbuf);
if (IPHONE_E_SUCCESS ==
iphone_afc_open_file(afc, "/iTunesOnTheGoPlaylist.plist", IPHONE_AFC_FILE_READ, &my_file) && my_file) {
printf("A file size: %i\n", stbuf.st_size);
printf("A file size: %i\n", (int) stbuf.st_size);
char *file_data = (char *) malloc(sizeof(char) * stbuf.st_size);
iphone_afc_read_file(afc, my_file, file_data, stbuf.st_size, &bytes);
if (bytes >= 0) {
......
......@@ -5,171 +5,178 @@
#include "../src/plist.h"
#include "plutil.h"
#include <glib.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int debug = 0;
void print_nodes(bplist_node *root_node) {
void print_nodes(bplist_node * root_node)
{
// Yay, great. Let's print the list of nodes recursively...
int i = 0;
if (!root_node) return; // or not, because the programmer's stupid.
if (!root_node)
return; // or not, because the programmer's stupid.
switch (root_node->type) {
case BPLIST_DICT:
printf("Dictionary node.\nLength %i\n", root_node->length);
for (i = 0; i < (root_node->length * 2); i+=2) {
// HI!
printf("Key: ");
print_nodes(root_node->subnodes[i]);
printf("Value: ");
print_nodes(root_node->subnodes[i+1]);
}
printf("End dictionary node.\n\n");
break;
case BPLIST_ARRAY:
printf("Array node.\n");
for (i = 0; i < root_node->length; i++) {
printf("\tElement %i: ", i);
print_nodes(root_node->subnodes[i]);
}
break;
case BPLIST_INT:
if (root_node->length == sizeof(uint8_t)) {
printf("Integer: %i\n", root_node->intval8);
} else if (root_node->length == sizeof(uint16_t)) {
printf("Integer: %i\n", root_node->intval16);
} else if (root_node->length == sizeof(uint32_t)) {
printf("Integer: %i\n", root_node->intval32);
}
break;
case BPLIST_STRING:
printf("String: ");
fwrite(root_node->strval, sizeof(char), root_node->length, stdout);
fflush(stdout);
printf("\n");
break;
case BPLIST_DATA:
printf("Data: ");
char* data = g_base64_encode(root_node->strval,root_node->length);
fwrite(format_string(data, 60, 0), sizeof(char), strlen(data), stdout);
fflush(stdout);
printf("\n");
break;
case BPLIST_UNICODE:
printf("Unicode data, may appear crappy: ");
fwrite(root_node->unicodeval, sizeof(wchar_t), root_node->length, stdout);
fflush(stdout);
printf("\n");
break;
case BPLIST_TRUE:
printf("True.\n");
break;
case BPLIST_FALSE:
printf("False.\n");
break;
case BPLIST_REAL:
case BPLIST_DATE:
printf("Real(?): %f\n", root_node->realval);
break;
default:
printf("oops\nType set to %x and length is %i\n", root_node->type, root_node->length);
break;
case BPLIST_DICT:
printf("Dictionary node.\nLength %lu\n", (long unsigned int) root_node->length);
for (i = 0; i < (root_node->length * 2); i += 2) {
// HI!
printf("Key: ");
print_nodes(root_node->subnodes[i]);
printf("Value: ");
print_nodes(root_node->subnodes[i + 1]);
}
printf("End dictionary node.\n\n");
break;
case BPLIST_ARRAY:
printf("Array node.\n");
for (i = 0; i < root_node->length; i++) {
printf("\tElement %i: ", i);
print_nodes(root_node->subnodes[i]);
}
break;
case BPLIST_INT:
if (root_node->length == sizeof(uint8_t)) {
printf("Integer: %i\n", root_node->intval8);
} else if (root_node->length == sizeof(uint16_t)) {
printf("Integer: %i\n", root_node->intval16);
} else if (root_node->length == sizeof(uint32_t)) {
printf("Integer: %i\n", root_node->intval32);
}
break;
case BPLIST_STRING:
printf("String: ");
fwrite(root_node->strval, sizeof(char), root_node->length, stdout);
fflush(stdout);
printf("\n");
break;
case BPLIST_DATA:
printf("Data: ");
char *data = g_base64_encode(root_node->strval, root_node->length);
fwrite(format_string(data, 60, 0), sizeof(char), strlen(data), stdout);
fflush(stdout);
printf("\n");
break;
case BPLIST_UNICODE:
printf("Unicode data, may appear crappy: ");
fwrite(root_node->unicodeval, sizeof(wchar_t), root_node->length, stdout);
fflush(stdout);
printf("\n");
break;
case BPLIST_TRUE:
printf("True.\n");
break;
case BPLIST_FALSE:
printf("False.\n");
break;
case BPLIST_REAL:
case BPLIST_DATE:
printf("Real(?): %f\n", root_node->realval);
break;
default:
printf("oops\nType set to %x and length is %lu\n", root_node->type, (long unsigned int) root_node->length);
break;
}
}
int main(int argc, char *argv[]) {
struct stat *filestats = (struct stat *)malloc(sizeof(struct stat));
int main(int argc, char *argv[])
{
struct stat *filestats = (struct stat *) malloc(sizeof(struct stat));
uint32_t position = 0;
Options *options = parse_arguments(argc, argv);
int argh = 0;
printf("plistutil version 0.2 written by FxChiP\n");
if (!options) {
print_usage();
return 0;
}
debug = options->debug;
iphone_set_debug(options->debug);
FILE *bplist = fopen(options->in_file, "r");
stat(options->in_file, filestats);
printf("here?\n");
char *bplist_entire = (char*)malloc(sizeof(char) * (filestats->st_size + 1));
char *bplist_entire = (char *) malloc(sizeof(char) * (filestats->st_size + 1));
//argh = fgets(bplist_entire, filestats->st_size, bplist);
argh = fread(bplist_entire, sizeof(char), filestats->st_size, bplist);
printf("read %i bytes\n", argh);
fclose(bplist);
printf("or here?\n");
// bplist_entire contains our stuff
bplist_node *root_node;
root_node = parse_nodes(bplist_entire, filestats->st_size, &position);
printf("plutil debug mode\n\n");
printf("file size %i\n\n", filestats->st_size);
if (!root_node) {
printf("Invalid binary plist (or some other error occurred.)\n");
return 0;
bplist_node *root_node;
root_node = parse_nodes(bplist_entire, filestats->st_size, &position);
printf("plutil debug mode\n\n");
printf("file size %i\n\n", (int) filestats->st_size);
if (!root_node) {
printf("Invalid binary plist (or some other error occurred.)\n");
return 0;
}
print_nodes(root_node);
return 0;
}
print_nodes(root_node);
return 0;
}
Options *parse_arguments(int argc, char *argv[]) {
Options *parse_arguments(int argc, char *argv[])
{
int i = 0;
Options *options = (Options*)malloc(sizeof(Options));
Options *options = (Options *) malloc(sizeof(Options));
memset(options, 0, sizeof(Options));
for (i = 1; i < argc; i++) {
if (!strcmp(argv[i], "--infile") || !strcmp(argv[i], "-i")) {
if ((i+1) == argc) {
if ((i + 1) == argc) {
free(options);
return NULL;
}
options->in_file = argv[i+1];
options->in_file = argv[i + 1];
i++;
continue;
}
if (!strcmp(argv[i], "--outfile") || !strcmp(argv[i], "-o")) {
if ((i+1) == argc) {
if ((i + 1) == argc) {
free(options);
return NULL;
}
options->out_file = argv[i+1];
options->out_file = argv[i + 1];
i++;
continue;
}
if (!strcmp(argv[i], "--debug") || !strcmp(argv[i], "-d") || !strcmp(argv[i], "-v")) {
options->debug = 1;
}
if (!strcmp(argv[i], "--help") || !strcmp(argv[i], "-h")) {
free(options);
return NULL;
}
}
if (!options->in_file /*|| !options->out_file*/) {
if (!options->in_file /*|| !options->out_file */ ) {
free(options);
return NULL;
}
return options;
}
void print_usage() {
void print_usage()
{
printf("Usage: plistutil -i|--infile in_file.plist -o|--outfile out_file.plist [--debug]\n");
printf("\n");
printf("\t-i or --infile: The file to read in.\n");
......
This diff is collapsed.
......@@ -31,6 +31,7 @@
#include <sys/stat.h>
#include <unistd.h>
char *format_string(const char *buf, int cols, int depth);
xmlNode *add_key_dict_node(xmlDocPtr plist, xmlNode * dict, const char *key, const char *value, int depth);
xmlNode *add_key_str_dict_element(xmlDocPtr plist, xmlNode * dict, const char *key, const char *value, int depth);
xmlNode *add_key_data_dict_element(xmlDocPtr plist, xmlNode * dict, const char *key, const char *value, int depth);
......@@ -47,7 +48,7 @@ void free_dictionary(char **dictionary);
enum {
BPLIST_TRUE = 0x08,
BPLIST_FALSE = 0x09,
BPLIST_FILL = 0x0F, /* will be used for length grabbing */
BPLIST_FILL = 0x0F, /* will be used for length grabbing */
BPLIST_INT = 0x10,
BPLIST_REAL = 0x20,
BPLIST_DATE = 0x33,
......@@ -62,15 +63,17 @@ enum {
};
typedef struct _bplist_node {
struct _bplist_node *next, **subnodes; // subnodes is for arrays, dicts and (potentially) sets.
struct _bplist_node *next, **subnodes; // subnodes is for arrays, dicts and (potentially) sets.
uint64_t length, intval64;
uint32_t intval32; // length = subnodes
uint32_t intval32; // length = subnodes
uint16_t intval16;
uint8_t intval8;
uint8_t type, *indexes; // indexes for array-types; essentially specify the order in which to access for key => value pairs
uint8_t type, *indexes; // indexes for array-types; essentially specify the order in which to access for key => value pairs
char *strval;
double realval;
wchar_t *unicodeval;
} bplist_node;
bplist_node *parse_nodes(const char *bpbuffer, uint32_t bplength, uint32_t * position);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment