mirror of
				https://gitlab.com/klmp200/fish.git
				synced 2025-10-31 09:13:05 +00:00 
			
		
		
		
	| @@ -44,8 +44,10 @@ include_directories( | ||||
|         "${source_dir}/googlemock/include" | ||||
| ) | ||||
|  | ||||
|  | ||||
| set(CMAKE_C_STANDARD 99) | ||||
| set(CMAKE_C_FLAGS "-Wall -Werror -pedantic -fpic -Wextra -Wshadow") | ||||
| set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FALGS} -g") | ||||
|  | ||||
| set(SOURCE_FILES fish_shell/main.c fish_shell/fish_types.h fish_shell/fish_core.h fish_shell/fish_core.c fish_shell/fish_commands.c fish_shell/fish_commands.h fish_shell/fish_globbing.c fish_shell/fish_globbing.h fish_shell/fish_utils.c fish_shell/fish_utils.h) | ||||
| add_executable(fish ${SOURCE_FILES}) | ||||
|   | ||||
| @@ -37,12 +37,12 @@ int fishCd(WordArray *args) { | ||||
| 			perror("fish"); | ||||
| 		} | ||||
| 	} | ||||
| 	return 0; | ||||
| 	freeWordArray(args); | ||||
| 	return EXIT_SUCCESS; | ||||
| } | ||||
|  | ||||
| int fishHelp(WordArray *args) { | ||||
| 	int i; | ||||
| 	args->size = args->size; | ||||
| 	printf("Bartuccio Antoine, Amalvy Arthur, Yann Chevanton\n"); | ||||
| 	printf("Tape tes putains de noms de programmes et tes arguments de merde et tabasse ENTER !\n"); | ||||
| 	printf("Les commandes suivantes sont internes :\n"); | ||||
| @@ -50,12 +50,13 @@ int fishHelp(WordArray *args) { | ||||
| 		printf("\t%s\n", builtinCommandsStr[i]); | ||||
| 	} | ||||
| 	printf("Et sinon pour le reste, RTFM !"); | ||||
| 	return 0; | ||||
| 	freeWordArray(args); | ||||
| 	return EXIT_SUCCESS; | ||||
| } | ||||
|  | ||||
| int fishExit(WordArray *args) { | ||||
| 	args->size = args->size; | ||||
| 	exit(EXIT_SUCCESS); | ||||
| 	freeWordArray(args); | ||||
| 	return EXIT_SIGNAL; | ||||
|  | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -20,14 +20,14 @@ void fishLoop(Settings * settings){ | ||||
|         printf("%s", settings->PS1); | ||||
|         line = fishReadLine(); | ||||
|  | ||||
|         splited = split(line, (char*) FISH_TOKENS); | ||||
| 		splited = split(line, (char*) FISH_TOKENS); | ||||
| 		splited = fishExpand(splited); | ||||
|  | ||||
| 		status = fishExecute(splited); | ||||
|  | ||||
| 		free(line); | ||||
|  | ||||
| 	} while(status); | ||||
| 	} while(status != EXIT_SIGNAL); | ||||
| } | ||||
|  | ||||
| int countSeparators(char *string, char *separators) { | ||||
| @@ -145,6 +145,7 @@ int fishLoad(WordArray *array) { | ||||
| 		} while (!WIFEXITED(status) && !WIFSIGNALED(status)); | ||||
| 		if (status) fprintf(stderr, "%s\n", getInsult()); | ||||
| 	} | ||||
| 	freeWordArray(array); | ||||
| 	return status; | ||||
| } | ||||
|  | ||||
| @@ -152,24 +153,32 @@ int fishExecute(WordList *list) { | ||||
| 	WordList *splited = NULL; | ||||
| 	shell_operator op = NONE; | ||||
| 	WordArray *array = NULL; | ||||
| 	int signal = 1; | ||||
|  | ||||
| 	splited = parseWordList(list, &op); | ||||
| 	array = wordListToWordArray(list); | ||||
|  | ||||
| 	signal = loadRightCommand(array); | ||||
| 	if (signal == EXIT_SIGNAL){ | ||||
| 		if (splited != NULL) freeWordList(splited); | ||||
| 		if (array != NULL) freeWordArray(array); | ||||
| 		return signal; | ||||
| 	} | ||||
| 	switch (op) { | ||||
| 		case AND: | ||||
| 			if (!loadRightCommand(array)) fishExecute(splited); | ||||
| 			else freeWordList(splited); | ||||
| 			if (!signal) signal = fishExecute(splited); | ||||
| 			else { | ||||
| 				if (splited != NULL) freeWordList(splited); | ||||
| 			} | ||||
| 			break; | ||||
| 		case OR: | ||||
| 			loadRightCommand(array); | ||||
| 			fishExecute(splited); | ||||
| 			signal = fishExecute(splited); | ||||
| 			break; | ||||
| 		default: | ||||
| 			loadRightCommand(array); | ||||
| 			break; | ||||
| 	} | ||||
| 	return signal; | ||||
|  | ||||
| 	return 1; | ||||
| } | ||||
|  | ||||
| int loadRightCommand(WordArray *array){ | ||||
| @@ -185,12 +194,12 @@ int loadRightCommand(WordArray *array){ | ||||
|  | ||||
| WordList * parseWordList(WordList *list, shell_operator *an_operator) { | ||||
| 	char *op_str[] = { | ||||
| 			(char*) "&&", | ||||
| 			(char*) "||" | ||||
| 			(char*) "||", | ||||
| 			(char*) "&&" | ||||
| 	}; | ||||
| 	shell_operator op[] = { | ||||
| 			AND, | ||||
| 			OR | ||||
| 			OR, | ||||
| 			AND | ||||
| 	}; | ||||
| 	WordList *newList = NULL; | ||||
| 	int max = sizeof(op_str) / sizeof(char*); | ||||
|   | ||||
| @@ -5,6 +5,8 @@ | ||||
| #ifndef FISH_FISH_TYPES_H | ||||
| #define FISH_FISH_TYPES_H | ||||
|  | ||||
| #define EXIT_SIGNAL -100 | ||||
|  | ||||
| /* Custom types */ | ||||
|  | ||||
| typedef enum { | ||||
|   | ||||
| @@ -30,7 +30,7 @@ char *getInsult(){ | ||||
| 	int picked = 0; | ||||
| 	char *insults[] = { | ||||
| 			(char *) "Apprend à écrire crétin !", | ||||
| 			(char *) "Bolos !", | ||||
| 			(char *) "Boloss !", | ||||
| 			(char *) "Mois aussi je sais écrire de la merde, pourtant je le fait pas !", | ||||
| 			(char *) "Oh ! Une erreur ! Comme ta vie en fait...", | ||||
| 			(char *) "Nul !", | ||||
| @@ -110,12 +110,11 @@ WordArray *wordListToWordArray(WordList *list) { | ||||
| 		if (array->words == NULL) crash(); | ||||
|  | ||||
| 		while (current != NULL){ | ||||
| 			array->words[i] = current->word; | ||||
| 			current->word = NULL; | ||||
| 			array->words[i] = strdup(current->word); | ||||
| 			current = current->next; | ||||
| 			i++; | ||||
| 		} | ||||
| 		array->words[i] = NULL; | ||||
| 		array->words[array->size] = NULL; | ||||
| 	} | ||||
|  | ||||
| 	freeWordList(list); | ||||
| @@ -125,7 +124,7 @@ WordArray *wordListToWordArray(WordList *list) { | ||||
|  | ||||
| WordList *wordArrayToWordList(WordArray *array) { | ||||
| 	WordList *list = createWordList(); | ||||
| 	int i = 0; | ||||
| 	int i; | ||||
|  | ||||
| 	for (i=0; i<array->size; i++) | ||||
| 		addWordList(list, array->words[i]); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user