Skip to content
Snippets Groups Projects
Commit f2c8d615 authored by Jaewon Choi's avatar Jaewon Choi
Browse files

Add alias framework

parent 68107e73
No related branches found
No related tags found
No related merge requests found
...@@ -27,19 +27,6 @@ int do_cd(int argc, char** argv); ...@@ -27,19 +27,6 @@ int do_cd(int argc, char** argv);
*/ */
int do_pwd(int argc, char** argv); int do_pwd(int argc, char** argv);
/**
do_alias(argc, argv)
params:
argc: # of arguments. argc must be 1.
argv: a list of arguments.
returns:
If success, return 0.
Else if arguments are not valid, return -1.
*/
int do_alias(int argc, char** argv);
/** /**
validate_cd_argv(argc, argv) validate_cd_argv(argc, argv)
...@@ -57,13 +44,5 @@ int validate_cd_argv(int argc, char** argv); ...@@ -57,13 +44,5 @@ int validate_cd_argv(int argc, char** argv);
*/ */
int validate_pwd_argv(int argc, char** argv); int validate_pwd_argv(int argc, char** argv);
/**
validate_alias_argv(argc, argv)
returns:
If success, return 1. (true)
Else return 0. (false)
*/
int validate_alias_argv(int argc, char** argv);
#endif // MYSH_COMMANDS_H_ #endif // MYSH_COMMANDS_H_
...@@ -19,14 +19,6 @@ int do_pwd(int argc, char** argv) { ...@@ -19,14 +19,6 @@ int do_pwd(int argc, char** argv) {
return 0; return 0;
} }
int do_alias(int argc, char** argv) {
if (!validate_alias_argv(argc, argv))
return -1;
// TODO: Fill it!
return 0;
}
int validate_cd_argv(int argc, char** argv) { int validate_cd_argv(int argc, char** argv) {
// TODO: Fill it! // TODO: Fill it!
...@@ -38,7 +30,3 @@ int validate_pwd_argv(int argc, char** argv) { ...@@ -38,7 +30,3 @@ int validate_pwd_argv(int argc, char** argv) {
return 1; return 1;
} }
int validate_alias_argv(int argc, char** argv) {
// TODO: Fill it!
return 1;
}
...@@ -5,6 +5,47 @@ ...@@ -5,6 +5,47 @@
#include "commands.h" #include "commands.h"
#include "utils.h" #include "utils.h"
/**
* Aliased command element
*
* Example:
*
* $ alias cd_to_etc="cd /etc/"
*
* alias: alias of command. (e.g. "cd_to_etc")
* command: aliased command. (e.g. "cd /etc/")
*/
struct aliased_command
{
char alias[512];
char command[8096];
};
static struct aliased_command* aliased_commands[128] = { NULL, };
static int n_aliased_command = 0;
/**
do_alias(argc, argv)
params:
argc: # of arguments. argc must be 1.
argv: a list of arguments.
returns:
If success, return 0.
Else if arguments are not valid, return -1.
*/
int do_alias(int argc, char** argv);
/**
validate_alias_argv(argc, argv)
returns:
If success, return 1. (true)
Else return 0. (false)
*/
int validate_alias_argv(int argc, char** argv);
static void release_argv(int argc, char*** argv); static void release_argv(int argc, char*** argv);
int main() int main()
...@@ -16,6 +57,7 @@ int main() ...@@ -16,6 +57,7 @@ int main()
while (1) { while (1) {
fgets(buf, 8096, stdin); fgets(buf, 8096, stdin);
apply_alias:
mysh_parse_command(buf, &argc, &argv); mysh_parse_command(buf, &argc, &argv);
if (strcmp(argv[0], "") == 0) { if (strcmp(argv[0], "") == 0) {
...@@ -28,9 +70,21 @@ int main() ...@@ -28,9 +70,21 @@ int main()
if (do_pwd(argc, argv)) { if (do_pwd(argc, argv)) {
fprintf(stderr, "pwd: Invalid arguments\n"); fprintf(stderr, "pwd: Invalid arguments\n");
} }
} else if (strcmp(argv[0], "alias") == 0) {
if (do_alias(argc, argv)) {
fprintf(stderr, "alias: Invalid arguments\n");
}
} else if (strcmp(argv[0], "exit") == 0) { } else if (strcmp(argv[0], "exit") == 0) {
goto release_and_exit; goto release_and_exit;
} else { } else {
for (int i = 0; i < n_aliased_command; ++i) {
if (strcmp(argv[0], aliased_commands[i]->alias) == 0) {
// TODO: fill here!
goto apply_alias;
}
}
fprintf(stderr, "%s: command not found\n", argv[0]); fprintf(stderr, "%s: command not found\n", argv[0]);
} }
release_and_continue: release_and_continue:
...@@ -41,6 +95,13 @@ release_and_exit: ...@@ -41,6 +95,13 @@ release_and_exit:
break; break;
} }
for (int i = 0; i < n_aliased_command; ++i) {
if (aliased_commands[i]) {
free(aliased_commands[i]);
aliased_commands[i] = NULL;
}
}
return 0; return 0;
} }
...@@ -51,3 +112,19 @@ static void release_argv(int argc, char*** argv) { ...@@ -51,3 +112,19 @@ static void release_argv(int argc, char*** argv) {
free(*argv); free(*argv);
*argv = NULL; *argv = NULL;
} }
int do_alias(int argc, char** argv) {
if (!validate_alias_argv(argc, argv))
return -1;
// TODO: Fill it!
return 0;
}
int validate_alias_argv(int argc, char** argv) {
// TODO: Fill it!
return 1;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment