/* Initialize the cache operations. Called while initializing cache files. */ void afs_InitDualFSCacheOps(struct vnode *vp) { int code; static int inited = 0; #ifdef AFS_DARWIN80_ENV char *buffer = (char*)_MALLOC(MFSNAMELEN, M_TEMP, M_WAITOK); #endif if (inited) return; inited = 1; if (vp == NULL) return; #ifdef AFS_DARWIN80_ENV vfs_name(vnode_mount(vp), buffer); if (strncmp("hfs", buffer, 3) == 0) #else if (strncmp("hfs", vp->v_mount->mnt_vfc->vfc_name, 3) == 0) #endif afs_CacheFSType = AFS_APPL_HFS_CACHE; #ifdef AFS_DARWIN80_ENV else if (strncmp("ufs", buffer, 3) == 0) #else else if (strncmp("ufs", vp->v_mount->mnt_vfc->vfc_name, 3) == 0) #endif afs_CacheFSType = AFS_APPL_UFS_CACHE; else osi_Panic("Unknown cache vnode type\n"); #ifdef AFS_DARWIN80_ENV _FREE(buffer, M_TEMP); #endif }
int gui_vfslist_search(struct gui_vfslist *gv, const struct vfsmatch *vm, int reverse) { struct vfsref *vr; unsigned int idx; g_assert(vm != NULL); if (gv->vr_selected == NULL) return (-1); /* Search from top to bottom or vice versa? */ if (!reverse) { /* Step 1: search from selection to end */ for (vr = vfs_list_next(gv->vr_selected), idx = gv->idx_selected + 1; vr != NULL; vr = vfs_list_next(vr), idx++) { if (vfs_match_compare(vm, vfs_name(vr))) { gui_msgbar_flush(); goto found; } } /* Step 2: search from beginning to selection */ for (vr = vfs_list_first(gv->list), idx = 1; vr != vfs_list_next(gv->vr_selected); vr = vfs_list_next(vr), idx++) { if (vfs_match_compare(vm, vfs_name(vr))) { gui_msgbar_warn(_("Search wrapped to top.")); goto found; } } } else { /* Step 1: search from selection to beginning */ for (vr = vfs_list_prev(gv->vr_selected), idx = gv->idx_selected - 1; vr != NULL; vr = vfs_list_prev(vr), idx--) { if (vfs_match_compare(vm, vfs_name(vr))) { gui_msgbar_flush(); goto found; } } /* Step 2: search from end to selection */ for (vr = vfs_list_last(gv->list), idx = vfs_list_items(gv->list); vr != vfs_list_prev(gv->vr_selected); vr = vfs_list_prev(vr), idx--) { if (vfs_match_compare(vm, vfs_name(vr))) { gui_msgbar_warn(_("Search wrapped to bottom.")); goto found; } } } return (-1); found: /* Select our found item */ gv->vr_selected = vr; gv->idx_selected = idx; /* No need to redraw, as window switching is performed */ return (0); }
/** * @brief Redraw the contents of the dialog. */ static void gui_vfslist_refresh(struct gui_vfslist *gv) { unsigned int i, idx, idxw, idxmaxw = 0; char num[16], mark; struct vfsref *vr; if (gv->win == NULL) return; /* Make sure we have everything in sight */ gui_vfslist_cursor_adjust(gv); gui_lock(); werase(gv->win); vr = gv->vr_top; idx = gv->idx_top; if (gv->shownumbers) idxmaxw = gui_vfslist_idxcol_width(gv); for (i = 0; i < gv->winheight; i++) { if (vr == NULL) { /* We've reached the bottom of the list */ mvwaddch(gv->win, i, 0, ' '); wbkgdset(gv->win, COLOR_PAIR(GUI_COLOR_BLOCK)); wclrtobot(gv->win); break; } /* Sanity check */ g_assert((vr == gv->vr_selected) == (idx == gv->idx_selected)); if (vr == gv->vr_selected && gv->winfocused) /* Selected */ wbkgdset(gv->win, COLOR_PAIR(GUI_COLOR_SELECT)); else if (vfs_marked(vr)) /* Marked */ wbkgdset(gv->win, COLOR_PAIR(GUI_COLOR_MARKED)); else if (vr == gv->vr_selected) /* Selected, but inactive */ wbkgdset(gv->win, COLOR_PAIR(GUI_COLOR_DESELECT)); /* Small whitespace on the left, or > when black & white */ if ((vr == gv->vr_selected) && !gui_draw_colors) { if (gv->winfocused) wattron(gv->win, A_BOLD); mvwaddch(gv->win, i, 0, '>'); } else { mvwaddch(gv->win, i, 0, ' '); } wclrtoeol(gv->win); if (gv->shownumbers) { idxw = snprintf(num, sizeof num, "%d", idx); mvwaddstr(gv->win, i, 1 + idxmaxw - idxw, num); waddstr(gv->win, ". "); waddstr(gv->win, vfs_name(vr)); } else { waddstr(gv->win, vfs_name(vr)); } /* Marking character for dirs and such */ mark = vfs_marking(vr); if (mark != '\0') waddch(gv->win, mark); wbkgdset(gv->win, COLOR_PAIR(GUI_COLOR_BLOCK)); wattroff(gv->win, A_BOLD); vr = vfs_list_next(vr); idx++; } wnoutrefresh(gv->win); gui_unlock(); gui_vfslist_percent(gv); if (gv->callback != NULL) gv->callback(); }