示例#1
0
/* 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
}
示例#2
0
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);
}
示例#3
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();
}