Сделаны правки по утечки памяти
This commit is contained in:
parent
baa657e486
commit
228f0baef3
2 changed files with 40 additions and 12 deletions
|
|
@ -3,6 +3,6 @@ cmake_minimum_required(VERSION 3.0)
|
||||||
project(webdisk_c LANGUAGES C)
|
project(webdisk_c LANGUAGES C)
|
||||||
|
|
||||||
add_executable(webdisk_c main.c cJSON/cJSON.c)
|
add_executable(webdisk_c main.c cJSON/cJSON.c)
|
||||||
set (CMAKE_C_FLAGS "-O3")
|
set (CMAKE_C_FLAGS "-g -O3 -ljemalloc -L /usr/lib64/libjemalloc.so")
|
||||||
|
|
||||||
install(TARGETS webdisk_c RUNTIME DESTINATION bin)
|
install(TARGETS webdisk_c RUNTIME DESTINATION bin)
|
||||||
|
|
|
||||||
46
main.c
46
main.c
|
|
@ -11,8 +11,11 @@
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
||||||
#include "cJSON/cJSON.h"
|
#include "cJSON/cJSON.h"
|
||||||
|
#include <jemalloc/jemalloc.h>
|
||||||
|
unsigned narenas = 4;
|
||||||
|
|
||||||
#define bool unsigned char
|
|
||||||
|
//#define bool unsigned char
|
||||||
|
|
||||||
#define DEBUG 0
|
#define DEBUG 0
|
||||||
|
|
||||||
|
|
@ -46,6 +49,18 @@ typedef struct metadata {
|
||||||
struct dir_list_struct* jamp;
|
struct dir_list_struct* jamp;
|
||||||
} stack_element;
|
} stack_element;
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
void meta_data_init(struct metadata* metadata){
|
||||||
|
metadata->name = NULL;
|
||||||
|
metadata->dir_list = NULL;
|
||||||
|
metadata->top = NULL;
|
||||||
|
metadata->jamp = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// Функция для получения размера файла
|
// Функция для получения размера файла
|
||||||
long get_file_size(char* size) {
|
long get_file_size(char* size) {
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
@ -92,7 +107,8 @@ void format_size(unsigned long long bytes, char *output, size_t output_size) {
|
||||||
|
|
||||||
struct metadata* metadata_create(bool tipe_dir,char* path, struct metadata* top){
|
struct metadata* metadata_create(bool tipe_dir,char* path, struct metadata* top){
|
||||||
DEBUG_PRINT("Пред mata malloc\n");
|
DEBUG_PRINT("Пред mata malloc\n");
|
||||||
struct metadata* mata = malloc(sizeof(struct metadata));
|
struct metadata* mata = je_malloc(sizeof(struct metadata));
|
||||||
|
meta_data_init(mata);
|
||||||
DEBUG_PRINT("После mata malloc\n");
|
DEBUG_PRINT("После mata malloc\n");
|
||||||
mata->name = path;
|
mata->name = path;
|
||||||
mata->tipe_dir = tipe_dir;
|
mata->tipe_dir = tipe_dir;
|
||||||
|
|
@ -105,15 +121,15 @@ struct metadata* metadata_create(bool tipe_dir,char* path, struct metadata* top)
|
||||||
mata->size = mata->size;
|
mata->size = mata->size;
|
||||||
|
|
||||||
//struct metadata* mata_2 = mata;
|
//struct metadata* mata_2 = mata;
|
||||||
/*
|
|
||||||
struct tred_pizdec* mata_2 = malloc(sizeof(struct tred_pizdec));
|
struct tred_pizdec* mata_2 = malloc(sizeof(struct tred_pizdec));
|
||||||
mata_2->name = path;
|
mata_2->name = path;
|
||||||
mata_2->size = &mata->size;
|
mata_2->size = &mata->size;
|
||||||
pthread_t thread;
|
pthread_t thread;
|
||||||
pthread_create(&thread, NULL, get_file_size_multi_tred, (void*)mata_2);
|
pthread_create(&thread, NULL, get_file_size_multi_tred, (void*)mata_2);
|
||||||
//pthread_join(thread, NULL);
|
pthread_join(thread, NULL);
|
||||||
*/
|
|
||||||
mata->size = get_file_size(path);
|
//mata->size = get_file_size(path);
|
||||||
DEBUG_PRINT("Объём:%li - %s\n", mata->size, mata->name);
|
DEBUG_PRINT("Объём:%li - %s\n", mata->size, mata->name);
|
||||||
}
|
}
|
||||||
return mata;
|
return mata;
|
||||||
|
|
@ -134,10 +150,12 @@ void scanning(struct metadata *mata){
|
||||||
if (errno == 2){
|
if (errno == 2){
|
||||||
printf("Нет такого файла или каталога!\n");
|
printf("Нет такого файла или каталога!\n");
|
||||||
//printf("%s\n", strerror(errno));
|
//printf("%s\n", strerror(errno));
|
||||||
|
printf("file: %s\n", mata->name);
|
||||||
}
|
}
|
||||||
if (errno == 22){
|
if (errno == 22){
|
||||||
printf("Недопустимый аргумент!\n");
|
printf("Недопустимый аргумент!\n");
|
||||||
//printf("%s\n", strerror(errno));
|
//printf("%s\n", strerror(errno));
|
||||||
|
printf("file: %s\n", mata->name);
|
||||||
}
|
}
|
||||||
if (errno == 13){
|
if (errno == 13){
|
||||||
printf("Отказ в доступе!\n");
|
printf("Отказ в доступе!\n");
|
||||||
|
|
@ -146,6 +164,9 @@ void scanning(struct metadata *mata){
|
||||||
else{
|
else{
|
||||||
entry = readdir(dp);
|
entry = readdir(dp);
|
||||||
}
|
}
|
||||||
|
printf("Нет такого файла или каталога!\n");
|
||||||
|
//printf("%s\n", strerror(errno));
|
||||||
|
printf("file: %s\n", mata->name);
|
||||||
DEBUG_PRINT("Two\n");
|
DEBUG_PRINT("Two\n");
|
||||||
while(entry != NULL){
|
while(entry != NULL){
|
||||||
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0){
|
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0){
|
||||||
|
|
@ -158,10 +179,12 @@ void scanning(struct metadata *mata){
|
||||||
DEBUG_PRINT("mata->name обём: %li\n",(strlen(mata->name) * sizeof(char)));
|
DEBUG_PRINT("mata->name обём: %li\n",(strlen(mata->name) * sizeof(char)));
|
||||||
DEBUG_PRINT("entry->d_name обём: %li\n",(strlen(entry->d_name) * sizeof(char)));
|
DEBUG_PRINT("entry->d_name обём: %li\n",(strlen(entry->d_name) * sizeof(char)));
|
||||||
|
|
||||||
char* putaa = malloc((strlen(mata->name) + 1) * sizeof(char) + (strlen(entry->d_name) + 1) * sizeof(char) + sizeof(char) *2);
|
char* putaa = malloc(strlen(mata->name) + (strlen(entry->d_name)) + 2);
|
||||||
|
//snprintf(putaa, path_len, "%s/%s", mata->name, entry->d_name);
|
||||||
|
|
||||||
//char* putaa = malloc(sizeof(mata->name) + sizeof(entry->d_name) + sizeof(char));
|
//char* putaa = malloc(sizeof(mata->name) + sizeof(entry->d_name) + sizeof(char));
|
||||||
DEBUG_PRINT("putaa готов! \n");
|
DEBUG_PRINT("putaa готов! \n");
|
||||||
sprintf(putaa, "%s%s%s",mata->name,"/",entry->d_name);
|
sprintf(putaa, "%s/%s",mata->name,entry->d_name);
|
||||||
DEBUG_PRINT("putaa обединён! \n");
|
DEBUG_PRINT("putaa обединён! \n");
|
||||||
struct metadata* SAS;
|
struct metadata* SAS;
|
||||||
if (entry->d_type == DT_DIR){
|
if (entry->d_type == DT_DIR){
|
||||||
|
|
@ -173,12 +196,14 @@ void scanning(struct metadata *mata){
|
||||||
DEBUG_PRINT("SAS готов! \n");
|
DEBUG_PRINT("SAS готов! \n");
|
||||||
if (AAA){
|
if (AAA){
|
||||||
put_2 = malloc(sizeof(struct dir_list_struct));
|
put_2 = malloc(sizeof(struct dir_list_struct));
|
||||||
|
dir_list_struct_init(put_2);
|
||||||
DEBUG_PRINT("put_2 1 готов!\n");
|
DEBUG_PRINT("put_2 1 готов!\n");
|
||||||
mata->dir_list = put_2;
|
mata->dir_list = put_2;
|
||||||
AAA = 0;
|
AAA = 0;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
put_2->next = malloc(sizeof(struct dir_list_struct));
|
put_2->next = malloc(sizeof(struct dir_list_struct));
|
||||||
|
dir_list_struct_init(put_2->next);
|
||||||
DEBUG_PRINT("put_2 2 готов! \n");
|
DEBUG_PRINT("put_2 2 готов! \n");
|
||||||
put_2 = put_2->next;
|
put_2 = put_2->next;
|
||||||
}
|
}
|
||||||
|
|
@ -301,7 +326,7 @@ typedef struct {
|
||||||
char path[1024];
|
char path[1024];
|
||||||
} Options;
|
} Options;
|
||||||
|
|
||||||
bool parse_args(int argc, char *argv[], Options *opts) {
|
bool parse_args(int argc, char *argv[], Options *opts) { // II LLM
|
||||||
opts->has_j = 0;
|
opts->has_j = 0;
|
||||||
opts->has_r = 0;
|
opts->has_r = 0;
|
||||||
opts->r_value = 0;
|
opts->r_value = 0;
|
||||||
|
|
@ -362,6 +387,7 @@ cJSON *print_statistik(cJSON *main_Array, struct dir_list_struct* list, char* ou
|
||||||
cJSON *content_Array;
|
cJSON *content_Array;
|
||||||
do{
|
do{
|
||||||
format_size(list->file->size, output, sizeof(output));
|
format_size(list->file->size, output, sizeof(output));
|
||||||
|
printf("%s\t%li\t%s\n", output, list->file->size, list->file->name);
|
||||||
DEBUG_PRINT("%s\t%li\t%s\n", output, list->file->size, list->file->name);
|
DEBUG_PRINT("%s\t%li\t%s\n", output, list->file->size, list->file->name);
|
||||||
if (js_logok){
|
if (js_logok){
|
||||||
if (list->file->tipe_dir && (list->file->dir_list != NULL) && (int_depth != i)){
|
if (list->file->tipe_dir && (list->file->dir_list != NULL) && (int_depth != i)){
|
||||||
|
|
@ -392,6 +418,7 @@ cJSON *print_statistik(cJSON *main_Array, struct dir_list_struct* list, char* ou
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]){
|
int main(int argc, char *argv[]){
|
||||||
|
//mallctl("opt.narenas", NULL, NULL, &narenas, sizeof(narenas));
|
||||||
char *path;
|
char *path;
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
//printf("Your locale is: %s\n", setlocale(LC_CTYPE, NULL));
|
//printf("Your locale is: %s\n", setlocale(LC_CTYPE, NULL));
|
||||||
|
|
@ -412,6 +439,7 @@ int main(int argc, char *argv[]){
|
||||||
path = opts.path;
|
path = opts.path;
|
||||||
|
|
||||||
struct metadata * mata = malloc(sizeof(stack_element));
|
struct metadata * mata = malloc(sizeof(stack_element));
|
||||||
|
meta_data_init(mata);
|
||||||
mata->name = path;
|
mata->name = path;
|
||||||
mata->tipe_dir = 1;
|
mata->tipe_dir = 1;
|
||||||
scanning(mata);
|
scanning(mata);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue