/* {{{ rberkeley_db_get_dbname */ SEXP rberkeley_db_get_dbname (SEXP _dbp) { DB *dbp; const char *filenamep, *dbnamep; int ret; SEXP names, getnames; PROTECT(getnames = allocVector(VECSXP, 2)); dbp = R_ExternalPtrAddr(_dbp); if(R_ExternalPtrTag(_dbp) != RBerkeley_DB || dbp == NULL) error("invalid 'db' handle"); ret = dbp->get_dbname(dbp, &filenamep, &dbnamep); if(ret==0) { if(filenamep) { SET_VECTOR_ELT(getnames, 0, mkString(filenamep)); } else { SET_VECTOR_ELT(getnames, 0, R_NilValue); } if(dbnamep) { SET_VECTOR_ELT(getnames, 1, mkString(dbnamep)); } else { SET_VECTOR_ELT(getnames, 1, R_NilValue); } PROTECT(names = allocVector(STRSXP, 2)); SET_STRING_ELT(names, 0, mkChar("filename")); SET_STRING_ELT(names, 1, mkChar("dbname")); setAttrib(getnames, R_NamesSymbol, names); } else { return R_NilValue; } UNPROTECT(2); return getnames; }