LIB_EXPORT rc_t CC KColumnBlobValidateBuffer ( const KColumnBlob * self, const KDataBuffer * buffer, const KColumnBlobCSData * cs_data, size_t cs_data_size ) { size_t bsize; if ( self == NULL ) return RC ( rcDB, rcBlob, rcValidating, rcSelf, rcNull ); if ( buffer == NULL || cs_data == NULL ) return RC ( rcDB, rcBlob, rcValidating, rcParam, rcNull ); bsize = KDataBufferBytes ( buffer ); if ( bsize < self -> loc . u . blob . size ) return RC ( rcDB, rcBlob, rcValidating, rcData, rcInsufficient ); if ( bsize > self -> loc . u . blob . size ) return RC ( rcDB, rcBlob, rcValidating, rcData, rcExcessive ); if ( bsize != 0 ) switch ( self -> col -> checksum ) { case kcsNone: break; case kcsCRC32: return KColumnBlobValidateBufferCRC32 ( buffer -> base, bsize, self -> bswap ? bswap_32 ( cs_data -> crc32 ) : cs_data -> crc32 ); case kcsMD5: return KColumnBlobValidateBufferMD5 ( buffer -> base, bsize, cs_data -> md5_digest ); } return 0; }
rc_t SequenceRecordInit(SequenceRecord *self, unsigned numreads, unsigned readLen[]) { unsigned i; unsigned seqlen = 0; rc_t rc; for (i = 0; i != numreads; ++i) { seqlen += readLen[i]; } rc = SequenceRecordResize(self, &self->storage, numreads, seqlen); if (rc) return rc; memset(self->storage.base, 0, KDataBufferBytes(&self->storage)); for (seqlen = 0, i = 0; i != numreads; ++i) { self->readLen[i] = readLen[i]; self->readStart[i] = seqlen; seqlen += readLen[i]; } self->numreads = numreads; memset(self->cskey, 'T', numreads); return 0; }
static rc_t CC environment_read_func( void *Self, const VXformInfo *info, int64_t row_id, VRowResult *rslt, uint32_t argc, const VRowData argv[] ) { const KDataBuffer *value = Self; rc_t rc = 0; rslt->data->elem_bits = value->elem_bits; rslt->data->elem_count = 0; rc = KDataBufferResize(rslt->data, value->elem_count); if (rc == 0) { memcpy(rslt->data->base, value->base, KDataBufferBytes(value)); rc = KDataBufferCast(rslt->data, rslt->data, rslt->elem_bits, true); if (rc == 0) rslt->elem_count = rslt->data->elem_count; } return rc; }
static rc_t CC KNSManagerNewReleaseVersionImpl(const struct KNSManager *self, SraReleaseVersion *newVersion) { rc_t rc = 0; KDataBuffer result; KHttpRequest *req = NULL; KHttpResult *rslt = NULL; if (newVersion == NULL) { return RC(rcNS, rcArgv, rcAccessing, rcParam, rcNull); } memset(newVersion, 0, sizeof *newVersion); if (self == NULL) { return RC(rcNS, rcArgv, rcAccessing, rcSelf, rcNull); } memset(&result, 0, sizeof result); if (rc == 0) { rc = KNSManagerMakeRequest(self, &req, 0x01010000, NULL, "https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/current/sratoolkit.current.version" ); } if (rc == 0) { rc = KHttpRequestGET(req, &rslt); } if (rc == 0) { uint32_t code = 0; rc = KHttpResultStatus(rslt, &code, NULL, 0, NULL); if (rc == 0) { if (code != 200) { rc = RC(rcNS, rcFile, rcReading, rcFile, rcInvalid); } } } if (rc == 0) { size_t total = 0; KStream *response = NULL; rc = KHttpResultGetInputStream(rslt, &response); if (rc == 0) { rc = KDataBufferMakeBytes(&result, 1024); } while (rc == 0) { size_t num_read = 0; uint8_t *base = NULL; uint64_t avail = result.elem_count - total; if (avail < 256) { rc = KDataBufferResize(&result, result.elem_count + 1024); if (rc != 0) { break; } } base = result.base; rc = KStreamRead(response, &base[total], result.elem_count - total, &num_read); if (num_read > 0 || rc != 0) { DBGMSG(DBG_VFS, DBG_FLAG(DBG_VFS), ("KStreamRead" "(sratoolkit.current.version, %zu) = %R\n", num_read, rc)); } if (rc != 0) { /* TBD - look more closely at rc */ if (num_read > 0) { rc = 0; } else { break; } } if (num_read == 0) { break; } total += num_read; } RELEASE(KStream, response); if (rc == 0) { DBGMSG(DBG_VFS, DBG_FLAG(DBG_VFS), ("sratoolkit.current.version (%zu)\n", total)); result.elem_count = total; } } if (rc == 0) { const char *start = (const void*)(result.base); size_t size = KDataBufferBytes(&result); DBGMSG(DBG_VFS, DBG_FLAG(DBG_VFS), ("sratoolkit.current.version = '%.*s'\n", (uint32_t)size, start)); rc = SraReleaseVersionInit(newVersion, start, size); } KDataBufferWhack(&result); RELEASE(KHttpResult, rslt); RELEASE(KHttpRequest, req); return rc; }