Example #1
0
File: cunit.c Project: asu88/SOT
//PROGRAMA PRINCIPAL CD
void
ChangeDirectory(Comando* comando){
	char* path;
	int error;
	char buf[1024];
	char dir[1024];
	if(comando->arg[1]!=NULL){
		if(dollar(comando->arg[1][0])){
			path=ConvertDollarVar(comando->arg[1]);
			if(path!=NULL){
				fprintf(stderr, "Error: cant change directory %s\n", path);
			}
		}
		if(comando->arg[1][0]!='/'){
			getcwd(buf, sizeof(buf));
			sprintf(dir, "%s/%s", buf, comando->arg[1]);
			error=change_directory(dir);
			if(error){
				fprintf(stderr, "Error: cant change directory %s\n", dir);
			}
		}else{			
			error=change_directory(comando->arg[1]);
			if(error){
				fprintf(stderr, "Error: cant change directory %s\n", dir);

			}
		}
	}else{
		path=getEnv("HOME");
		error=change_directory(path);
		if(error){
			fprintf(stderr, "Error: cant change directory %s\n", path);
		}
	}
}
Example #2
0
static gboolean write_input_device_info(const gchar *path,
                                        GError **error) {
    gchar *last_wd = getcwd(g_malloc(PATH_MAX), PATH_MAX),
          *input_dev_path,
          *device_name,
          *device_port;
    GDir *input_dir;

    if (!change_directory(path, error))
        goto out1;

    /* If the subdirectory "input" exists, there's probably an input device
     * attached to this i8042 port */
    input_dir = g_dir_open("input", 0, error);
    if (!input_dir) {
        if (g_error_matches(*error, G_FILE_ERROR, G_FILE_ERROR_NOENT) ||
            g_error_matches(*error, G_FILE_ERROR, G_FILE_ERROR_NOTDIR))
            g_clear_error(error);

        goto out2;
    }

    /* Find the directory containing the information on the device */
    input_dev_path = NULL;
    for (const gchar *dir_name = g_dir_read_name(input_dir);
         dir_name != NULL && *error == NULL;
         dir_name = g_dir_read_name(input_dir)) {

        if (g_str_has_prefix(dir_name, "input")) {
            input_dev_path = g_build_filename("input", dir_name, NULL);
            break;
        }
    }
    if (!input_dev_path)
        goto out3;

    if (!g_file_get_contents("description", &device_port, NULL, error))
        goto out4;

    if (!change_directory(input_dev_path, error))
        goto out5;

    if (!g_file_get_contents("name", &device_name, NULL, error))
        goto out5;

    g_strstrip(device_port);
    g_strstrip(device_name);

    printf("#    \"%s\" on %s\n", device_name, device_port);

      g_free(device_name);
out5: g_free(device_port);
out4: g_free(input_dev_path);
out3: g_dir_close(input_dir);

out2: change_directory(last_wd, error);
out1: g_free(last_wd);

    return !(*error);
}
Example #3
0
int
swap_dirs(void)
{
	stack_entry_t item;

	if(stack_top == 0)
		return -1;

	item = stack[--stack_top];

	if(pushd() != 0)
	{
		free_entry(&item);
		return -1;
	}

	if(change_directory(&lwin, item.lpane_dir) >= 0)
		load_dir_list(&lwin, 0);

	if(change_directory(&rwin, item.rpane_dir) >= 0)
		load_dir_list(&rwin, 0);

	fview_cursor_redraw(curr_view);
	refresh_view_win(other_view);

	free_entry(&item);
	return 0;
}
Example #4
0
BOOL FileSystem::Initialize()
{
	Log(TAG "Initializing...");
	IFileSystem::Initialize();

	if (!this->pWorkDir)
	{
		char dir[1024];
		char dir2[1024];
		memset(dir2, '\0', 1024);
		memset(dir, '\0', 1024);
		get_current_directory(dir, 1024);

		snprintf(dir2, 1024, "%s/%s", dir, FILESYSTEM_DEFAULT_PATH);
		Info(TAG "Working dir is: %s", dir2);

		if (change_directory(dir2))
		{
			Log(TAG "Could not change current directory.");
		}
	}
	this->BuildFileTable();
	this->Reset();
	Log(TAG "Initialization completed. Free Memory: %d.", pMemoryManager->GetFreeMemory());

	return TRUE;
}
Example #5
0
int main(int argc, char **argv)
{
	int i;
	int pos;
	char *commands[] = {"cd", "exit", "path"};
	cmdArgv = malloc(MAX_CMD_ARGS * sizeof(char*));;
	init();

	while (TRUE) {
		for (i = 0; i < MAX_CMD_ARGS; i++)
			cmdArgv[i] = NULL;
		cmdArgc = 0;

		printf("$ ");
		read_and_parse_input();
		pos = find_position(commands, 3, cmdArgv[0]);
		switch (pos) {
		case 0:
			change_directory();
			break;
		case 1:
			exit(0);
			break;
		case 2:
			manage_path();
			break;
		default:
			exec_command();
			break;
		}
	}
	return 0;
}
Example #6
0
int	check_next(char *cmd, char **arg, char **env)
{
  int	ret;

  ret = 0;
  if (my_strcmp("echo", arg[0]) == 0)
    {
      if (arg[1] == NULL)
	printf("Usage : echo [-neE] [VALUE] \n");
      else
	my_echo(&arg[1], 0, 0);
      ++ret;
    }
  if (my_strcmp("cd", arg[0]) == 0)
    {
      change_directory(arg[1], env);
      ++ret;
    }
  if (my_strcmp("history", cmd) == 0)
    {
      my_history();
      ++ret;
    }
  ret += check_again(cmd, arg, env);
  return (ret);
}
Example #7
0
/* Navigates the view to given mark if it's valid.  Returns new value for
 * save_msg flag. */
static int
navigate_to_bookmark(FileView *view, char mark)
{
	const bookmark_t *const bmark = get_bookmark(mark);

	if(is_bmark_valid(bmark))
	{
		if(change_directory(view, bmark->directory) >= 0)
		{
			load_dir_list(view, 1);
			(void)ensure_file_is_selected(view, bmark->file);
		}
	}
	else
	{
		if(!char_is_one_of(valid_bookmarks, mark))
			status_bar_message("Invalid mark name");
		else if(is_bmark_empty(bmark))
			status_bar_message("Mark is not set");
		else
			status_bar_message("Mark is invalid");

		move_to_list_pos(view, view->list_pos);
		return 1;
	}
	return 0;
}
Example #8
0
/*!

\brief Returns user's home directory.
\details Defined in dmzSystemFile.h.
\return Returns String containing users home directory.

*/
dmz::String
dmz::get_home_directory () {

   String result (get_env ("HOME"));

   if (!result) {

      const String StartDir (get_current_directory ());

      if (change_directory ("~")) { result = get_current_directory (); }

      change_directory (StartDir);
   }

   return result;
}
Example #9
0
int				cd_fct(char *path)
{
	int			opt_p;
	char		*oldpwd;
	char		**tmp;
	t_env		*env;

	tmp = ft_strsplit(path, ' ');
	if ((opt_p = check_cd_path(&path, tmp)) < 0)
	{
		ft_putstr("cd: arguments invalid");
		del_tab(tmp);
		path = NULL;
		return (0);
	}
	oldpwd = NULL;
	oldpwd = getcwd(oldpwd, 0);
	env = init_env(NULL);
	if (change_directory(&path, env) != -1)
		update_env(path, oldpwd, env);
	else
		return (0);
	del_tab(tmp);
	return (1);
}
Example #10
0
/* Navigates the view to a given dir/file combination specified by the path. */
static void
navigate_to_selected_file(FileView *view, const char path[])
{
	char name[NAME_MAX];
	char *dir = strdup(path);
	char *const last_slash = find_slashr(dir);

	if(last_slash == NULL)
	{
		copy_str(name, sizeof(name), dir);
	}
	else
	{
		*last_slash = '\0';
		copy_str(name, sizeof(name), last_slash + 1);
	}

	if(change_directory(view, dir) >= 0)
	{
		ui_sb_quick_msgf("%s", "Finding the correct directory...");

		load_dir_list(view, 0);

		(void)ensure_file_is_selected(view, name);
	}
	else
	{
		show_error_msgf("Invalid path", "Cannot change dir to \"%s\"", dir);
	}

	free(dir);
}
Example #11
0
/* Goes one directory up from current location.  Returns zero unless it won't
 * make sense to continue going up (like on error or reaching root). */
static int
cd_to_parent_dir(FileView *view)
{
	char dir_name[strlen(view->curr_dir) + 1];
	int ret;

	/* Return to original directory from custom view. */
	if(flist_custom_active(view))
	{
		navigate_to(view, view->custom.orig_dir);
		return 0;
	}

	/* Do nothing in root. */
	if(is_root_dir(view->curr_dir))
	{
		return 1;
	}

	dir_name[0] = '\0';
	extract_last_path_component(view->curr_dir, dir_name);

	ret = change_directory(view, "../");
	if(ret == -1)
	{
		return 1;
	}

	if(ret == 0)
	{
		load_dir_list(view, 0);
		flist_set_pos(view, find_file_pos_in_list(view, dir_name));
	}
	return 0;
}
Example #12
0
int sbcl_bin_install(struct install_options* param) {
  int ret;
  char* home=configdir();
  char* impl=param->impl;
  char* version=param->version;
  char* impl_path= cat(home,impldir(param->arch,param->os,impl,version),NULL);
  char* src=param->expand_path;
  char* sbcl_home=cat(impl_path,"/lib/sbcl",NULL);
  char* install_root=q(impl_path);
  char* log_path=cat(home,"impls/log/",impl,"-",version,"/install.log",NULL);
  cond_printf(0,"Building %s/%s...",impl,version);
  ensure_directories_exist(impl_path);
  ensure_directories_exist(log_path);
  change_directory(src);
  setenv("SBCL_HOME",sbcl_home,1);
  setenv("INSTALL_ROOT",install_root,1);
  ret=System("(cat find-gnumake.sh; echo find_gnumake)|sh");
  if(ret!=0) {
    fprintf(stderr,"'make' command not available.\n");
    return 0;
  }
  ret=1;
  if(system_redirect("sh install.sh",log_path)==-1)
    ret=0;
  s(home),s(impl_path),s(sbcl_home),s(install_root),s(log_path);
  printf(" Done.\n");
  return ret;
}
Example #13
0
int
key_enter()
{
	info_t cmd = CMD_PLAY;
	struct dir_contents *contents;
	char *name, *buf, *p;
	unsigned int buf_size;
	int ret = 0;
	bool is_dir;

	contents = file_list.contents;

	// file or directory name
	name = (char *)&contents->list[file_list.cur_idx]->name;

	is_dir = is_directory(name);

	if (is_dir)
		buf_size = strlen(name) + 1;
	else
		buf_size = strlen(file_list.dir_name) + 1 + strlen(name) + 1;

	buf = malloc(buf_size);
	if (!buf) {
		mvwprintw(status_win, 3, 5, "MALLOC ERROR");
		return (-1);
	}

	if (is_dir) {
		mvwprintw(status_win, 1, 5, "CHDIR  ");
		strncpy(buf, name, strlen(name));
		buf[buf_size - 1] = '\0';
		if (change_directory(buf) == -1) {
			mvwprintw(status_win, 3, 5, "ERROR: %s", buf);
			ret = -1;
		}
		free(buf);
		return (ret);
	} else {
		// creating a full path for selected file
		p = buf;
		strncpy(p, file_list.dir_name, strlen(file_list.dir_name));
		p += strlen(file_list.dir_name);
		*p++ = '/';
		strncpy(p, name, strlen(name));
		p += strlen(name);
		*p = '\0';
	}

	mvwprintw(status_win, 1, 5, "CMD: PLAY ");
	pthread_mutex_lock(&ui_status_cache_mutex);
	ui_status_cache = CMD_PLAY;
	pthread_mutex_unlock(&ui_status_cache_mutex);

	// send full path
	ret = send_packet(sock_fd, cmd, buf);
	free(buf);

	return (ret);
}
Example #14
0
void
Rescan(Widget widget, XEvent *event, String *params, Cardinal *num_params)
{
    char	*dir;

    /*
     * get the mask string from the File or Export mask widget and put in
     * dirmask
     */
    if (browse_up) {
	FirstArg(XtNstring, &dirmask);
	GetValues(browse_mask);
	FirstArg(XtNstring, &dir);
	GetValues(browse_dir);
	if (change_directory(dir))	/* make sure we are there */
	    return;
	strcpy(cur_browse_dir,dir);	/* save in global var */
	(void) MakeFileList(dir, dirmask, &dir_list, &file_list);
	NewList(browse_flist, file_list);
	NewList(browse_dlist, dir_list);
    } else if (file_up) {
	FirstArg(XtNstring, &dirmask);
	GetValues(file_mask);
	FirstArg(XtNstring, &dir);
	GetValues(file_dir);
	if (change_directory(dir))	/* make sure we are there */
	    return;
	strcpy(cur_file_dir,dir);	/* save in global var */
	strcpy(cur_export_dir,dir);	/* set export directory to file directory */
	(void) MakeFileList(dir, dirmask, &dir_list, &file_list);
	NewList(file_flist,file_list);
	NewList(file_dlist,dir_list);
    } else if (export_up) {
	FirstArg(XtNstring, &dirmask);
	GetValues(exp_mask);
	FirstArg(XtNstring, &dir);
	GetValues(exp_dir);
	if (change_directory(dir))	/* make sure we are there */
	    return;
	strcpy(cur_export_dir,dir);	/* save in global var */
	(void) MakeFileList(dir, dirmask, &dir_list, &file_list);
	NewList(exp_flist, file_list);
	NewList(exp_dlist, dir_list);
    }
}
Example #15
0
void process_command() {
  int command_ptr  = 0;

  initialize_array(command, 80, 0);
  copy_string(command, buffer + C(current_line, 2));
  initialize_array(argument, ARGUMENT_HEAP_SIZE, 0);

  send_rs(command, 10);
  next_line();

  if (str_equal(c_exit, command, 4)) {
    put_char('b');
    put_char('y');
    put_char('e');
    send_display(buffer);
    halt();

  } else if (str_equal(c_cd, command, 3)) {
    int length = copy_string(argument, command + 3);
    change_directory(argument, length);

  } else if (command[0] == 0) {
    return;

  } else {
    int ptr = 0;
    while (command[command_ptr] != ' '
           && command[command_ptr] != 0
           && command_ptr < COLS) {
      int byte = command[command_ptr];
      if (byte >= 'a' && byte <= 'z') {
        byte -= 0x20;
      }
      program_name[ptr] = byte;
      command_ptr += 1;
      ptr += 1;
    }
    program_name[ptr] = 0;

    while (command[command_ptr] == ' ' && command_ptr < COLS) {
      command_ptr += 1;
    }

    ptr = 0;
    while (command[command_ptr] != ' '
           && command[command_ptr] != 0
           && command_ptr < COLS) {
      argument[ptr] = command[command_ptr];
      command_ptr += 1;
      ptr += 1;
    }
    argument[ptr] = 0;
    argument[ARGUMENT_HEAP_SIZE-1] = current_directory_id;
    execute_bin(program_name, argument);
  }
}
Example #16
0
static gboolean write_machine_summary(GError **error) {
    gchar *last_wd = getcwd(g_malloc(PATH_MAX), PATH_MAX),
          *sys_vendor = NULL,
          *product_name = NULL,
          *product_version = NULL,
          *bios_vendor = NULL,
          *bios_date = NULL,
          *bios_version = NULL;

    if (!change_directory("/sys/class/dmi/id", error))
        return FALSE;

    if (!g_file_get_contents("sys_vendor", &sys_vendor, NULL, error) ||
        !g_file_get_contents("product_name", &product_name, NULL, error) ||
        !g_file_get_contents("product_version", &product_version, NULL, error) ||
        !g_file_get_contents("bios_vendor", &bios_vendor, NULL, error) ||
        !g_file_get_contents("bios_date", &bios_date, NULL, error) ||
        !g_file_get_contents("bios_version", &bios_version, NULL, error))
        goto out;

    printf("# Manufacturer: %s"
           "# Product Name: %s"
           "# Version: %s"
           "# BIOS Vendor: %s"
           "# BIOS Date: %s"
           "# BIOS Version: %s"
           "#\n",
           sys_vendor, product_name, product_version, bios_vendor, bios_date,
           bios_version);

out:
    g_free(sys_vendor);
    g_free(product_name);
    g_free(product_version);
    g_free(bios_vendor);
    g_free(bios_date);
    g_free(bios_version);

    change_directory(last_wd, error);
    g_free(last_wd);

    return !(*error);
}
Example #17
0
TEST(chase_links_causes_link_to_be_resolved, IF(not_windows))
{
	assert_success(os_mkdir("dir", 0700));

	/* symlink() is not available on Windows, but other code is fine. */
#ifndef _WIN32
	assert_success(symlink("dir", "dir-link"));
#endif

	assert_non_null(get_cwd(curr_view->curr_dir, sizeof(curr_view->curr_dir)));
	assert_true(change_directory(curr_view, "dir-link") >= 0);
	assert_string_equal("dir", get_last_path_component(curr_view->curr_dir));

	/* Go out of the directory so that we can remove it. */
	assert_true(change_directory(curr_view, "..") >= 0);

	assert_success(rmdir("dir"));
	assert_success(remove("dir-link"));
}
Example #18
0
INLINE void FileSystem::SetWorkDirectory(const char *dir)
{
	IFileSystem::SetWorkDirectory(dir);
	if (change_directory(dir))
	{
		Log(TAG "Could not change current directory.");
	}
	else
	{
		Log(TAG "Changing working directory to: %s", dir);
	}
}
Example #19
0
void
execute_volumes_cb(FileView *view, menu_info *m)
{
	char path_buf[4];
	snprintf(path_buf, 4, "%s", m->items[m->pos]);

	if(change_directory(view, path_buf) < 0)
		return;

	load_dir_list(view, 0);
	move_to_list_pos(view, 0);
}
Example #20
0
int
popd(void)
{
	if(stack_top == 0)
		return -1;

	stack_top--;

	if(change_directory(&lwin, stack[stack_top].lpane_dir) >= 0)
		load_dir_list(&lwin, 0);

	if(change_directory(&rwin, stack[stack_top].rpane_dir) >= 0)
		load_dir_list(&rwin, 0);

	fview_cursor_redraw(curr_view);
	refresh_view_win(other_view);

	free_entry(&stack[stack_top]);

	return 0;
}
Example #21
0
TEST(chase_links_is_not_affected_by_chdir, IF(not_windows))
{
	char pwd[PATH_MAX];

	assert_success(os_mkdir("dir", 0700));

	/* symlink() is not available on Windows, but other code is fine. */
#ifndef _WIN32
	assert_success(symlink("dir", "dir-link"));
#endif

	assert_non_null(get_cwd(pwd, sizeof(pwd)));
	strcpy(curr_view->curr_dir, pwd);

	assert_true(change_directory(curr_view, "dir-link") >= 0);
	assert_success(chdir(".."));
	assert_true(change_directory(curr_view, "..") >= 0);
	assert_true(paths_are_equal(curr_view->curr_dir, pwd));

	assert_success(rmdir("dir"));
	assert_success(remove("dir-link"));
}
int win_drill::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QDialog::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: change_directory(); break;
        default: ;
        }
        _id -= 1;
    }
    return _id;
}
Example #23
0
/**
 * Handle Input.
 */
bool handle_input(void) {
  LOG_ENTRY;
  if (is_quit_command(input_buffer)) {
    exit_shell();
    LOG_RETURN(false);
  } else if (is_cd_command(input_buffer)) {
    change_directory();
    LOG_RETURN(false);
  } else if (str_is_whitespace(input_buffer)) {
    LOG_RETURN(false);
  } else {
    input_tokens = tokenize(input_buffer);
    LOG_RETURN(true);
  }
}
Example #24
0
void popup_browse_panel(Widget w)
{
    char *fval, *pval;

    set_temp_cursor(wait_cursor);
    XtSetSensitive(w, False);
    browse_parent = w;
    browse_up = True;
    file_viewed[0] = '\0';

    if (!browse_popup) {
	get_directory(local_dir);
    } else {
	strcpy(local_dir, cur_browse_dir);
    }

    /* move to the file directory  - if not the current dir
        and set up the file/directory values
    */
    pval = (char*) panel_get_value( pic_name_panel );
    fval = strrchr(pval, '/');
    if ( !fval ) {	/* no path in name so just use name */
      strcpy(browse_filename, pval);
    } else {		/* set us up in the same path as the file */
      strcpy(local_dir, pval);
      strcpy(browse_filename, fval+1);
      local_dir[strlen(pval) - strlen(fval)] = '\0';
      (void) change_directory(local_dir);
    }

    if (!browse_popup) {
	create_browse_panel(w);
    }

    FirstArg(XtNstring, local_dir);
    SetValues(browse_dir);
    FirstArg(XtNstring, browse_filename);
    SetValues(browse_selfile);	

    XtPopup(browse_popup, XtGrabNonexclusive);
    Rescan(0, 0, 0, 0);

    (void) XSetWMProtocols(tool_d, XtWindow(browse_popup), &wm_delete_window, 1);
    /* if the file message window is up add it to the grab */
    file_msg_add_grab();
    set_cmap(XtWindow(browse_popup));  /* ensure most recent cmap is installed */
    reset_cursor();
}
Example #25
0
File: fuse.c Project: jubalh/vifm
static void
updir_from_mount(FileView *view, fuse_mount_t *runner)
{
	char *file;
	int pos;

	if(change_directory(view, runner->source_file_dir) < 0)
		return;

	load_dir_list(view, 0);

	file = runner->source_file_name;
	file += strlen(runner->source_file_dir) + 1;
	pos = find_file_pos_in_list(view, file);
	flist_set_pos(view, pos);
}
Example #26
0
/* Windows has various limitations on characters used in file names. */
TEST(tilde_is_expanded_after_negation, IF(not_windows))
{
    char path[PATH_MAX];
    snprintf(path, sizeof(path), "%s/~", sandbox);

    assert_success(exec_commands("let $a = 'x'", &lwin, CIT_COMMAND));

    assert_success(os_mkdir(path, 0700));

    assert_success(exec_commands("auto DirEnter !~ let $a = 1", &lwin,
                                 CIT_COMMAND));

    assert_string_equal("x", env_get("a"));
    assert_true(change_directory(curr_view, path) >= 0);
    assert_string_equal("1", env_get("a"));

    assert_success(rmdir(path));
}
Example #27
0
File: menus.c Project: lyuts/vifm
/* Navigates the view to a given dir/file combination specified by the path. */
static void
navigate_to_selected_file(FileView *view, const char path[])
{
	/* Check whether target path is directory while we don't change current
	 * working directory by invoking change_directory() function below. */
	const int dst_is_dir = is_dir(path);

	char name[NAME_MAX];
	char *dir = strdup(path);
	char *const last_slash = find_slashr(dir);

	if(last_slash == NULL)
	{
		copy_str(name, sizeof(name), dir);
	}
	else
	{
		*last_slash = '\0';
		copy_str(name, sizeof(name), last_slash + 1);
	}

	if(change_directory(view, dir) >= 0)
	{
		status_bar_message("Finding the correct directory...");
		wrefresh(status_bar);

		load_dir_list(view, 0);

		if(dst_is_dir)
		{
			strcat(name, "/");
		}
		(void)ensure_file_is_selected(view, name);
	}
	else
	{
		show_error_msgf("Invalid path", "Cannot change dir to \"%s\"", dir);
	}

	free(dir);
}
/*
* builtin_cmd
*
* 내장 명령을 수행한다.
* 내장 명령이 아니면 1을 리턴한다.
*/
int builtin_cmd(int argc, char **argv)
{ 
	// 내장 명령어 문자열과 argv[0]을 비교하여 각각의 처리 함수 호출
	if ( (!strcmp (argv[0], "quit")) || (!strcmp (argv[0], "exit")) ) {
		exit(0);
	}
    if ( !strcmp(argv[0], "ls")){
       return list_files(argc, argv);
    }
    if ( !strcmp(argv[0], "ll")){
       return list_all_files(argc, argv);
    }
    if ( !strcmp(argv[0], "cp")){
        return copy_file(argc, argv);
    }
    if ( !strcmp(argv[0], "rm")){
        return remove_file(argc, argv);
    }
    if ( !strcmp(argv[0], "move")){
        return move_file(argc, argv);
    }
    if ( !strcmp(argv[0], "cd")){
        return change_directory(argc, argv);
    }
    if ( !strcmp(argv[0], "pwd")){
        return print_working_directory();
    }
    if ( !strcmp(argv[0], "mkdir")){
        return make_directory(argc, argv);
    }
    if ( !strcmp(argv[0], "rmdir")){
        return remove_directory(argc, argv);
    }
    if ( !strcmp(argv[0], "cpdir")){
        return copy_directory(argc, argv);
    }
        
	// 내장 명령어가 아님.
    printf("command not found\n");
	return 1;
}
Example #29
0
/* Comando cd do lado do servidor */
void kermit_server_cd(int socket, const char *params, unsigned int params_length) {
  char error;

  fprintf(stdout, "CHANGING DIRECTORY to \"%s\"\n", params);

  /* Altera o diretório corrente para o especificado */
  error = change_directory(params, 0);

  /* Se não houve erro durante a mudança de diretório */
  if(error == KERMIT_ERROR_SUCCESS) {
    /* Envia um pacote indicando que a operação foi realizada com sucesso para o cliente */
    fprintf(stdout, "Directory now is \"%s\", sending OK message over network...\n", get_current_directory());
    send_kermit_packet(socket, "", 0, PACKET_TYPE_OK);
    fprintf(stdout, "CD operation successfully done!\n");
  /* Caso ocorra algum erro durante a mudança de diretório */
  } else {
    /* Envia um pacote contendo o código do erro para o cliente */
    fprintf(stdout, "CD operation not possible, sending error over network... ");
    send_kermit_packet(socket, &error, sizeof(char), PACKET_TYPE_ERROR);
    fprintf(stdout, "Done!\n");
  }
}
Example #30
0
int main()
{
	while (TRUE)
	{
		// print prompt and read into string array input.
		print_prompt();
		char* input[64];
		scan_input(input);
		int input_len = array_len(input);
		int option = 0;

		// if last parameter is an & then run child process in background.
		/*if (input_len != 0 && !strcmp(input[input_len], "&"))
		{
			option = 1;
			input[input_len] = NULL;
		}*/

		/* pass to change_directory if input is a cd command.
		   Else perform a fork and process input. */
		if (input_len != 0 && !strcmp(input[0], "cd"))
		{
			change_directory(input);
		}
		else if (input_len != 0 && fork() != 0)
		{
			// code for parent process.
			int statloc;
			process_parent(&statloc, option);
		}
		else if (input_len != 0)
		{
			// code for forked child process.
			process_child(input);
		}

	}
}