From 1eb247d925ce90f677d1dc63936fa09e4e77f24e Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Fri, 8 Feb 2019 18:04:48 +0100 Subject: [PATCH] Successfully write onion services in a file --- src/tor_os.c | 21 ++++++++++++--------- src/tor_os.h | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/tor_os.c b/src/tor_os.c index 0b91dc7..f57db39 100644 --- a/src/tor_os.c +++ b/src/tor_os.c @@ -4,7 +4,7 @@ void tor_os_create(struct tor_os_str* os, char* file, size_t size) { os->size = size; os->filled = 0; - os->file = malloc(sizeof(char*) * (strlen(file) + 1)); + os->file = malloc(sizeof(char) * (strlen(file) + 1)); if (os->file == NULL) goto mem_error; strcpy(os->file, file); @@ -17,12 +17,13 @@ mem_error: exit(EXIT_FAILURE); } -char* tor_os_append_cursor(struct tor_os_str* os) { +char** tor_os_append_cursor(struct tor_os_str* os) { if (os->filled == os->size) { return NULL; } - char* cur = os->list[os->filled]; + char** cur = os->list + os->filled; os->filled++; + *cur = NULL; return cur; } @@ -35,9 +36,9 @@ void tor_os_read (struct tor_os_str* os) { size_t len = 0; int n = 0; while (1) { - char* dst = tor_os_append_cursor(os); + char** dst = tor_os_append_cursor(os); if (dst == NULL) break; - if (getline(&(os->list[n]),&len,fd) == -1) break; + if (getline(dst,&len,fd) == -1) break; } fclose(fd); } @@ -52,13 +53,14 @@ void tor_os_free(struct tor_os_str* os) { void tor_os_persist(struct tor_os_str* os) { FILE* fd = NULL; - fd = fopen(os->file, "w+"); + fd = fopen(os->file, "w"); if (fd == NULL) { fprintf(stderr, "unable to open file for writing\n"); exit(EXIT_FAILURE); } for (int i = 0; i < os->filled; i++) { + printf("%s\n", os->list[i]); fprintf(fd, "%s\n", os->list[i]); } @@ -66,9 +68,10 @@ void tor_os_persist(struct tor_os_str* os) { } int tor_os_append(struct tor_os_str* os, char* entry) { - char* target = tor_os_append_cursor (os); - target = malloc(sizeof(char*) * (strlen(entry) + 1)); + char** target = tor_os_append_cursor (os); if (target == NULL) return -1; - strcpy (target, entry); + *target = malloc(sizeof(char) * (strlen(entry) + 1)); + if (*target == NULL) return -1; + strcpy (*target, entry); return 0; } diff --git a/src/tor_os.h b/src/tor_os.h index 8ed8baa..9400143 100644 --- a/src/tor_os.h +++ b/src/tor_os.h @@ -13,7 +13,7 @@ struct tor_os_str { }; void tor_os_create(struct tor_os_str* os, char* file, size_t size); -char* tor_os_append_cursor(struct tor_os_str* os); +char** tor_os_append_cursor(struct tor_os_str* os); int tor_os_append(struct tor_os_str* os, char* entry); void tor_os_read (struct tor_os_str* os); void tor_os_persist(struct tor_os_str* os);