Попытка всё починить и доделать сереализацию.
This commit is contained in:
parent
7beca98c1d
commit
71d3fbf14b
3 changed files with 201 additions and 9 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -3,6 +3,6 @@ build/
|
|||
*~
|
||||
WebDisk_C.kdev4
|
||||
.cache
|
||||
|
||||
jemalloc/
|
||||
|
||||
|
||||
|
|
|
|||
144
file.h
144
file.h
|
|
@ -47,6 +47,7 @@ void serialize_tree(Node *node, FILE *f_struct, FILE *f_names, uint64_t *names_o
|
|||
fwrite(&end, 1, 1, f_struct); // Маркер конца детей
|
||||
}
|
||||
*/
|
||||
// xxd -p -c 1 nodes.bin | awk '{printf "%s", $0; if (tolower($0)=="ff") printf "\n"; else printf " "}' | perl -pe 's/fe/\e[31m$&\e[0m/g' | sed $'s/ff/\x1b[32m&\x1b[0m/g'
|
||||
#define DOWN_MARKER 0xFE
|
||||
#define END_MARKER 0xFF
|
||||
struct metadata_file {
|
||||
|
|
@ -69,6 +70,8 @@ void nodes_file_w(struct metadata* meta, FILE * f_nodes, uint64_t *nodes_offset,
|
|||
*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){
|
||||
if (NULL != dir_list->file){
|
||||
DEBUG_PRINT("НЕ dir_list->file\n");
|
||||
|
|
@ -88,12 +91,144 @@ void aaasss(struct dir_list_struct* dir_list, struct metadata* mata_local, struc
|
|||
fread(mata_local->name, 1, *len, f_names);
|
||||
DEBUG_PRINT("Файл: %s\n", mata_local->name);
|
||||
// Дальше обработка структуры...
|
||||
dir_list->top = mata_local_top;
|
||||
mata_local->top = mata_local_top;
|
||||
dir_list->file = mata_local;
|
||||
*marker = fgetc(f_nodes);
|
||||
}
|
||||
void write_optject(struct metadata* mata_local, FILE *f_nodes, FILE *f_names, int* marker, uint16_t* len){
|
||||
ungetc(*marker, f_nodes); // возвращаем байт обратно
|
||||
struct metadata_file file;
|
||||
fread(&file, sizeof(file), 1, f_nodes);
|
||||
mata_local->size = file.size;
|
||||
mata_local->tipe_dir = file.tipe_dir;
|
||||
mata_local->dir_list = NULL;
|
||||
fread(len, 1, sizeof(uint16_t), f_names);
|
||||
mata_local->name = malloc(*len+1);
|
||||
fread(mata_local->name, 1, *len, f_names);
|
||||
DEBUG_PRINT("Файл: %s\n", mata_local->name);
|
||||
|
||||
}
|
||||
void nanaaa_2(struct metadata* mata){
|
||||
FILE *f_nodes = fopen("nodes.bin", "rb");
|
||||
FILE *f_names = fopen("names.bin", "rb");
|
||||
uint16_t len;
|
||||
struct dir_list_struct* dir_list_L = je_malloc(sizeof(struct dir_list_struct));
|
||||
struct dir_list_struct** dir_list = &mata->dir_list;
|
||||
struct dir_list_struct* dir_list_daun = je_malloc(sizeof(struct dir_list_struct));
|
||||
struct metadata* mata_local = mata;
|
||||
struct metadata* mata_local_top = mata;
|
||||
int marker = fgetc(f_nodes);
|
||||
//if (marker == EOF) return;
|
||||
//write_optject(mata_local, f_nodes, f_names, &marker, &len);
|
||||
mata_local->dir_list = NULL;
|
||||
mata_local->top = NULL;
|
||||
mata_local->jamp = NULL;
|
||||
//marker = fgetc(f_nodes);
|
||||
while(marker != EOF){
|
||||
if (marker == END_MARKER){ // 0xFF
|
||||
DEBUG_PRINT("=0xFF=\n");
|
||||
printf("mata_local : %s\n", mata_local->name);
|
||||
//printf("dir_list: %s\n", mata_local->dir_list->file->name);
|
||||
printf("mata_local_top: %s\n", mata_local_top->name);
|
||||
//printf("dir_list_daun: %s\n", dir_list_daun->file->name);
|
||||
//dir_list = mata_local->jamp;
|
||||
if(mata_local->top != NULL)
|
||||
mata_local = mata_local->top;
|
||||
//dir_list = mata_local->jamp;
|
||||
if(mata_local->jamp != NULL){
|
||||
dir_list = &mata_local->jamp;
|
||||
//dir_list_daun = mata_local->top->jamp;
|
||||
}
|
||||
else{
|
||||
//dir_list_daun = dir_list;
|
||||
dir_list = NULL;
|
||||
}
|
||||
if(mata_local_top->top != NULL)
|
||||
mata_local_top = mata_local_top->top;
|
||||
else mata_local_top = NULL;
|
||||
printf("x mata_local : %s\n", mata_local->name);
|
||||
//printf("xx mata_local: %s\n", mata_local->top->name);
|
||||
//printf("x dir_list: %s\n", dir_list->file->name);
|
||||
printf("x mata_local_top: %s\n", mata_local_top->name);
|
||||
//printf("x dir_list_daun: %s\n", dir_list_daun->file->name);
|
||||
|
||||
}else{
|
||||
DEBUG_PRINT("FAIL\n");
|
||||
struct metadata* mata_local_next = malloc(sizeof(struct metadata));
|
||||
write_optject(mata_local_next, f_nodes, f_names, &marker, &len);
|
||||
if(mata_local_top->dir_list == NULL){// Есл. 1 эл.
|
||||
DEBUG_PRINT("Есл. 1 эл.!!!\n");
|
||||
mata_local->dir_list = je_malloc(sizeof(struct dir_list_struct));
|
||||
mata_local->dir_list->file = mata_local_next;
|
||||
mata_local->dir_list->next = NULL;
|
||||
//dir_list = &mata_local_next->dir_list;
|
||||
//mata_local_next->jamp = mata_local->dir_list;
|
||||
mata_local_next->jamp = *dir_list;
|
||||
dir_list = &(*dir_list)->next;
|
||||
//mata_local = mata_local_next;
|
||||
//mata_local_top = mata_local_next;
|
||||
mata_local_next->top = mata_local_top;
|
||||
|
||||
//if(mata_local_next->top->dir_list == mata_local_top->dir_list && mata_local->top != NULL)
|
||||
if(mata_local->top != NULL){
|
||||
printf("cv mata_local_next: %s\n", mata_local_next->name);
|
||||
printf("cv mata_local_top : %s\n", mata_local_top->name);
|
||||
printf("cv mata_local : %s\n", mata_local->name);
|
||||
//if()
|
||||
printf("cv mata_local_next top : %s\n", mata_local_next->top->name);
|
||||
printf("cv mata_local_top dir_list : %s\n", mata_local_top->dir_list->file->name);
|
||||
//printf("cv mata_local_next dir_list file : %s\n", mata_local_next->dir_list->file->name);
|
||||
mata_local_top = mata_local;
|
||||
//mata_local_top = mata_local_top->dir_list->file;
|
||||
//mata_local_top = mata_local_top->top;
|
||||
}
|
||||
mata_local_next->top = mata_local_top;
|
||||
}
|
||||
else{// Есл очередной эл.
|
||||
DEBUG_PRINT("Есл очередной эл.!!!\n");
|
||||
if(true){
|
||||
printf("cvx mata_local_next: %s\n", mata_local_next->name);
|
||||
printf("cvx mata_local_top : %s\n", mata_local_top->name);
|
||||
printf("cvx mata_local : %s\n", mata_local->name);
|
||||
//printf("cvx mata_local_next top : %s\n", mata_local_next->top->name);
|
||||
//mata_local_top = mata_local;
|
||||
}
|
||||
mata_local_next->top = mata_local_top;
|
||||
//mata_local_next->top = mata_local;
|
||||
//mata_local_next->top = mata_local_top; // !!!!!!!!!!!!!!
|
||||
DEBUG_PRINT("AAAASSSS!!!\n");
|
||||
//dir_list[0]->next = je_malloc(sizeof(struct dir_list_struct));
|
||||
|
||||
*dir_list = je_malloc(sizeof **dir_list);
|
||||
(*dir_list)->next = NULL;
|
||||
(*dir_list)->file = mata_local_next;
|
||||
//dir_list->next = je_malloc(sizeof(struct dir_list_struct));
|
||||
DEBUG_PRINT("AAAASSSS2!!!\n");
|
||||
//if(mata_local_next->tipe_dir)
|
||||
mata_local_next->dir_list = NULL; /// !!!!!!!!!!
|
||||
//mata_local->dir_list = mata_local->dir_list->next;
|
||||
//mata_local->dir_list->file = mata_local_next;
|
||||
//dir_list = &mata_local->jamp;
|
||||
mata_local_next->jamp = *dir_list;
|
||||
dir_list = &(*dir_list)->next;
|
||||
//dir_list = &mata_local_next->dir_list;
|
||||
//mata_local_next->jamp = mata_local->dir_list->next;
|
||||
|
||||
}
|
||||
mata_local = mata_local_next;
|
||||
printf("vv mata_local : %s\n", mata_local->name);
|
||||
printf("vv mata_local_top: %s\n", mata_local_top->name);
|
||||
|
||||
DEBUG_PRINT("NN - %s\n", mata_local->name);
|
||||
//DEBUG_PRINT("NN size - %li\n", mata_local->size);
|
||||
DEBUG_PRINT("NN - %i\n", marker);
|
||||
}
|
||||
marker = fgetc(f_nodes);
|
||||
}
|
||||
DEBUG_PRINT("ВСЁ!!!\n");
|
||||
}
|
||||
|
||||
void nanaaa_22(struct metadata* mata){
|
||||
FILE *f_nodes = fopen("nodes.bin", "rb");
|
||||
FILE *f_names = fopen("names.bin", "rb");
|
||||
struct metadata_file file, file_2;
|
||||
|
|
@ -177,6 +312,10 @@ void nanaaa(struct metadata* mata){
|
|||
meta_data = mata;
|
||||
if (meta_data->dir_list == NULL)
|
||||
meta_data->jamp = meta_data->dir_list;
|
||||
DEBUG_PRINT("AAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@: %s\n",mata->name);
|
||||
nodes_file_w(mata, f_nodes, &nodes_offset, names_offset);
|
||||
name_file_w(mata->name, f_names, &names_offset);
|
||||
//fputc(DOWN_MARKER, f_nodes);
|
||||
struct dir_list_struct* global_dir_list = meta_data->dir_list;
|
||||
while(1){
|
||||
DEBUG_PRINT("Цикол!\n");
|
||||
|
|
@ -194,7 +333,7 @@ void nanaaa(struct metadata* mata){
|
|||
nodes_file_w(meta_data, f_nodes, &nodes_offset, names_offset);
|
||||
name_file_w(meta_data->name, f_names, &names_offset);
|
||||
//fwrite(meta_data->name, 1, sizeof(struct metadata), f_names);
|
||||
fputc(DOWN_MARKER, f_nodes);
|
||||
//fputc(DOWN_MARKER, f_nodes);
|
||||
break;
|
||||
}
|
||||
else{
|
||||
|
|
@ -226,6 +365,7 @@ void nanaaa(struct metadata* mata){
|
|||
}
|
||||
}
|
||||
}
|
||||
fputc(END_MARKER, f_nodes);
|
||||
DEBUG_PRINT("Готово!\n");
|
||||
|
||||
}
|
||||
|
|
|
|||
64
main.c
64
main.c
|
|
@ -56,7 +56,6 @@ struct tred_pizdec{
|
|||
|
||||
|
||||
struct dir_list_struct{
|
||||
struct metadata* top;
|
||||
struct metadata* file;
|
||||
struct dir_list_struct* next;
|
||||
};
|
||||
|
|
@ -74,7 +73,6 @@ typedef struct metadata {
|
|||
|
||||
|
||||
void dir_list_struct_init(struct dir_list_struct* dir_list_struct){
|
||||
dir_list_struct->top = NULL;
|
||||
dir_list_struct->file = NULL;
|
||||
dir_list_struct->next = NULL;
|
||||
}
|
||||
|
|
@ -231,8 +229,8 @@ void scanning(struct metadata *mata){
|
|||
DEBUG_PRINT("put_2 2 готов! \n");
|
||||
put_2 = put_2->next;
|
||||
}
|
||||
put_2->top = mata;
|
||||
put_2->file = SAS;
|
||||
SAS->jamp = put_2;
|
||||
entry = readdir(dp);
|
||||
}
|
||||
closedir(dp);
|
||||
|
|
@ -291,8 +289,8 @@ void json_create(cJSON *main_Array, char* name, long int volume, cJSON *content_
|
|||
void scan_dir(struct metadata *mata){
|
||||
struct metadata *meta_data, *meta_data_tmp;
|
||||
meta_data = mata;
|
||||
if (meta_data->dir_list == NULL)
|
||||
meta_data->jamp = meta_data->dir_list;
|
||||
//if (meta_data->dir_list == NULL)
|
||||
// meta_data->jamp = meta_data->dir_list;
|
||||
struct dir_list_struct* global_dir_list = meta_data->dir_list;
|
||||
while(1){
|
||||
//printf("%s%s",global_dir_list->file->name ,"\n");
|
||||
|
|
@ -380,7 +378,22 @@ cJSON *print_statistik(cJSON *main_Array, struct dir_list_struct* list, char* ou
|
|||
return main_Array;
|
||||
}
|
||||
|
||||
|
||||
struct metadata * read_file_next(struct metadata * mata_2){
|
||||
if(mata_2->jamp->next != NULL){
|
||||
mata_2 = mata_2->jamp->next->file;
|
||||
}
|
||||
else{
|
||||
while(mata_2->top->jamp->next == NULL){
|
||||
printf("name XXXX: %s\n", mata_2->name);
|
||||
mata_2 = mata_2->top;
|
||||
if(mata_2->top->jamp == NULL)return NULL;;
|
||||
printf("name XXXX2: %s\n", mata_2->name);
|
||||
}
|
||||
mata_2 = mata_2->top->jamp->next->file;
|
||||
printf("name XXXX3: %s\n", mata_2->name);
|
||||
}
|
||||
return mata_2;
|
||||
}
|
||||
void reid_dir(struct metadata * mata){
|
||||
meta_data_init(mata);
|
||||
mata->name = opts.dir;
|
||||
|
|
@ -388,14 +401,53 @@ void reid_dir(struct metadata * mata){
|
|||
scanning(mata);
|
||||
scan_dir(mata);
|
||||
nanaaa(mata);
|
||||
struct metadata *mata_2 = mata;
|
||||
for(;mata_2 != NULL;){
|
||||
if (mata_2->tipe_dir){
|
||||
if (mata_2->dir_list != NULL){
|
||||
printf("name dir : %s\n", mata_2->name);
|
||||
mata_2 = mata_2->dir_list->file;
|
||||
}
|
||||
else mata_2 = read_file_next(mata_2);
|
||||
}
|
||||
else{
|
||||
printf("size: %li\n", mata_2->size);
|
||||
printf("name fule: %s\n", mata_2->name);
|
||||
mata_2 = read_file_next(mata_2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void read_file(struct metadata * mata){
|
||||
nanaaa_2(mata);
|
||||
struct metadata *mata_2 = mata;
|
||||
for(;mata_2 != NULL;){
|
||||
if (mata_2->tipe_dir){
|
||||
if (mata_2->dir_list != NULL){
|
||||
printf("name dir : %s\n", mata_2->name);
|
||||
mata_2 = mata_2->dir_list->file;
|
||||
}
|
||||
else mata_2 = read_file_next(mata_2);
|
||||
}
|
||||
else{
|
||||
printf("size: %li\n", mata_2->size);
|
||||
printf("name fule: %s\n", mata_2->name);
|
||||
mata_2 = read_file_next(mata_2);
|
||||
}
|
||||
}
|
||||
|
||||
printf("AAAA0: %s\n", mata->name);
|
||||
printf("AAAA1: %s\n", mata->dir_list->file->name);
|
||||
printf("AAAA1: %s\n", mata->dir_list->file->dir_list->file->name);
|
||||
printf("AAAA1: %s\n", mata->dir_list->file->dir_list->file->dir_list->file->name);
|
||||
printf("size: %li\n", mata->dir_list->file->dir_list->file->dir_list->file->size);
|
||||
printf("AAAA2: %s\n", mata->dir_list->file->dir_list->file->dir_list->next->file->name);
|
||||
printf("AAAA2: %s\n", mata->dir_list->file->dir_list->file->dir_list->next->next->file->name);
|
||||
printf("size2: %li\n", mata->dir_list->file->dir_list->file->dir_list->next->file->size);
|
||||
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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue