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); }