Example #1
0
static bool_t
xdr_mntlistencode(XDR *xdrs, HASHSET *mntlist)
{
    HASHSET_ITERATOR iterator = h_iterator(*mntlist);

    for (;;) {
        struct mntentry *m = (struct mntentry *)h_next(iterator);
        bool_t more_data = (m != NULL);

        if (!xdr_bool(xdrs, &more_data)) {
            if (iterator != NULL)
                free(iterator);
            return (FALSE);
        }

        if (!more_data)
            break;

        if ((!xdr_name(xdrs, &m->m_host)) ||
                (!xdr_dirpath(xdrs, &m->m_path))) {
            if (iterator != NULL)
                free(iterator);
            return (FALSE);
        }

    }

    if (iterator != NULL)
        free(iterator);

    return (TRUE);
}
Example #2
0
void
mntlist_delete_all(char *host)
{
    HASHSET_ITERATOR iterator;
    struct mntentry *m;

    (void) rw_wrlock(&rmtab_lock);

    iterator = h_iterator(mntlist);

    while (m = (struct mntentry *)h_next(iterator)) {
        if (strcasecmp(m->m_host, host))
            continue;

        rmtab_delete(m->m_pos);

        (void) h_delete(mntlist, m);

        free(m->m_path);
        free(m->m_host);
        free(m);
    }

    if (RMTAB_TOOMANY_DELETED())
        rmtab_rewrite();

    (void) rw_unlock(&rmtab_lock);

    if (iterator != NULL)
        free(iterator);
}
static struct entry *__h_lookup(struct hash_table *ht, unsigned h, dm_oblock_t oblock,
				struct entry **prev)
{
	struct entry *e;

	*prev = NULL;
	for (e = h_head(ht, h); e; e = h_next(ht, e)) {
		if (e->oblock == oblock)
			return e;

		*prev = e;
	}

	return NULL;
}
Example #4
0
static el_status_t meta(void)
{
    int c;
    el_keymap_t              *kp;

    if ((c = tty_get()) == EOF)
        return CSeof;

#ifdef CONFIG_ANSI_ARROWS
    /* Also include VT-100 arrows. */
    if (c == '[' || c == 'O') {
        switch (tty_get()) {
	    case EOF:  return CSeof;
	    case '2':  tty_get(); return CSstay;     /* Insert */
	    case '3':  tty_get(); return del_char(); /* Delete */
	    case '5':  tty_get(); return CSstay;     /* PgUp */
	    case '6':  tty_get(); return CSstay;     /* PgDn */
	    case 'A':  return h_prev();              /* Up */
	    case 'B':  return h_next();              /* Down */
	    case 'C':  return fd_char();             /* Left */
	    case 'D':  return bk_char();             /* Right */
	    case 'F':  return end_line();            /* End */
	    case 'H':  return beg_line();            /* Home */
	    default:                                 /* Fall through */
		break;
        }

	return el_ring_bell();
    }
#endif /* CONFIG_ANSI_ARROWS */

    if (isdigit(c)) {
        for (Repeat = c - '0'; (c = tty_get()) != EOF && isdigit(c); )
            Repeat = Repeat * 10 + c - '0';
	tty_push(c);
        return CSstay;
    }

    if (isupper(c))
        return do_macro(c);
    for (kp = MetaMap; kp->Function; kp++) {
        if (kp->Key == c)
            return kp->Function();
    }

    return el_ring_bell();
}
Example #5
0
/*
 * Rewrite /etc/rmtab with a current content of mntlist.
 */
static void
rmtab_rewrite()
{
    if (rmtabf)
        (void) fclose(rmtabf);

    /* Rewrite the file. */
    if (rmtabf = fopen(RMTAB, "w+")) {
        HASHSET_ITERATOR iterator;
        struct mntentry *m;

        (void) fchmod(fileno(rmtabf),
                      (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH));
        rmtab_inuse = rmtab_deleted = 0;

        iterator = h_iterator(mntlist);

        while (m = (struct mntentry *)h_next(iterator))
            m->m_pos = rmtab_insert(m->m_host, m->m_path);
        if (iterator != NULL)
            free(iterator);
    }
}