Some changes for prompt display

master
Philippe Pittoli 2011-02-17 08:48:03 -08:00
parent c70d64b355
commit 20841218dc
1 changed files with 29 additions and 6 deletions

View File

@ -9,6 +9,9 @@
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#define TAILLE_BUFFER 200
char * path2;
void lire(char **, char **, char **); void lire(char **, char **, char **);
char * lireChaine3(); char * lireChaine3();
void changeDirectory(char * path); void changeDirectory(char * path);
@ -27,10 +30,15 @@ int main(int argc, char **argv, char **env)
signal(SIGINT, quitter); signal(SIGINT, quitter);
signal(SIGQUIT, quitter); signal(SIGQUIT, quitter);
int UUID;
UUID = geteuid();
// Boucle principale qui attend les commandes // Boucle principale qui attend les commandes
while(1) while(1)
{ {
printf("[ %s ] %s $ ",(char *) getenv("USER"), (char *) getenv("PWD")); if(UUID == 0)
printf("[ root ] %s # ", (char *) getenv("PWD"));
else
printf("[ %s ] %s $ ",(char *) getenv("USER"), (char *) getenv("PWD"));
arg1 = arg2 = arg3 = NULL; arg1 = arg2 = arg3 = NULL;
commandeInterne = 0; commandeInterne = 0;
lire(&arg1, &arg2, &arg3); lire(&arg1, &arg2, &arg3);
@ -121,8 +129,11 @@ void execution(char *arg1, char *arg2, char *arg3, char **env)
} }
else // Sinon on attend la fin d'exécution du fils else // Sinon on attend la fin d'exécution du fils
{ {
signal(SIGINT, SIG_IGN);
waitpid(pid, &status, 0 ); waitpid(pid, &status, 0 );
if(status != 0) signal(SIGINT, quitter);
if(status == EXIT_FAILURE )
erreur("Soucis avec le fils"); erreur("Soucis avec le fils");
} }
} }
@ -139,7 +150,11 @@ void execution(char *arg1, char *arg2, char *arg3, char **env)
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
else else
{
signal(SIGINT, SIG_IGN);
waitpid(pid, &status, 0); waitpid(pid, &status, 0);
signal(SIGINT, quitter);
}
} }
free(options); free(options);
} }
@ -152,12 +167,18 @@ void changeDirectory(char * path)
} }
else else
{ {
DIR * repertoire = opendir(path); // A REPRENDRE
struct dirent * rep = readdir(repertoire);
if(chdir(path) != 0) if(chdir(path) != 0)
{
erreur("Impossible de changer de répertoire"); erreur("Impossible de changer de répertoire");
}
else else
setenv("PWD",path, 1); {
if(path2 == NULL)
path2 = (char *) malloc(TAILLE_BUFFER * sizeof(char *));
getcwd(path2, TAILLE_BUFFER);
setenv("PWD",path2, 1);
}
} }
} }
void lire(char** arg1, char** arg2, char** arg3) void lire(char** arg1, char** arg2, char** arg3)
@ -254,7 +275,9 @@ void executionPipe(char *arg1, char *arg3, char **env)
} }
else else
{ {
signal(SIGINT, SIG_IGN);
waitpid(pid, &status, 0); waitpid(pid, &status, 0);
signal(SIGINT, quitter);
} }
} }
void quitter(int signal) void quitter(int signal)