Successfully write onion services in a file
This commit is contained in:
parent
848263bc24
commit
1eb247d925
2 changed files with 13 additions and 10 deletions
21
src/tor_os.c
21
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->size = size;
|
||||||
os->filled = 0;
|
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;
|
if (os->file == NULL) goto mem_error;
|
||||||
strcpy(os->file, file);
|
strcpy(os->file, file);
|
||||||
|
|
||||||
|
@ -17,12 +17,13 @@ mem_error:
|
||||||
exit(EXIT_FAILURE);
|
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) {
|
if (os->filled == os->size) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
char* cur = os->list[os->filled];
|
char** cur = os->list + os->filled;
|
||||||
os->filled++;
|
os->filled++;
|
||||||
|
*cur = NULL;
|
||||||
return cur;
|
return cur;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,9 +36,9 @@ void tor_os_read (struct tor_os_str* os) {
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
char* dst = tor_os_append_cursor(os);
|
char** dst = tor_os_append_cursor(os);
|
||||||
if (dst == NULL) break;
|
if (dst == NULL) break;
|
||||||
if (getline(&(os->list[n]),&len,fd) == -1) break;
|
if (getline(dst,&len,fd) == -1) break;
|
||||||
}
|
}
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
}
|
}
|
||||||
|
@ -52,13 +53,14 @@ void tor_os_free(struct tor_os_str* os) {
|
||||||
|
|
||||||
void tor_os_persist(struct tor_os_str* os) {
|
void tor_os_persist(struct tor_os_str* os) {
|
||||||
FILE* fd = NULL;
|
FILE* fd = NULL;
|
||||||
fd = fopen(os->file, "w+");
|
fd = fopen(os->file, "w");
|
||||||
if (fd == NULL) {
|
if (fd == NULL) {
|
||||||
fprintf(stderr, "unable to open file for writing\n");
|
fprintf(stderr, "unable to open file for writing\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < os->filled; i++) {
|
for (int i = 0; i < os->filled; i++) {
|
||||||
|
printf("%s\n", os->list[i]);
|
||||||
fprintf(fd, "%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) {
|
int tor_os_append(struct tor_os_str* os, char* entry) {
|
||||||
char* target = tor_os_append_cursor (os);
|
char** target = tor_os_append_cursor (os);
|
||||||
target = malloc(sizeof(char*) * (strlen(entry) + 1));
|
|
||||||
if (target == NULL) return -1;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ struct tor_os_str {
|
||||||
};
|
};
|
||||||
|
|
||||||
void tor_os_create(struct tor_os_str* os, char* file, size_t size);
|
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);
|
int tor_os_append(struct tor_os_str* os, char* entry);
|
||||||
void tor_os_read (struct tor_os_str* os);
|
void tor_os_read (struct tor_os_str* os);
|
||||||
void tor_os_persist(struct tor_os_str* os);
|
void tor_os_persist(struct tor_os_str* os);
|
||||||
|
|
Loading…
Reference in a new issue