int cd_dir( char *tpath_on_disk, char *default_dir, int verbose) { char *dir = NULL; int nb_found; int result; size_t i; DIR_ITEM *ditem; if (validate_regexp(tpath_on_disk) != NULL) { result = set_directory(default_dir, verbose); return result; } nb_found = 0; for (ditem=get_dir_list(); ditem!=NULL && nb_found <= 1; ditem=get_next_dir_item(ditem)) { if (match(tpath_on_disk, ditem->tpath)) { i = strlen(ditem->tpath); if((i > 0 && ditem->tpath[i-1] == '/') || (i > 1 && ditem->tpath[i-2] == '/' && ditem->tpath[i-1] == '.')) { /* It is a directory */ char *dir1, *dir2; nb_found++; g_free(dir); dir = g_strdup(ditem->path); if(dir[strlen(dir)-1] == '/') dir[strlen(dir)-1] = '\0'; /* remove last / */ /* remove everything before the last / */ dir1 = strrchr(dir,'/'); if (dir1) { dir1++; dir2 = g_strdup(dir1); amfree(dir); dir = dir2; } } } } if(nb_found==0) { result = set_directory(default_dir, verbose); } else if(nb_found==1) { result = set_directory(dir, verbose); } else { g_printf(_("Too many directories matching '%s'\n"), default_dir); result = 0; } amfree(dir); return result; }
void cd_dir( char * path_on_disk, char * default_dir) { char *path_on_disk_slash = NULL; char *dir = NULL; int nb_found; size_t i; DIR_ITEM *ditem; path_on_disk_slash = g_strconcat(path_on_disk, "/", NULL); nb_found = 0; for (ditem=get_dir_list(); ditem!=NULL && nb_found <= 1; ditem=get_next_dir_item(ditem)) { if (match(path_on_disk, ditem->path) || match(path_on_disk_slash, ditem->path)) { i = strlen(ditem->path); if((i > 0 && ditem->path[i-1] == '/') || (i > 1 && ditem->path[i-2] == '/' && ditem->path[i-1] == '.')) { /* It is a directory */ char *dir1, *dir2; nb_found++; g_free(dir); dir = g_strdup(ditem->path); if(dir[strlen(dir)-1] == '/') dir[strlen(dir)-1] = '\0'; /* remove last / */ /* remove everything before the last / */ dir1 = strrchr(dir,'/'); if (dir1) { dir1++; dir2 = g_strdup(dir1); amfree(dir); dir = dir2; } } } } amfree(path_on_disk_slash); if(nb_found==0) { set_directory(default_dir); } else if(nb_found==1) { set_directory(dir); } else { g_printf(_("Too many directory\n")); } amfree(dir); }
/* * Main program (no, really?) */ int main(int argc, char *argv[]) { int i; int list = 0; init_winsock(); for (i = 1; i < argc; i++) { if (argv[i][0] != '-') break; if (strcmp(argv[i], "-v") == 0) verbose = 1; else if (strcmp(argv[i], "-r") == 0) recursive = 1; else if (strcmp(argv[i], "-p") == 0) preserve = 1; else if (strcmp(argv[i], "-q") == 0) statistics = 0; else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "-?") == 0) usage(); else if (strcmp(argv[i], "-P") == 0 && i+1 < argc) portnumber = atoi(argv[++i]); else if (strcmp(argv[i], "-pw") == 0 && i+1 < argc) password = argv[++i]; else if (strcmp(argv[i], "-ls") == 0) list = 1; else if (strcmp(argv[i], "--") == 0) { i++; break; } else usage(); } argc -= i; argv += i; if (list) { if (argc != 1) usage(); get_dir_list(argc, argv); } else { if (argc < 2) usage(); if (argc > 2) targetshouldbedirectory = 1; if (colon(argv[argc-1]) != NULL) toremote(argc, argv); else tolocal(argc, argv); } if (connection_open) { char ch; ssh_send_eof(); ssh_recv(&ch, 1); } WSACleanup(); random_save_seed(); return (errs == 0 ? 0 : 1); }