Subversion Repositories Code-Repo

Compare Revisions

Ignore whitespace Rev 140 → Rev 141

/Classwork/CS3214 - Computer Systems/Project 2 - Extensible Shell/plugins/cd.c
0,0 → 1,50
/*
* An example plug-in, which implements the 'cd' command.
*/
#include <stdbool.h>
#include <stdio.h>
#include <pwd.h>
#include <unistd.h>
#include <sys/types.h>
#include "../esh.h"
#include <signal.h>
#include "../esh-sys-utils.h"
 
static bool
init_plugin(struct esh_shell *shell)
{
printf("Plugin 'cd' initialized...\n");
return true;
}
 
/* Implement chdir built-in.
* Returns true if handled, false otherwise. */
static bool
chdir_builtin(struct esh_command *cmd)
{
if (strcmp(cmd->argv[0], "cd"))
return false;
 
char *dir = cmd->argv[1];
// if no argument is given, default to home directory
if (dir == NULL) {
struct passwd *pw = getpwuid(getuid());
if (pw == NULL) {
esh_sys_error("Could not obtain home directory.\n"
"getpwuid(%d) failed: ", getuid());
} else {
dir = pw->pw_dir;
}
}
 
if (chdir(dir) != 0)
esh_sys_error("chdir: ");
 
return true;
}
 
struct esh_plugin esh_module = {
.rank = 1,
.init = init_plugin,
.process_builtin = chdir_builtin
};