Skip to content
Snippets Groups Projects
Commit 920f9d71 authored by Jaegeon's avatar Jaegeon
Browse files

update on the server

parent b989ba09
Branches master
No related tags found
No related merge requests found
#ifndef MYSH_COMMANDS_H_ #ifndef MYSH_COMMANDS_H_
#define MYSH_COMMANDS_H_ #define MYSH_COMMANDS_H_
char print_buff[1024];
/** /**
do_cd(argc, argv) do_cd(argc, argv)
......
No preview for this file type
...@@ -3,8 +3,6 @@ ...@@ -3,8 +3,6 @@
#include <stdio.h> #include <stdio.h>
#include "commands.h" #include "commands.h"
char print_buff[1024];
int do_cd(int argc, char** argv) { int do_cd(int argc, char** argv) {
if (!validate_cd_argv(argc, argv)) if (!validate_cd_argv(argc, argv))
return -1; return -1;
......
...@@ -51,8 +51,9 @@ static void release_argv(int argc, char*** argv); ...@@ -51,8 +51,9 @@ static void release_argv(int argc, char*** argv);
int main() int main()
{ {
char buf[8096]; char buf[8096];
int argc; int argc, i, j;
char** argv; char** argv;
while (1) { while (1) {
fgets(buf, 8096, stdin); fgets(buf, 8096, stdin);
...@@ -76,10 +77,11 @@ apply_alias: ...@@ -76,10 +77,11 @@ apply_alias:
} 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) { for (i = 0; i < n_aliased_command; ++i) {
if (strcmp(argv[0], aliased_commands[i]->alias) == 0) { if (strcmp(argv[0], aliased_commands[i]->alias) == 0) {
// TODO: fill here! for(j = 0; aliased_commands[i]->command[j] != '\0'; j++)
buf[j] = aliased_commands[i]->command[j];
buf[j] = '\0';
goto apply_alias; goto apply_alias;
} }
} }
...@@ -94,7 +96,7 @@ release_and_exit: ...@@ -94,7 +96,7 @@ release_and_exit:
break; break;
} }
for (int i = 0; i < n_aliased_command; ++i) { for (i = 0; i < n_aliased_command; ++i) {
if (aliased_commands[i]) { if (aliased_commands[i]) {
free(aliased_commands[i]); free(aliased_commands[i]);
aliased_commands[i] = NULL; aliased_commands[i] = NULL;
...@@ -113,17 +115,55 @@ static void release_argv(int argc, char*** argv) { ...@@ -113,17 +115,55 @@ static void release_argv(int argc, char*** argv) {
} }
int do_alias(int argc, char** argv) { int do_alias(int argc, char** argv) {
int i, j, tmp_i, flag;
struct aliased_command *tmp_ac;
if (!validate_alias_argv(argc, argv)) if (!validate_alias_argv(argc, argv))
return -1; return -1;
if(argc == 1){
// TODO: Fill it! for (i = 0; i < n_aliased_command; ++i) {
if (aliased_commands[i])
printf("alias %s='%s'\n", aliased_commands[i]->alias, aliased_commands[i]->command);
}
return 0;
} else {
tmp_i = 0;
flag = 0;
tmp_ac = malloc(sizeof(struct aliased_command));
tmp_ac->alias[0] = '\0';
tmp_ac->command[0] = '\0';
for(i = 0; argv[1][i] != '\0'; i++){
print_buff[tmp_i++] = argv[1][i];
if(!flag && argv[1][i] == '=' && argv[1][i+1] == '"'){
print_buff[tmp_i - 1] = '\0';
for(j = 0; j<n_aliased_command; j++)
if(strcmp(print_buff, aliased_commands[j]->alias) == 0){
free(tmp_ac);
return -1;
}
for(j = 0; j<tmp_i; j++)
tmp_ac->alias[j] = print_buff[j];
tmp_i = 0;
flag = 1;
i++;
}else if(flag && argv[1][i] == '"'){
print_buff[tmp_i - 1] = '\0';
for(j = 0; j<tmp_i; j++)
tmp_ac->command[j] = print_buff[j];
aliased_commands[n_aliased_command++] = tmp_ac;
return 0;
}
}
if(tmp_ac->alias[0] == '\0' || tmp_ac->command[0] == '\0'){
free(tmp_ac);
return -1;
}
}
return 0; return 0;
} }
int validate_alias_argv(int argc, char** argv) { int validate_alias_argv(int argc, char** argv) {
// TODO: Fill it! if(argc > 2)
return 0;
return 1; return 1;
} }
...@@ -6,17 +6,18 @@ void mysh_parse_command(const char* command, ...@@ -6,17 +6,18 @@ void mysh_parse_command(const char* command,
char point; char point;
char buf[300]; char buf[300];
char *tmp_argv[100]; char *tmp_argv[100];
int buf_i, command_i, argv_i, i; int buf_i, command_i, argv_i, i, flag;
buf_i = 0; buf_i = 0;
command_i = 0; command_i = 0;
argv_i = 0; argv_i = 0;
flag = 0;
point = command[command_i++]; point = command[command_i++];
while(point != '\n'){ while(point != '\n'){
buf[buf_i++] = point; buf[buf_i++] = point;
if(point == ' '){ if(!flag && point == ' '){
buf[buf_i - 1] = '\0'; buf[buf_i - 1] = '\0';
tmp_argv[argv_i] = malloc(buf_i * sizeof(char)); tmp_argv[argv_i] = malloc(buf_i * sizeof(char));
for(i=0; i<buf_i; i++) for(i=0; i<buf_i; i++)
...@@ -24,6 +25,9 @@ void mysh_parse_command(const char* command, ...@@ -24,6 +25,9 @@ void mysh_parse_command(const char* command,
buf_i = 0; buf_i = 0;
argv_i++; argv_i++;
} }
if(point == '"')
flag = 1 - flag;
point = command[command_i++]; point = command[command_i++];
} }
...@@ -41,3 +45,4 @@ void mysh_parse_command(const char* command, ...@@ -41,3 +45,4 @@ void mysh_parse_command(const char* command,
(*argv)[i] = tmp_argv[i]; (*argv)[i] = tmp_argv[i];
*argc = argv_i; *argc = argv_i;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment