diff --git a/CMakeLists.txt b/CMakeLists.txt index da923c2..a595323 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,11 +16,13 @@ link_directories("/usr/local/lib") add_executable(simple-dict-server server.c dict.c crypto.c) add_executable(simple-dict-client client.c crypto.c) add_executable(migrate migrate.c) +add_executable(migratenew migratenew.c) add_executable(cfgwriter cfgwriter.c) target_link_libraries(simple-dict-server scrypto spb pthread) target_link_libraries(simple-dict-client scrypto pthread) target_link_libraries(migrate spb) +target_link_libraries(migratenew spb) target_link_libraries(cfgwriter spb) INSTALL(TARGETS simple-dict-server RUNTIME DESTINATION bin) diff --git a/migratenew.c b/migratenew.c new file mode 100644 index 0000000..d85e5f2 --- /dev/null +++ b/migratenew.c @@ -0,0 +1,54 @@ +#include +#include +#include + +#define DICTKEYSZOLD 64 +#define DICTDATSZOLD 64 +#define DICTKEYSZNEW 127 +#define DICTDATSZNEW 127 + +typedef struct { + char key[DICTKEYSZOLD]; + char data[DICTDATSZOLD]; +} DICTOLD; + +typedef struct { + char key[DICTKEYSZNEW]; + char data[DICTDATSZNEW]; +} DICTNEW; + +DICTNEW nd; + +#define has_next(fp, ch) ((ch=getc(fp)),(feof(fp)?0:(ungetc(ch,fp),1))) + +int main(int argc, char** argv) { + if(argc == 3) { + uint32_t* items_len_new = align_struct(sizeof(DICTNEW), 2, nd.key, nd.data); + FILE* old = fopen(argv[1], "rb"); + FILE* new = fopen(argv[2], "wb"); + if(old && new) { + int ch; + + while(has_next(old, ch)) { + SIMPLE_PB* spb = get_pb(old); + DICTNEW* d; + switch(spb->struct_len) { + case sizeof(DICTOLD): + d = &nd; + memset(d, 0, sizeof(DICTNEW)); + memcpy(nd.key, ((DICTOLD*)spb->target)->key, DICTKEYSZOLD); + memcpy(nd.data, ((DICTOLD*)spb->target)->data, DICTDATSZOLD); + break; + case sizeof(DICTNEW): + d = spb->target; + break; + default: continue; break; + } + set_pb(new, items_len_new, sizeof(DICTNEW), d); + free(spb); + } + fclose(old); + fclose(new); + } else puts("Open file error."); + } else puts("Usage: "); +}