static int bin_zuntie(char *nam, char **args, Options ops, UNUSED(int func)) { Param pm; char *pmname; int ret = 0; for (pmname = *args; *args++; pmname = *args) { pm = (Param) paramtab->getnode(paramtab, pmname); if(!pm) { zwarnnam(nam, "cannot untie %s", pmname); ret = 1; continue; } if (pm->gsu.h != &gdbm_hash_gsu) { zwarnnam(nam, "not a tied gdbm hash: %s", pmname); ret = 1; continue; } queue_signals(); if (OPT_ISSET(ops,'u')) gdbmuntie(pm); /* clear read-only-ness */ if (unsetparam_pm(pm, 0, 1)) { /* assume already reported */ ret = 1; } unqueue_signals(); } return ret; }
int cleanup_(UNUSED(Module m)) { Param pm; /* Remove the special parameter if it is still the same. */ if ((pm = (Param) paramtab->getnode(paramtab, mapfile_nam)) && pm == mapfile_pm) { pm->flags &= ~PM_READONLY; unsetparam_pm(pm, 0, 1); } return 0; }
int cleanup_(Module m) { #ifdef HAVE_TGETENT Param pm; if ((pm = (Param) paramtab->getnode(paramtab, termcap_nam)) && pm == termcap_pm) { pm->flags &= ~PM_READONLY; unsetparam_pm(pm, 0, 1); } #endif deletebuiltins(m->nam, bintab, sizeof(bintab)/sizeof(*bintab)); return 0; }
static int bin_ztie(char *nam, char **args, Options ops, UNUSED(int func)) { char *resource_name, *pmname; GDBM_FILE dbf = NULL; int read_write = GDBM_SYNC, pmflags = PM_REMOVABLE; Param tied_param; if(!OPT_ISSET(ops,'d')) { zwarnnam(nam, "you must pass `-d %s'", backtype); return 1; } if(!OPT_ISSET(ops,'f')) { zwarnnam(nam, "you must pass `-f' with a filename", NULL); return 1; } if (OPT_ISSET(ops,'r')) { read_write |= GDBM_READER; pmflags |= PM_READONLY; } else { read_write |= GDBM_WRCREAT; } /* Here should be a lookup of the backend type against * a registry. */ if (strcmp(OPT_ARG(ops, 'd'), backtype) != 0) { zwarnnam(nam, "unsupported backend type `%s'", OPT_ARG(ops, 'd')); return 1; } resource_name = OPT_ARG(ops, 'f'); pmname = *args; if ((tied_param = (Param)paramtab->getnode(paramtab, pmname)) && !(tied_param->node.flags & PM_UNSET)) { /* * Unset any existing parameter. Note there's no implicit * "local" here, but if the existing parameter is local * that will be reflected in the new one. * * We need to do this before attempting to open the DB * in case this variable is already tied to a DB. * * This can fail if the variable is readonly or restricted. * We could call unsetparam() and check errflag instead * of the return status. */ if (unsetparam_pm(tied_param, 0, 1)) return 1; } dbf = gdbm_open(resource_name, 0, read_write, 0666, 0); if(!dbf) { zwarnnam(nam, "error opening database file %s", resource_name); return 1; } if (!(tied_param = createspecialhash(pmname, &getgdbmnode, &scangdbmkeys, pmflags))) { zwarnnam(nam, "cannot create the requested parameter %s", pmname); gdbm_close(dbf); return 1; } tied_param->gsu.h = &gdbm_hash_gsu; tied_param->u.hash->tmpdata = (void *)dbf; return 0; }