Example of the various ways to interface with an Eet File
00001 /* 00002 * build: gcc -o eet_file eet-file.c `pkg-config --cflags --libs eet` 00003 */ 00004 #include <Eet.h> 00005 #include <stdio.h> 00006 #include <string.h> 00007 00008 static int 00009 create_eet_file(void) 00010 { 00011 Eet_File *ef; 00012 char buf[1024], *ptr; 00013 int size, len, i; 00014 const char *some_strings[] = { 00015 "And some more strings", 00016 "spread across several", 00017 "elements of an array!" 00018 }; 00019 const char some_data[] = 00020 "\x1e\xe7\x0f\x42\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x35" 00021 "\x00\x00\x00\xa0\x00\x00\x00\xa0\x00\x00\x00\x24\x00\x00\x00\x11" 00022 "\x00\x00\x00\x00\x2f\x6d\x69\x73\x74\x65\x72\x69\x6f\x75\x73\x2f" 00023 "\x64\x61\x74\x61\x00\x41\x6e\x20\x45\x45\x54\x20\x69\x6e\x73\x69" 00024 "\x64\x65\x20\x6f\x66\x20\x61\x6e\x20\x45\x45\x54\x21\x0a\x54\x68" 00025 "\x69\x73\x20\x77\x61\x73\x6e\x27\x74\x20\x72\x65\x61\x6c\x6c\x79" 00026 "\x20\x75\x73\x65\x66\x75\x6c\x20\x62\x75\x74\x20\x69\x74\x20\x68" 00027 "\x65\x6c\x70\x65\x64\x20\x74\x6f\x20\x73\x68\x6f\x77\x20\x68\x6f" 00028 "\x77\x0a\x74\x6f\x20\x75\x73\x65\x20\x65\x65\x74\x5f\x6d\x65\x6d" 00029 "\x6f\x70\x65\x6e\x5f\x72\x65\x61\x64\x28\x29\x20\x74\x6f\x20\x6f" 00030 "\x70\x65\x6e\x20\x61\x6e\x20\x65\x65\x74\x20\x66\x69\x6c\x65\x20" 00031 "\x66\x72\x6f\x6d\x0a\x64\x61\x74\x61\x20\x61\x6c\x72\x65\x61\x64" 00032 "\x79\x20\x6c\x6f\x61\x64\x65\x64\x20\x69\x6e\x20\x6d\x65\x6d\x6f" 00033 "\x72\x79\x2e\x0a\x00"; 00034 00035 ef = eet_open("/tmp/my_file.eet", EET_FILE_MODE_WRITE); 00036 if (!ef) return 0; 00037 00038 strcpy(buf, "Here is a string of data to save!"); 00039 size = eet_write(ef, "/key/to_store/at", buf, sizeof(buf), 1); 00040 if (!size) 00041 { 00042 fprintf(stderr, "Error writing data!\n"); 00043 eet_close(ef); 00044 return 0; 00045 } 00046 len = strlen(buf); 00047 printf("strlen() = %d, eet_write() = %d\n", len, size); 00048 00049 ptr = buf; 00050 for (i = 0; i < 3; i++) 00051 { 00052 len = strlen(some_strings[i]) + 1; 00053 memcpy(ptr, some_strings[i], len); 00054 ptr += len; 00055 } 00056 eet_write(ef, "/several/strings", buf, sizeof(buf), 1); 00057 eet_sync(ef); 00058 00059 eet_write(ef, "/some/mysterious/data", some_data, sizeof(some_data) - 1, 1); 00060 00061 eet_delete(ef, "/several/strings"); 00062 00063 return eet_close(ef) == EET_ERROR_NONE; 00064 } 00065 00066 int 00067 main(void) 00068 { 00069 Eet_File *ef; 00070 char *ret, **list; 00071 int size, num, i; 00072 00073 eet_init(); 00074 00075 if (!create_eet_file()) 00076 return -1; 00077 00078 ef = eet_open("/tmp/my_file.eet", EET_FILE_MODE_READ); 00079 if (!ef) return -1; 00080 00081 list = eet_list(ef, "*", &num); 00082 if (list) 00083 { 00084 for (i = 0; i < num; i++) 00085 printf("Key stored: %s\n", list[i]); 00086 free(list); 00087 } 00088 00089 ret = eet_read(ef, "/key/to_store/at", &size); 00090 if (ret) 00091 { 00092 printf("Data read (%i bytes):\n%s\n", size, ret); 00093 free(ret); 00094 } 00095 00096 ret = eet_read(ef, "/several/strings", &size); 00097 if (ret) 00098 { 00099 printf("More data read (%i bytes):\n%s\n", size, ret); 00100 free(ret); 00101 } 00102 00103 ret = eet_read(ef, "/some/mysterious/data", &size); 00104 if (ret) 00105 { 00106 Eet_File *ef2; 00107 00108 ef2 = eet_memopen_read(ret, size); 00109 00110 num = eet_num_entries(ef2); 00111 printf("Mysterious data has %d entries\n", num); 00112 00113 printf("Mysterious data:\n%s\n", 00114 (char *)eet_read_direct(ef2, "/mysterious/data", NULL)); 00115 00116 eet_close(ef2); 00117 00118 free(ret); 00119 } 00120 00121 eet_close(ef); 00122 00123 eet_shutdown(); 00124 00125 return 0; 00126 } 00127