environ #15
@ -39,6 +39,10 @@ bool is_builtin(char *command) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strcmp(command, "echo") == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,6 +59,9 @@ void run_builtin(StringArray *args) {
|
|||||||
else if (strcmp(args->array[0], "set") == 0) {
|
else if (strcmp(args->array[0], "set") == 0) {
|
||||||
set_variable(args);
|
set_variable(args);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(args->array[0], "echo") == 0) {
|
||||||
|
echo(args);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
fprintf(stderr, "Builtin %s does not exist!\n", args->array[0]);
|
fprintf(stderr, "Builtin %s does not exist!\n", args->array[0]);
|
||||||
}
|
}
|
||||||
@ -174,7 +181,7 @@ void set_variable(StringArray *args) {
|
|||||||
free_string_array(chdir_args);
|
free_string_array(chdir_args);
|
||||||
free(variable);
|
free(variable);
|
||||||
free(value);
|
free(value);
|
||||||
// return without setting the variable because change directory will set it on success.
|
// Return without setting the variable because change directory will set it on success
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,3 +190,50 @@ void set_variable(StringArray *args) {
|
|||||||
free(variable);
|
free(variable);
|
||||||
free(value);
|
free(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void echo(StringArray *args) {
|
||||||
|
StringArray *no_variables = create_string_array();
|
||||||
|
|
||||||
|
for (size_t i = 1; i < args->size; i++) {
|
||||||
|
if (args->array[i][0] == '$') {
|
||||||
|
char *variable = malloc((strlen(args->array[i])) * sizeof(char *));
|
||||||
|
if (variable == NULL) {
|
||||||
|
perror("malloc");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
memset(variable, 0, strlen(args->array[i]));
|
||||||
|
|
||||||
|
// Remove the $ symbol
|
||||||
|
for (size_t j = 0; j < strlen(args->array[i]); j++) {
|
||||||
|
variable[j] = args->array[i][j + 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
char *value = get_array_list(variables, variable);
|
||||||
|
if (value == NULL) {
|
||||||
|
insert_string_array(no_variables, variable);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (i != 1) {
|
||||||
|
fprintf(stdout, " ");
|
||||||
|
}
|
||||||
|
fprintf(stdout, "%s", value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (i != 1) {
|
||||||
|
fprintf(stdout, " ");
|
||||||
|
}
|
||||||
|
fprintf(stdout, "%s", args->array[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (args->size > 0) {
|
||||||
|
fprintf(stdout, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0; i < no_variables->size; i++) {
|
||||||
|
if (i == 0) {
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
}
|
||||||
|
fprintf(stderr, "The variable %s doesn't exist!\n", no_variables->array[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -56,4 +56,10 @@ void print_environ(StringArray *args);
|
|||||||
*/
|
*/
|
||||||
void set_variable(StringArray *args);
|
void set_variable(StringArray *args);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Print a message or variable.
|
||||||
|
* @param args The arguments passed to echo.
|
||||||
|
*/
|
||||||
|
void echo(StringArray *args);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user