diff options
Diffstat (limited to 'easydir.c')
| -rw-r--r-- | easydir.c | 113 | 
1 files changed, 113 insertions, 0 deletions
| diff --git a/easydir.c b/easydir.c new file mode 100644 index 0000000..a4ece76 --- /dev/null +++ b/easydir.c @@ -0,0 +1,113 @@ +#include <malloc.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/wait.h> +#include <errno.h> + +#include "handerror.h" + +/* Buff size: source == path = file +splitPath thinks, that in end path always stay FILE, not directory */ +char* splitPath(char *source, char *path, char *file) +{ +	int fSymbol = 0, f = 0; + +	char *main_path = malloc(sizeof(char) * strlen(source) + 1); +	char *file_path = malloc(sizeof(char) * strlen(source) + 1); + +	for(int i=0; i < strlen(source); i++) +	{ +		if(fSymbol == 1) +		{ +			switch(source[i]) +			{ +			case '/': +			{ +				fSymbol = 0; +				f = 0; + +				strcat(main_path, file_path); +				strcat(main_path, "/"); +				file_path[0] = '\0'; +				break; +			} +			default: +			{ +				file_path[f] = source[i]; +				file_path[f+1] = '\0'; +				f++; + +				break; +			} + +			} +		} +		else // if it's beginning of string +		{ +			// handling first symbol +			switch(source[i]) +			{ +			case '.': +			case '\\': +			case '/': +			{ +				print_error("[Error] You can't use these symbol at the beginning: '.', '/', '\\' \n"); +				break; +			} +			default: +				fSymbol = 1; + +				// enter first symbol +				file_path[0] = source[i]; +				file_path[1] = '\0'; +				f++; + +				break; +			} +		} +	} + +	strcpy(path, main_path); +	strcpy(file, file_path); +	free(main_path); +	free(file_path); + +	if(*file) return file; +	return NULL; +} + +int delete_file(char *file_path) +{ +	int pid; +	pid = fork(); +	if(pid == -1) call_error(112); +	if(pid == 0) { /* new process */ +		execlp("rm", "rm", file_path, NULL); +		perror("rm"); +		exit(4); +	} +	wait(&pid); + +	return 1; +} + +int delete_emptydir(char *dir_path) +{ +	int pid; +	pid = fork(); +	if(pid == -1) call_error(113); +	if(pid == 0) { /* new process */ +		#if defined(DEBUG) +			execlp("rmdir", "rmdir", "-p", dir_path, NULL); +		#else +			execlp("rmdir", "rmdir", "-p", "--ignore-fail-on-non-empty", dir_path, NULL); +		#endif +		perror("rmdir"); +		exit(4); +	} +	wait(&pid); + +	return 1; +} | 
