rishtik/src/boitoutil/essential_shell.c
2021-02-20 18:34:43 +01:00

98 lines
2.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file essential_shell.c
* @author rick <rick@gnous.eu>
* @date 2021
*/
#include "vars.h"
#include "essential_shell.h"
#include "oui-dire.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
/**
* error(): gère les erreurs selon leur code et leur type
* @code: code de lerreur, voir les différents codes plus bas
* @type: NON_FATAL_ERROR pour continuer lexécution
* FATAL_ERROR pour stoper le programme
* @message: message à afficher pour + dinfos ou erreur non implémentée
*
* 1 erreur lors de la création des pipes
* 2 chemin inexistant (pour cd)
*/
void error(int code, int type, char *message)
{
switch (code)
{
case 1:
printf("Erreur lors de la création des pipes.\n");
break;
case 2:
printf("Chemin inexistant.\n");
break;
default:
if (message == NULL)
printf("Erreur inconnue.\n");
else
printf("%s\n", message);
}
if (message != NULL)
printf("Message complémentaire :\n%s\n", message);
if (type == FATAL_ERROR)
exit(code);
}
/**
* native_command(): vérifie si la commande entrée par lutilisateur
* est implémenté dans le terminal
* @command: la commande et ses arguments à vérifier
*
* Vérifie si la commande entrée par lutilisateur est native.
* Si elle lest, le programme appelle la fonction pour exécuter la commande
* en lui passant en paramètre les arguments de la commande.
*
* Return: 0 si la commande nest pas native
* 1 si la commande est native
*/
int native_command(char *command[])
{
int ret = 1; /* 0 si commande non native */
if (!strcmp(command[0], "cd"))
change_dir(command[1]);
if (!strcmp(command[0], "ouï-dire") || !strcmp(command[0], "oui-dire")
|| !strcmp(command[0], "echo"))
{
char *tmp = calloc(MAX_LENGTH, sizeof(char));
int i = 1;
while (command[i] != NULL)
{
strcat(tmp, command[i]);
*(tmp + strlen(tmp)) = ' ';
i++;
}
if (i == 2)
*(tmp + strlen(tmp) - 1) = '\0';
echo(tmp);
}
else
ret = 0;
return ret;
}
/**
* change_dir(): fonction pour implémenter la commande cd
* @dir: le répertoire à ouvrir
*/
void change_dir(char *dir)
{
if (chdir(dir))
error(2, NON_FATAL_ERROR, "Un nom de fichier au lieu dun dossier \
a pu etre passé en paramètres.");
}