Debugged
parent
1e8376b770
commit
671984d66d
4
Makefile
4
Makefile
|
@ -1,7 +1,7 @@
|
|||
CC=gcc
|
||||
CC=gcc -std=c99
|
||||
CFLAGS=-g -Wall -Wextra -O0
|
||||
LDFLAGS=
|
||||
SOURCES=main.c config.h structs.h structs.c
|
||||
SOURCES=main.c config.h structs.h structs.c handler.h include/ui.h
|
||||
OBJECTS=$(SOURCES:.cpp=.o)
|
||||
EXECUTABLE=work1
|
||||
|
||||
|
|
109
handler.h
109
handler.h
|
@ -1,3 +1,4 @@
|
|||
#include "include/ui.h"
|
||||
#include "structs.h"
|
||||
#include <stdio.h>
|
||||
|
||||
|
@ -7,20 +8,20 @@
|
|||
#define OBJECT_FOLDER 1
|
||||
#define OBJECT_FILE 2
|
||||
|
||||
int checkCommandValid(char* command)
|
||||
int checkCommandValid(char *command)
|
||||
{
|
||||
for (size_t i = 0; i < COMMAND_COUNT; i++)
|
||||
{
|
||||
if (strcmp(allowedCommands[i], command) == 0)
|
||||
{
|
||||
return SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
return FAILURE;
|
||||
for (size_t i = 0; i < COMMAND_COUNT; i++)
|
||||
{
|
||||
if (strcmp(allowedCommands[i], command) == 0)
|
||||
{
|
||||
return SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
int checkMinorArgumentValid(char* command, char* argument)
|
||||
int checkMinorArgumentValid(char *command, char *argument)
|
||||
{
|
||||
if (argument[1] == 'l' || argument[1] == 'r')
|
||||
{
|
||||
|
@ -56,16 +57,16 @@ int checkMinorArgumentValid(char* command, char* argument)
|
|||
return FAILURE;
|
||||
}
|
||||
|
||||
int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentFolder, Folder** ResultFolder, File** ResultFile)
|
||||
int checkMajorArgumentValid(char *argument, Folder *RootFolder, Folder *CurrentFolder, Folder **ResultFolder, File **ResultFile)
|
||||
{
|
||||
Folder* ptr;
|
||||
char* path = (char*) malloc(MAX_COMMAND_LEN);
|
||||
Folder *ptr;
|
||||
char *path = (char *)malloc(MAX_COMMAND_LEN);
|
||||
|
||||
strcpy(path, argument);
|
||||
|
||||
|
||||
for (size_t i = 0; i < strlen(path); i++)
|
||||
{
|
||||
if(path[i] == '\n')
|
||||
if (path[i] == '\n')
|
||||
{
|
||||
path[i] = '\0';
|
||||
}
|
||||
|
@ -88,7 +89,7 @@ int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentF
|
|||
|
||||
int foundFlag;
|
||||
while (istr != NULL)
|
||||
{
|
||||
{
|
||||
foundFlag = 1;
|
||||
for (size_t i = 0; i < CurrentFolder->folders_count_cur; i++)
|
||||
{
|
||||
|
@ -99,13 +100,13 @@ int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentF
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(foundFlag)
|
||||
|
||||
if (foundFlag)
|
||||
{
|
||||
int isFileFlag = 0;
|
||||
for (size_t i = 0; i < strlen(istr); i++)
|
||||
{
|
||||
if(istr[i] == '.')
|
||||
if (istr[i] == '.')
|
||||
{
|
||||
isFileFlag = 1;
|
||||
break;
|
||||
|
@ -114,8 +115,8 @@ int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentF
|
|||
|
||||
if (isFileFlag)
|
||||
{
|
||||
char* filename = (char*) malloc(filename_lenth + 1);
|
||||
char* extension = (char*) malloc(extinsion_lenth + 1);
|
||||
char *filename = (char *)malloc(filename_lenth + 1);
|
||||
char *extension = (char *)malloc(extinsion_lenth + 1);
|
||||
int extFlag = 0;
|
||||
|
||||
int writeCount = 0;
|
||||
|
@ -129,8 +130,8 @@ int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentF
|
|||
writeCount = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
if(extFlag)
|
||||
|
||||
if (extFlag)
|
||||
{
|
||||
filename[writeCount] = istr[i];
|
||||
}
|
||||
|
@ -159,7 +160,7 @@ int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentF
|
|||
free(filename);
|
||||
free(extension);
|
||||
}
|
||||
|
||||
|
||||
printf("Cannot resolve %s\n", istr);
|
||||
return WRONG_ARGUMENT_FAILURE;
|
||||
}
|
||||
|
@ -173,21 +174,21 @@ int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentF
|
|||
return OBJECT_FOLDER;
|
||||
}
|
||||
|
||||
int checkArgumentValid(char* command, char* argument, Folder* RootFolder, Folder* CurrentFolder, Folder** resultFolder, File** resultFile)
|
||||
int checkArgumentValid(char *command, char *argument, Folder *RootFolder, Folder *CurrentFolder, Folder **resultFolder, File **resultFile)
|
||||
{
|
||||
Folder* _ResultFolder;
|
||||
File* _ResultFile;
|
||||
Folder *_ResultFolder;
|
||||
File *_ResultFile;
|
||||
|
||||
int iResult;
|
||||
|
||||
if(argument == NULL)
|
||||
if (argument == NULL)
|
||||
{
|
||||
return WRONG_ARGUMENT_FAILURE;
|
||||
}
|
||||
|
||||
if(argument[0] == '-')
|
||||
if (argument[0] == '-')
|
||||
{
|
||||
if(checkMinorArgumentValid(command, argument))
|
||||
if (checkMinorArgumentValid(command, argument))
|
||||
{
|
||||
return WRONG_OPTION;
|
||||
}
|
||||
|
@ -215,7 +216,7 @@ int checkArgumentValid(char* command, char* argument, Folder* RootFolder, Folder
|
|||
return SUCCESS;
|
||||
}
|
||||
|
||||
int executeCommand(char* command, char* minorArg, Folder* majorArgFolder, File* majorArgFile, int majorArgIsFolder, Folder* RootFolder, Folder** CurrentFolder)
|
||||
int executeCommand(char *command, char *minorArg, Folder *majorArgFolder, File *majorArgFile, int majorArgIsFolder, Folder *RootFolder, Folder **CurrentFolder)
|
||||
{
|
||||
if (!strcmp(command, "cd"))
|
||||
{
|
||||
|
@ -223,14 +224,14 @@ int executeCommand(char* command, char* minorArg, Folder* majorArgFolder, File*
|
|||
{
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
|
||||
*CurrentFolder = majorArgFolder;
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
else if (!strcmp(command, "ls"))
|
||||
{
|
||||
Folder* PrintDirectory;
|
||||
Folder *PrintDirectory;
|
||||
if (!majorArgIsFolder)
|
||||
{
|
||||
PrintDirectory = *CurrentFolder;
|
||||
|
@ -240,7 +241,7 @@ int executeCommand(char* command, char* minorArg, Folder* majorArgFolder, File*
|
|||
{
|
||||
PrintDirectory = majorArgFolder;
|
||||
}
|
||||
|
||||
|
||||
if (minorArg != NULL)
|
||||
print_list(PrintDirectory, 1);
|
||||
|
||||
|
@ -253,7 +254,6 @@ int executeCommand(char* command, char* minorArg, Folder* majorArgFolder, File*
|
|||
if (!majorArgIsFolder)
|
||||
{
|
||||
// Работаем с файлом, удаление MajorArgFile
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
|
@ -269,28 +269,28 @@ int executeCommand(char* command, char* minorArg, Folder* majorArgFolder, File*
|
|||
}
|
||||
}
|
||||
|
||||
int commandParserHandler(char* input, Folder* RootFolder, Folder** CurrentFolder)
|
||||
int commandParserHandler(char *input, Folder *RootFolder, Folder **CurrentFolder)
|
||||
{
|
||||
int result = SUCCESS; // Если что-то пойдет не так, то он изменится
|
||||
|
||||
char* sep = " ";
|
||||
char* str = (char*) malloc(MAX_COMMAND_LEN), *istr;
|
||||
char *sep = " ";
|
||||
char *str = (char *)malloc(MAX_COMMAND_LEN), *istr;
|
||||
|
||||
int i = 0; // Счетчик обработанных лексемм
|
||||
|
||||
|
||||
strcpy(str, input);
|
||||
istr = strtok(str, sep);
|
||||
|
||||
char* command = (char*) malloc(MAX_COMMAND_LEN);
|
||||
char* arg1 = (char*) malloc(MAX_COMMAND_LEN);
|
||||
char* arg2 = (char*) malloc(MAX_COMMAND_LEN);
|
||||
char *command = (char *)malloc(MAX_COMMAND_LEN);
|
||||
char *arg1 = (char *)malloc(MAX_COMMAND_LEN);
|
||||
char *arg2 = (char *)malloc(MAX_COMMAND_LEN);
|
||||
|
||||
int optionFlag = 0;
|
||||
|
||||
File* ResultFile = NULL;
|
||||
Folder* ResultFolder = NULL;
|
||||
File *ResultFile = NULL;
|
||||
Folder *ResultFolder = NULL;
|
||||
|
||||
while(istr != NULL)
|
||||
while (istr != NULL)
|
||||
{
|
||||
// Обрабатываем команду/аргумент
|
||||
switch (i)
|
||||
|
@ -304,8 +304,8 @@ int commandParserHandler(char* input, Folder* RootFolder, Folder** CurrentFolder
|
|||
istr[i] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
if (checkCommandValid(istr)) // Если команда неправильная
|
||||
|
||||
if (checkCommandValid(istr)) // Если команда неправильная
|
||||
{
|
||||
printf("Incorrect Command!");
|
||||
result = FAILURE;
|
||||
|
@ -313,7 +313,7 @@ int commandParserHandler(char* input, Folder* RootFolder, Folder** CurrentFolder
|
|||
}
|
||||
strcpy(command, istr);
|
||||
break;
|
||||
|
||||
|
||||
case 1:
|
||||
// аргумент 1
|
||||
if (checkArgumentValid(command, istr, RootFolder, *CurrentFolder, &ResultFolder, &ResultFile))
|
||||
|
@ -341,10 +341,10 @@ int commandParserHandler(char* input, Folder* RootFolder, Folder** CurrentFolder
|
|||
result = WRONG_OPTION;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
strcpy (arg2, istr);
|
||||
|
||||
strcpy(arg2, istr);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -357,10 +357,11 @@ int commandParserHandler(char* input, Folder* RootFolder, Folder** CurrentFolder
|
|||
result = executeCommand(command, arg1, ResultFolder, ResultFile, ResultFolder != NULL, RootFolder, CurrentFolder);
|
||||
// printf("- exec: %d", r);
|
||||
|
||||
cleanup: free(str);
|
||||
cleanup:
|
||||
free(str);
|
||||
free(command);
|
||||
free(arg1);
|
||||
free(arg2);
|
||||
|
||||
|
||||
return result;
|
||||
}
|
45
main.c
45
main.c
|
@ -1,12 +1,12 @@
|
|||
#include <stdio.h>
|
||||
|
||||
// #include "structs.h"
|
||||
#include "include/ui.h"
|
||||
|
||||
#include "handler.h"
|
||||
|
||||
int main(int argc, char** argv)
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
Folder* CurrentFolder;
|
||||
Folder *CurrentFolder;
|
||||
Folder RootFolder;
|
||||
|
||||
createFolder("root", &RootFolder);
|
||||
|
@ -19,6 +19,19 @@ int main(int argc, char** argv)
|
|||
addFolder("test3", &RootFolder);
|
||||
|
||||
addFolder("test11", &RootFolder.folders[0]);
|
||||
addFolder("test12", &RootFolder.folders[0]);
|
||||
addFolder("test11", &RootFolder.folders[0].folders[1]);
|
||||
addFile("test", "exe", &RootFolder.folders[0]);
|
||||
|
||||
print_path(&RootFolder.folders[0].folders[0], NULL);
|
||||
|
||||
print_path(NULL, &RootFolder.folders[0].files[0]);
|
||||
|
||||
find_folder("test11", &RootFolder);
|
||||
|
||||
delete_folder(&RootFolder.folders[0].folders[1].folders[0]);
|
||||
|
||||
find_folder("test11", &RootFolder);
|
||||
|
||||
// Folder* ResultFolder = NULL;
|
||||
// File* ResultFile = NULL;
|
||||
|
@ -37,22 +50,22 @@ int main(int argc, char** argv)
|
|||
|
||||
// else
|
||||
// printf("ResultFolder is NULL\n");
|
||||
/*
|
||||
char *buf;
|
||||
|
||||
char* buf;
|
||||
|
||||
while (1)
|
||||
{
|
||||
printf("%s > ", CurrentFolder->filename);
|
||||
buf = commandCallHandler();
|
||||
|
||||
if (buf == NULL)
|
||||
while (1)
|
||||
{
|
||||
printf("Input too long!\n");
|
||||
}
|
||||
printf("%s > ", CurrentFolder->filename);
|
||||
buf = commandCallHandler();
|
||||
|
||||
iResult = commandParserHandler(buf, &RootFolder, &CurrentFolder);
|
||||
printf("result: %d\n", iResult);
|
||||
}
|
||||
if (buf == NULL)
|
||||
{
|
||||
printf("Input too long!\n");
|
||||
}
|
||||
|
||||
iResult = commandParserHandler(buf, &RootFolder, &CurrentFolder);
|
||||
printf("result: %d\n", iResult);
|
||||
}*/
|
||||
|
||||
return 0;
|
||||
}
|
79
structs.c
79
structs.c
|
@ -44,25 +44,25 @@ int check_ext(char *ext)
|
|||
return SUCCESS;
|
||||
}
|
||||
|
||||
int checkFolderExists(char* folder_name, Folder *fld)
|
||||
int checkFolderExists(char *folder_name, Folder *fld)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < fld->folders_count_cur; i++)
|
||||
{
|
||||
if (!strcmp(folder_name, fld->folders[i].filename))
|
||||
return EXISTING_NAME_FAILURE;
|
||||
}
|
||||
{
|
||||
if (!strcmp(folder_name, fld->folders[i].filename))
|
||||
return EXISTING_NAME_FAILURE;
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
int checkFileExists(char* file_name, char* extension, Folder *fld)
|
||||
int checkFileExists(char *file_name, char *extension, Folder *fld)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < fld->files_count_cur; i++)
|
||||
{
|
||||
if (!strcmp(extension, fld->files[i].extension) && !strcmp(file_name, fld->files[i].filename))
|
||||
return EXISTING_NAME_FAILURE;
|
||||
}
|
||||
{
|
||||
if (!strcmp(extension, fld->files[i].extension) && !strcmp(file_name, fld->files[i].filename))
|
||||
return EXISTING_NAME_FAILURE;
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -131,7 +131,7 @@ int addFolder(char *folder_name, Folder *fld)
|
|||
Folder newFolder;
|
||||
Folder *buffer;
|
||||
|
||||
if(checkFolderExists(folder_name, fld)) // если папки не существует...
|
||||
if (checkFolderExists(folder_name, fld)) // если папки не существует...
|
||||
{
|
||||
return EXISTING_NAME_FAILURE;
|
||||
}
|
||||
|
@ -165,7 +165,7 @@ int addFolder(char *folder_name, Folder *fld)
|
|||
free(buffer);
|
||||
}
|
||||
|
||||
fld->folders[fld->folders_count_cur].parent = fld;
|
||||
fld->folders[fld->folders_count_cur - 1].parent = fld;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
@ -213,7 +213,7 @@ int addFile(char *file_name, char *extension, Folder *fld)
|
|||
free(buffer);
|
||||
}
|
||||
|
||||
fld->files[fld->files_count_cur].parent = fld;
|
||||
fld->files[fld->files_count_cur - 1].parent = fld;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
@ -253,44 +253,44 @@ int print_list(Folder *fld, int mode)
|
|||
|
||||
void delete_file(File *deleting)
|
||||
{
|
||||
int i; //iterator
|
||||
int file_ind=-1;
|
||||
if (deleting != NULL) {
|
||||
Folder* parent = deleting->parent;
|
||||
int i; // iterator
|
||||
int file_ind = -1;
|
||||
if (deleting != NULL)
|
||||
{
|
||||
Folder *parent = deleting->parent;
|
||||
|
||||
for (i = 0; i < parent->files_count_cur; i++)
|
||||
{
|
||||
if (parent->files[i] == deleting)
|
||||
if (&(parent->files[i]) == deleting)
|
||||
file_ind = i;
|
||||
}
|
||||
|
||||
for (i = file_ind+1; i < parent->files_count_cur; i++)
|
||||
for (i = file_ind + 1; i < parent->files_count_cur; i++)
|
||||
{
|
||||
parent->files[i] = parent->files[i + 1];
|
||||
}
|
||||
|
||||
parent->files[parent->files_count_cur - 1] = NULL;
|
||||
parent->files_count_cur--;
|
||||
}
|
||||
}
|
||||
|
||||
void delete_folder(Folder* deleting)
|
||||
void delete_folder(Folder *deleting)
|
||||
{
|
||||
int i; //iterator
|
||||
int i; // iterator
|
||||
int fold_ind = -1;
|
||||
if (deleting != NULL) {
|
||||
Folder* parent = deleting->parent;
|
||||
if (deleting != NULL)
|
||||
{
|
||||
Folder *parent = deleting->parent;
|
||||
|
||||
for (i = 0; i < parent->folders_count_cur; i++)
|
||||
{
|
||||
if (parent->folders[i] == deleting)
|
||||
if (&(parent->folders[i]) == deleting)
|
||||
fold_ind = i;
|
||||
}
|
||||
|
||||
free(deleting->files);
|
||||
while (deleting->folders_count_cur)
|
||||
{
|
||||
delete_folder(deleting->folders[0]);
|
||||
delete_folder(&(deleting->folders[0]));
|
||||
}
|
||||
free(deleting->folders);
|
||||
|
||||
|
@ -298,14 +298,14 @@ void delete_folder(Folder* deleting)
|
|||
{
|
||||
parent->folders[i] = parent->folders[i + 1];
|
||||
}
|
||||
parent->folders[parent->folders_count_cur - 1] = NULL;
|
||||
parent->folders[parent->folders_count_cur - 1];
|
||||
parent->folders_count_cur--;
|
||||
}
|
||||
}
|
||||
|
||||
int print_path(Folder* fld, File* fil)
|
||||
int print_path(Folder *fld, File *fil)
|
||||
{
|
||||
Folder* parent;
|
||||
Folder *parent;
|
||||
|
||||
if (fld != NULL)
|
||||
{
|
||||
|
@ -331,24 +331,27 @@ int print_path(Folder* fld, File* fil)
|
|||
return 1;
|
||||
}
|
||||
|
||||
void find_folder(char* name, Folder* parent)
|
||||
void find_folder(char *name, Folder *parent)
|
||||
{
|
||||
int i = 0;
|
||||
// print_list(parent, 1);
|
||||
for (i = 0; i < parent->folders_count_cur; i++)
|
||||
{
|
||||
if (checkFolderExists(name, parent->folders[i]) == EXISTING_NAME_FAILURE)
|
||||
print_path(parent->folders[i]);
|
||||
find_folder(name, parent->folders[i]);
|
||||
// printf("Im in %s\n", parent->folders[i].filename);
|
||||
|
||||
if (!strcmp(name, parent->folders[i].filename))
|
||||
print_path(&(parent->folders[i]), NULL);
|
||||
find_folder(name, &(parent->folders[i]));
|
||||
}
|
||||
}
|
||||
|
||||
void find_file(char* name, char* ext, Folder* parent)
|
||||
void find_file(char *name, char *ext, Folder *parent)
|
||||
{
|
||||
int i = 0;
|
||||
for (i = 0; i < parent->files_count_cur; i++)
|
||||
{
|
||||
if (checkFileExists(name, ext, parent->files[i]) == EXISTING_NAME_FAILURE)
|
||||
print_path(parent->files[i]);
|
||||
find_file(name, ext, parent->folders[i]);
|
||||
if (!strcmp(name, parent->files[i].filename) && !strcmp(ext, parent->files[i].extension))
|
||||
print_path(NULL, &(parent->files[i]));
|
||||
find_file(name, ext, &(parent->folders[i]));
|
||||
}
|
||||
}
|
10
structs.h
10
structs.h
|
@ -38,7 +38,7 @@ typedef struct _Folder
|
|||
struct _Folder *parent;
|
||||
} Folder;
|
||||
|
||||
int checkFolderExists(char* folder_name, Folder *fld);
|
||||
int checkFolderExists(char *folder_name, Folder *fld);
|
||||
|
||||
int createFolder(char *folder_name, Folder *folder);
|
||||
|
||||
|
@ -48,4 +48,12 @@ int addFile(char *file_name, char *extension, Folder *fld);
|
|||
|
||||
int print_list(Folder *fld, int mode);
|
||||
|
||||
int print_path(Folder *fld, File *fil);
|
||||
|
||||
void delete_file(File *deleting);
|
||||
|
||||
void delete_folder(Folder *deleting);
|
||||
|
||||
void find_folder(char *name, Folder *parent);
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue