project-Rushilwiz/shell.c
2024-04-25 22:36:43 -04:00

60 lines
1.3 KiB
C

// PID: 730677144
// I pledge the COMP 211 honor code.
// All necessary libraries are included in shell.h
#include "shell.h"
void alloc_mem_for_argv(command_t* p_cmd) {
p_cmd->argv = (char**)malloc((p_cmd->argc + 1) * sizeof(char*));
for (int i = 0; i < p_cmd->argc; i++) {
p_cmd->argv[i] = (char*)malloc(MAX_ARG_LEN * sizeof(char));
}
p_cmd->argv[p_cmd->argc] = NULL;
}
void cleanup(command_t* p_cmd) {
for (int i = 0; i < p_cmd->argc; i++) {
free(p_cmd->argv[i]);
p_cmd->argv[i] = NULL;
}
}
void parse(char* line, command_t* p_cmd) {}
bool find_full_path(command_t* p_cmd) {
// TODO:
return true;
}
int execute(command_t* p_cmd) {
// TODO:
return 0;
}
bool is_builtin(command_t* p_cmd) {
// Do not modify
char* executable = p_cmd->argv[0];
if (strcmp(executable, "cd") == 0 || strcmp(executable, "exit") == 0) {
return true;
}
return false;
}
int do_builtin(command_t* p_cmd) {
// Do not modify
if (strcmp(p_cmd->argv[0], "exit") == 0) {
exit(SUCCESS);
}
// cd
if (p_cmd->argc == 1) { // cd with no arguments
return chdir(getenv("HOME"));
} else if (p_cmd->argc == 2) { // cd with 1 arg
return chdir(p_cmd->argv[1]);
} else {
fprintf(stderr, "cd: Too many arguments\n");
return ERROR;
}
}