LIB_EXPORT rc_t CC SRATableGetKTableRead ( const SRATable *self, struct KTable const **ktbl ) { rc_t rc; if ( ktbl == NULL ) rc = RC ( rcSRA, rcTable, rcAccessing, rcParam, rcNull ); else { if ( self == NULL ) rc = RC ( rcSRA, rcTable, rcAccessing, rcSelf, rcNull ); else { return VTableGetKTableRead ( self -> vtbl, ktbl ); } * ktbl = NULL; } return rc; }
static rc_t CC ReportObj(const ReportFuncs *f, uint32_t indent, const char *object, bool *wasDbOrTableSet) { Report* self = NULL; const char* fullpath = NULL; const KDatabase* kdb = NULL; const KTable* ktbl = NULL; const VDatabase* db = NULL; KPathType type = kptNotFound; KPathType file_type = kptNotFound; bool alias = false; uint64_t size = 0; bool size_unknown = true; rc_t rc = ReportGet(&self); assert(self); if (wasDbOrTableSet != NULL) { *wasDbOrTableSet = self->db != NULL || self->table != NULL; return 0; } if (self->db != NULL) { type = kptDatabase; db = self->db; } else if (self->table != NULL) { rc_t rc2 = VTableOpenParentRead(self->table, &db); if (rc2) { if (rc == 0) { rc = rc2; } } else if (!db) { type = kptTable; rc2 = VTableGetKTableRead(self->table, &ktbl); if (rc2) { if (rc == 0) { rc = rc2; } } else { rc2 = KTableGetPath(ktbl, &fullpath); } } } if (db) { rc_t rc2 = VDatabaseOpenKDatabaseRead(db, &kdb); type = kptDatabase; if (rc2) { if (rc == 0) { rc = rc2; } } else { rc2 = KDatabaseGetPath(kdb, &fullpath); if (rc2) { if (rc == 0) { rc = rc2; } } } } if (fullpath) { KDirectory* dir = NULL; rc_t rc2 = KDirectoryNativeDir(&dir); if (rc2) { if (rc == 0) { rc = rc2; } } else { file_type = KDirectoryPathType(dir, "%s", fullpath); alias = file_type & kptAlias; file_type &= ~kptAlias; if (file_type == kptFile) { rc2 = KDirectoryFileSize(dir, &size, "%s", fullpath); if (rc2) { if (rc == 0) { rc = rc2; } } else { size_unknown = false; } } } RELEASE(KDirectory, dir); } if (object || type != kptNotFound) { const char* path = fullpath ? fullpath : object ? object : "not set"; const char* stype = type == kptTable ? "table" : type == kptDatabase ? "database" : "unknown"; const char* sfile_type = file_type == kptFile ? "archive" : file_type == kptDir ? "dir" : "unexpected"; if (fullpath && !size_unknown) { if (alias) { OBJ_P_S_A(indent, path, stype, sfile_type, size); } else { OBJ_P_S (indent, path, stype, sfile_type, size); } } else if (fullpath && size_unknown) { if (alias) { OBJ_P_A (indent, path, stype, sfile_type); } else { OBJ_P (indent, path, stype, sfile_type); } } else { OBJ (indent, path, stype); } if (!db) { db = self->db; } if (db) { rc_t rc2 = ReportDepend(f, indent + 1, db); if (rc == 0) { rc = rc2; } } if (file_type == kptDir) { rc_t rc2 = ReportDir(f, indent + 1, ktbl); if (rc == 0) { rc = rc2; } } reportClose(indent, "Object"); } if (db != self->db) { RELEASE(VDatabase, db); } RELEASE(KTable, ktbl); RELEASE(KDatabase, kdb); return rc; }