Промежуточный комит доделование десерилизации

This commit is contained in:
Arseniy Romenskiy 2026-03-03 03:40:13 +03:00
parent b5c0f5ba02
commit 9393d91906
2 changed files with 57 additions and 33 deletions

31
file.h
View file

@ -61,30 +61,32 @@ void name_file_w(char* name, FILE * f_names, uint64_t *names_offset){
*names_offset += len + sizeof(uint16_t); *names_offset += len + sizeof(uint16_t);
} }
void nodes_file_w(struct metadata* meta, FILE * f_nodes, uint64_t *nodes_offset, uint64_t names_offset){ void nodes_file_w(struct metadata* meta, FILE * f_nodes, uint64_t *nodes_offset, uint64_t names_offset){
struct metadata_file file; struct metadata_file file = {0};
file.name_offset = names_offset; file.name_offset = names_offset;
file.size = meta->size; file.size = meta->size;
file.tipe_dir = meta->tipe_dir; file.tipe_dir = meta->tipe_dir;
fwrite(&file, 1, sizeof(struct metadata_file), f_nodes); fwrite(&file, 1, sizeof(struct metadata_file), f_nodes);
*nodes_offset += sizeof(struct metadata_file); *nodes_offset += sizeof(struct metadata_file);
} }
void aaasss(struct dir_list_struct* dir_list, struct metadata* mata_local, struct metadata* mata_local_top, FILE *f_nodes, FILE *f_names, int* marker, uint16_t* len){ void aaasss(struct dir_list_struct* dir_list, struct metadata* mata_local, struct metadata* mata_local_top, FILE *f_nodes, FILE *f_names, int* marker, uint16_t* len){
if (NULL != dir_list->file){ if (NULL != dir_list->file){
DEBUG_PRINT("НЕ dir_list->file\n");
dir_list = dir_list->next; dir_list = dir_list->next;
dir_list = je_malloc(sizeof(struct dir_list_struct)); dir_list = je_malloc(sizeof(struct dir_list_struct));
} }
mata_local = malloc(sizeof(struct metadata)); //mata_local = malloc(sizeof(struct metadata));
// Это не маркер — значит начало структуры! // Это не маркер — значит начало структуры!
ungetc(*marker, f_nodes); // возвращаем байт обратно ungetc(*marker, f_nodes); // возвращаем байт обратно
struct metadata_file file; struct metadata_file file;
fread(&file, sizeof(file), 1, f_nodes); fread(&file, sizeof(file), 1, f_nodes);
mata_local->size = file.size; mata_local->size = file.size;
mata_local->tipe_dir = file.tipe_dir; mata_local->tipe_dir = file.tipe_dir;
//if(mata_local->tipe_dir){
fread(len, 1, sizeof(uint16_t), f_names); fread(len, 1, sizeof(uint16_t), f_names);
mata_local->name = malloc(*len+1); mata_local->name = malloc(*len+1);
fread(mata_local->name, 1, *len, f_names); fread(mata_local->name, 1, *len, f_names);
printf("Файл: %s\n", mata_local->name); DEBUG_PRINT("Файл: %s\n", mata_local->name);
// Дальше обработка структуры... // Дальше обработка структуры...
dir_list->top = mata_local_top; dir_list->top = mata_local_top;
mata_local->top = mata_local_top; mata_local->top = mata_local_top;
@ -100,6 +102,7 @@ void nanaaa_2(struct metadata* mata){
struct metadata* mata_local_top = mata; struct metadata* mata_local_top = mata;
mata_local->name = "./"; mata_local->name = "./";
struct dir_list_struct* dir_list = je_malloc(sizeof(struct dir_list_struct)); struct dir_list_struct* dir_list = je_malloc(sizeof(struct dir_list_struct));
//dir_list->next = je_malloc(sizeof(struct dir_list_struct));
mata_local->dir_list = dir_list; mata_local->dir_list = dir_list;
int marker = fgetc(f_nodes); int marker = fgetc(f_nodes);
while(marker != EOF){ while(marker != EOF){
@ -112,7 +115,7 @@ void nanaaa_2(struct metadata* mata){
else{ else{
DEBUG_PRINT("Контлоьные точки закончелись, поднимаюсь!\n"); DEBUG_PRINT("Контлоьные точки закончелись, поднимаюсь!\n");
if (mata_local->top == NULL){ if (mata_local->top == NULL){
printf("Подём отменён!\n"); DEBUG_PRINT("Подём отменён!\n");
break; break;
} }
aaasss(dir_list, mata_local, mata_local_top, f_nodes, f_names, &marker, &len); aaasss(dir_list, mata_local, mata_local_top, f_nodes, f_names, &marker, &len);
@ -130,7 +133,7 @@ void nanaaa_2(struct metadata* mata){
//return; //return;
continue; continue;
}else if (marker == 0xFE){ }else if (marker == 0xFE){
printf("SAS_xxxx\n"); DEBUG_PRINT("=0xFE=\n");
mata_local->jamp = dir_list; mata_local->jamp = dir_list;
//struct dir_list_struct* dir_list = je_malloc(sizeof(struct dir_list_struct)); //struct dir_list_struct* dir_list = je_malloc(sizeof(struct dir_list_struct));
mata_local->dir_list = dir_list; mata_local->dir_list = dir_list;
@ -139,10 +142,18 @@ void nanaaa_2(struct metadata* mata){
// DOWN_MARKER: начало детей, идём вниз // DOWN_MARKER: начало детей, идём вниз
// Ваша логика: вызывать рекурсивный парсер детей // Ваша логика: вызывать рекурсивный парсер детей
}else{ }else{
printf("SAS_AAA\n"); DEBUG_PRINT("FAIL\n");
//dir_list->file = mata_local;
struct metadata* mata_local = malloc(sizeof(struct metadata));;
dir_list->file = mata_local;
dir_list->next = je_malloc(sizeof(struct dir_list_struct));
dir_list = dir_list->next;
aaasss(dir_list, mata_local, mata_local_top, f_nodes, f_names, &marker, &len); aaasss(dir_list, mata_local, mata_local_top, f_nodes, f_names, &marker, &len);
dir_list = dir_list->next; //dir_list->next = mata_local;
dir_list = je_malloc(sizeof(struct dir_list_struct)); DEBUG_PRINT("NN - %s\n", mata_local->name);
//dir_list->next = je_malloc(sizeof(struct dir_list_struct));
//dir_list = dir_list->next;
//dir_list = je_malloc(sizeof(struct dir_list_struct));
} }
} }

59
main.c
View file

@ -29,7 +29,7 @@ unsigned narenas = 4;
#define DEBUG 0 #define DEBUG 1
#define jemalloc 1 #define jemalloc 1
#if defined(DEBUG) && DEBUG > 1 #if defined(DEBUG) && DEBUG > 1
@ -380,6 +380,32 @@ cJSON *print_statistik(cJSON *main_Array, struct dir_list_struct* list, char* ou
return main_Array; return main_Array;
} }
void reid_dir(struct metadata * mata){
meta_data_init(mata);
mata->name = opts.dir;
mata->tipe_dir = 1;
scanning(mata);
scan_dir(mata);
nanaaa(mata);
}
void read_file(struct metadata * mata){
nanaaa_2(mata);
printf("AAAA0: %s\n", mata->name);
printf("AAAA1: %s\n", mata->dir_list->file->name);
printf("tipe_dir: %i\n", mata->dir_list->file->tipe_dir);
printf("size: %li\n", mata->dir_list->file->size);
if (mata->dir_list->next == NULL) printf("SUKA\n");
else{
printf("AAAA2: %s\n", mata->dir_list->next->file->name);
//printf("AAAA2: %s\n", mata->dir_list->file->dir_list->file->name);
}
//printf("AAAA1: %s\n", mata->dir_list->next->file->name);
}
int main(int argc, char *argv[]){ int main(int argc, char *argv[]){
//mallctl("opt.narenas", NULL, NULL, &narenas, sizeof(narenas)); //mallctl("opt.narenas", NULL, NULL, &narenas, sizeof(narenas));
char *path; char *path;
@ -404,40 +430,27 @@ int main(int argc, char *argv[]){
js_logok = opts.json; js_logok = opts.json;
int_depth = opts.recursion; int_depth = opts.recursion;
path = opts.dir; path = opts.dir;
struct metadata * mata = je_malloc(sizeof(stack_element)); struct metadata * mata = je_malloc(sizeof(stack_element));
meta_data_init(mata); if (opts.dir) reid_dir(mata);
mata->name = path; else read_file(mata);
mata->tipe_dir = 1;
scanning(mata);
scan_dir(mata);
/*
struct metadata * mata = je_malloc(sizeof(stack_element));
nanaaa_2(mata);
printf("AAAA0: %s\n", mata->name);
printf("AAAA1: %s\n", mata->dir_list->file->name);
printf("tipe_dir: %i\n", mata->dir_list->file->tipe_dir);
printf("size: %li\n", mata->dir_list->file->size);
if (mata->dir_list->next == NULL) printf("SUKA\n");
//printf("AAAA2: %s\n", mata->dir_list->next->file->name);
//printf("AAAA2: %s\n", mata->dir_list->file->dir_list->file->name);
*/
char output[64]; char output[64];
struct dir_list_struct* list = mata->dir_list; struct dir_list_struct* list = mata->dir_list;
cJSON *main_Array = cJSON_CreateArray(); //cJSON *main_Array = cJSON_CreateArray();
main_Array = print_statistik(main_Array, list, output, 0); //main_Array = print_statistik(main_Array, list, output, 0);
//while(list->next != NULL); //while(list->next != NULL);
//save_cache(mata, int cache_size) //save_cache(mata, int cache_size)
DEBUG_PRINT("ПППП!\n"); DEBUG_PRINT("ПППП!\n");
char *string = cJSON_Print(main_Array); //char *string = cJSON_Print(main_Array);
DEBUG_PRINT("ччччч!\n"); DEBUG_PRINT("ччччч!\n");
printf("AA: %s\n", string); //printf("AA: %s\n", string);
printf("%s","bye.\n"); printf("%s","bye.\n");
//file_weit(mata); //file_weit(mata);
nanaaa(mata); //nanaaa(mata);
return 0; return 0;