#include #include #include #include "strange_list.h" void print_strange_list(const struct data *list, unsigned int size){ if(!list) return ; for (unsigned int i = 0; i < size; i ++){ if(list[i].type == INT_TYPE) printf("INT : %i\n", list[i].value.i); else if (list[i].type == FLOAT_TYPE) printf("FLOAT : %f\n", list[i].value.f); else printf("STRING : %s\n", list[i].value.s); } } int append_strange_list(struct data **list, unsigned int *size, struct data element){ if(!list || size == 0) return -1; struct data *tmp = realloc(*list, (*size + 1) * sizeof(struct data)); if(!tmp) return -2; *list = tmp; (*list)[*size ] = element; (*size) ++; return 0; } int remove_at_strange_list(struct data **list, unsigned int *size, int index){ if(!list || *size == 0 || index < 0 || index > (int)*size) return -1; /*if(*size == 1 && index == 0){ free(*list); *list = NULL; *size = 0; return 0; //free(list); }*/ for (unsigned int i = index; i < *size; i ++){ (*list)[i] = (*list)[i + 1]; } (*size) --; if(*size > 0) *list = realloc(*list, (*size) * sizeof(struct data)); else { free(*list); *list = NULL; //free(list); } return 0; } int list_strange_list(const char *filename, const struct data *list, unsigned int size){ if(!filename || !list) return -1; FILE *file = fopen(filename, "w"); if(!file) return -2; for (unsigned int i = 0; i < size; i ++){ if(list[i].type == INT_TYPE) fprintf(file, "INT : %i\n", list[i].value.i); else if (list[i].type == FLOAT_TYPE) fprintf(file, "FLOAT : %f\n", list[i].value.f); else fprintf(file, "STRING : %s\n", list[i].value.s); } return 0; } /* #include #include int main(void) { struct data *list = NULL; unsigned int size = 0; struct data elt1 = { .type = INT_TYPE, .value = { .i = 42 } }; struct data elt2 = { .type = STRING_TYPE, .value = { .s = "QUOI" } }; //int err = append_strange_list(&list, &size, elt1); //printf("%d\n", err); //append_strange_list(&list, &size, elt2); //printf("%d\n", err); //append_strange_list(&list, NULL, elt1); //printf("%d\n", err); int err = remove_at_strange_list(&list, &size, 1); printf("%d\n", err); err = remove_at_strange_list(&list, &size, 42); printf("%d\n", err); print_strange_list(list, size); free(list); struct data *list = NULL; unsigned int size = 0; struct data elt1 = { .type = INT_TYPE, .value = { .i = 42 } }; struct data elt2 = { .type = STRING_TYPE, .value = { .s = "FEUR" } }; append_strange_list(&list, &size, elt1); append_strange_list(&list, &size, elt2); append_strange_list(&list, &size, elt2); int err = remove_at_strange_list(&list, &size, 1); printf("%d\n", err); err = remove_at_strange_list(&list, &size, 42); printf("%d\n", err); print_strange_list(list, size); free(list); struct data *list = NULL; unsigned int size = 0; struct data elt1 = { .type = INT_TYPE, .value = { .i = 42 } }; struct data elt2 = { .type = STRING_TYPE, .value = { .s = "welcome2u" } }; append_strange_list(&list, &size, elt1); append_strange_list(&list, &size, elt2); int err = list_strange_list("/tmp/list", list, size); printf("%d\n", err); err = list_strange_list("/", list, size); printf("%d\n", err); free(list); }*/