|
@@ -14,8 +14,9 @@
|
|
|
#include "parser.h"
|
|
|
#include "mysh.h"
|
|
|
#include "execute.h"
|
|
|
-#include "command.h"
|
|
|
#include "ipc.h"
|
|
|
+#include "variable.h"
|
|
|
+#include "command.h"
|
|
|
|
|
|
/* --- Extern --- */
|
|
|
extern Error error;
|
|
@@ -28,6 +29,8 @@ char* cmdlist[] = {
|
|
|
"status",
|
|
|
"setenv",
|
|
|
"unsetenv",
|
|
|
+ "set",
|
|
|
+ "unset",
|
|
|
NULL
|
|
|
};
|
|
|
boolean exitsh = false;
|
|
@@ -138,7 +141,17 @@ int launch_internal_command(Command* cmd) {
|
|
|
else if (strncmp(cmd->name, cmdlist[4], length) == 0) {
|
|
|
result = unset_env(cmd->argc, cmd->argv);
|
|
|
return result;
|
|
|
+ }
|
|
|
+ //set
|
|
|
+ else if (strncmp(cmd->name, cmdlist[5], length) == 0) {
|
|
|
+ result = set_local(cmd->argc, cmd->argv);
|
|
|
+ return result;
|
|
|
}
|
|
|
+ //unset
|
|
|
+ else if (strncmp(cmd->name, cmdlist[6], length) == 0) {
|
|
|
+ result = unset_local(cmd->argc, cmd->argv);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
//Aucune commande
|
|
|
else {
|
|
|
return SHELL_FAIL;
|
|
@@ -233,6 +246,7 @@ int set_env(int argc, char** argv) {
|
|
|
free(key);
|
|
|
return EXIT_FAILURE;
|
|
|
}
|
|
|
+ free(key);
|
|
|
return EXIT_SUCCESS;
|
|
|
}
|
|
|
|
|
@@ -258,4 +272,55 @@ int unset_env(int argc, char** argv) {
|
|
|
return EXIT_FAILURE;
|
|
|
}
|
|
|
return EXIT_SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+int set_local(int argc, char** argv){
|
|
|
+ char* str;
|
|
|
+ int length, pos = 0;
|
|
|
+ //Verif les arguments
|
|
|
+ if (argc < 2) {
|
|
|
+ error.print("too few arguments : 1 required, 0 given\n");
|
|
|
+ return EXIT_FAILURE;
|
|
|
+ }
|
|
|
+ if (argc > 2) {
|
|
|
+ error.print("too many arguments : 1 required, %d given\n", argc - 1);
|
|
|
+ return EXIT_FAILURE;
|
|
|
+ }
|
|
|
+ str = argv[1];
|
|
|
+ length = strlen(str);
|
|
|
+ //Verif que chaine est correcte
|
|
|
+ for (int i = 0; i < length; i++) {
|
|
|
+ if (str[i] == '=') {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ pos++;
|
|
|
+ }
|
|
|
+ if (pos >= length - 1) {
|
|
|
+ error.print("Argument invalide : clef=valeur attendu, %s donnée\n", str);
|
|
|
+ return EXIT_FAILURE;
|
|
|
+ }
|
|
|
+ //Ajoute la chaine en shm
|
|
|
+ if (!add_local_data(str)) {
|
|
|
+ error.print("Erreur interne impossible d'ajouter la variable\n");
|
|
|
+ return EXIT_FAILURE;
|
|
|
+ }
|
|
|
+ return EXIT_SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+int unset_local(int argc, char** argv){
|
|
|
+ //Verif les arguments
|
|
|
+ if (argc < 2) {
|
|
|
+ error.print("too few arguments : 1 required, 0 given\n");
|
|
|
+ return EXIT_FAILURE;
|
|
|
+ }
|
|
|
+ if (argc > 2) {
|
|
|
+ error.print("too many arguments : 1 required, %d given\n", argc - 1);
|
|
|
+ return EXIT_FAILURE;
|
|
|
+ }
|
|
|
+ //Supprime de la shm
|
|
|
+ if (!remove_local_data(argv[1])) {
|
|
|
+ error.print("Erreur interne impossible de supprimer la variable\n");
|
|
|
+ return EXIT_FAILURE;
|
|
|
+ }
|
|
|
+ return EXIT_SUCCESS;
|
|
|
}
|