void Connection::Work(int ms) { int timeLeft; struct timeval startTime; struct timeval currentTime; gettimeofday( &startTime, 0 ); do { //log_debug("Work: timeLeft=" << timeLeft.count()); // Construct the sets of descriptors we are interested in fd_set inFd, outFd; FD_ZERO(&inFd); FD_ZERO(&outFd); // add connection socket int maxFd = socket_.GetFileDescriptor(); if (WaitForReadability()) FD_SET(maxFd, &inFd); if (WaitForWritability()) FD_SET(maxFd, &outFd); // Check for events int nEvents; if (ms < 0) nEvents = select(maxFd + 1, &inFd, &outFd, NULL, NULL); else { gettimeofday( ¤tTime, 0 ); timeLeft = ms - MilliTimeDiff(currentTime,startTime); struct timeval tv; tv.tv_sec = timeLeft / 1000; tv.tv_usec = (timeLeft - tv.tv_sec*1000) * 1000; nEvents = select(maxFd + 1, &inFd, &outFd, NULL, &tv); } if (nEvents < 0) break; // Process server events int fd = GetFileDescriptor(); if ((FD_ISSET(fd, &inFd )) || (FD_ISSET(fd, &outFd))) Process(); gettimeofday( ¤tTime, 0 ); timeLeft = ms - MilliTimeDiff(currentTime,startTime); } while (!CheckClose() && ((ms < 0) || (timeLeft > 0))); }
std::unique_ptr<IData> ZipFile::openAsData() { if (mZipEntry.method == kCompressStored) { int fd = GetFileDescriptor(mZipHandle); android::FileMap fileMap; bool result = fileMap.create(nullptr, fd, mZipEntry.offset, mZipEntry.uncompressed_length, true); if (!result) { return {}; } return util::make_unique<MmappedData>(std::move(fileMap)); } else { std::unique_ptr<uint8_t[]> data = std::unique_ptr<uint8_t[]>( new uint8_t[mZipEntry.uncompressed_length]); int32_t result = ExtractToMemory(mZipHandle, &mZipEntry, data.get(), static_cast<uint32_t>(mZipEntry.uncompressed_length)); if (result != 0) { return {}; } return util::make_unique<MallocData>(std::move(data), mZipEntry.uncompressed_length); } }
/* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % % % % I m p o r t K e y r i n g K e y % % % % % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % ImportKeyringKey() imports a key to the keyring. % % The format of the ImportKeyringKey method is: % % WizardBooleanType ImportKeyringKey(KeyringInfo *keyring_info, % ExceptionInfo *exception) % % A description of each parameter follows: % % o keyring_info: The ring info. % % o exception: Return any errors or warnings in this structure. % */ WizardExport WizardBooleanType ImportKeyringKey(KeyringInfo *keyring_info, ExceptionInfo *exception) { FileInfo *file_info; KeyringInfo *import_info; WizardStatusType status; size_t length; StringInfo *filetype, *magick; WizardOffsetType offset; (void) LogWizardEvent(TraceEvent,GetWizardModule(),"..."); WizardAssert(KeymapDomain,keyring_info != (KeyringInfo *) NULL); WizardAssert(KeymapDomain,keyring_info->signature == WizardSignature); WizardAssert(KeymapDomain,exception != (ExceptionInfo *) NULL); import_info=AcquireKeyringInfo(keyring_info->path); SetKeyringId(import_info,keyring_info->id); if (ExportKeyringKey(import_info,exception) != WizardFalse) { char *id; /* Duplicate keys are not allowed in the keyring. */ id=StringInfoToHexString(keyring_info->id); (void) ThrowWizardException(exception,GetWizardModule(),KeyringError, "unable to import key `%s' (its already in the keyring): %s",id, keyring_info->path); id=DestroyString(id); import_info=DestroyKeyringInfo(import_info); return(WizardFalse); } import_info=DestroyKeyringInfo(import_info); file_info=AcquireFileInfo(keyring_info->path,KeyringFilename,WriteFileMode, exception); if (file_info == (FileInfo *) NULL) return(WizardFalse); magick=GetWizardMagick(WizardMagick,sizeof(WizardMagick)); status=WriteFileChunk(file_info,GetStringInfoDatum(magick), GetStringInfoLength(magick)); magick=DestroyStringInfo(magick); filetype=GetWizardMagick((unsigned char *) KeyringFiletype, strlen(KeyringFiletype)); status&=WriteFileChunk(file_info,GetStringInfoDatum(filetype), GetStringInfoLength(filetype)); filetype=DestroyStringInfo(filetype); offset=lseek(GetFileDescriptor(file_info),0,SEEK_END); if (offset == -1) { file_info=DestroyFileInfo(file_info,exception); (void) ThrowWizardException(exception,GetWizardModule(),KeyringError, "unable to seek keyring `%s': %s",GetFilePath(file_info), strerror(errno)); return(WizardFalse); } status&=WriteFile32Bits(file_info,keyring_info->signature); status&=WriteFile32Bits(file_info,0U); status&=WriteFile16Bits(file_info,keyring_info->protocol_major); status&=WriteFile16Bits(file_info,keyring_info->protocol_minor); status&=WriteFile64Bits(file_info,(WizardSizeType) keyring_info->timestamp); length=GetStringInfoLength(keyring_info->id); status&=WriteFile32Bits(file_info,(size_t) length); status&=WriteFileChunk(file_info,GetStringInfoDatum(keyring_info->id),length); length=GetStringInfoLength(keyring_info->key); status&=WriteFile32Bits(file_info,(size_t) length); status&=WriteFileChunk(file_info,GetStringInfoDatum(keyring_info->key), length); length=GetStringInfoLength(keyring_info->nonce); status&=WriteFile32Bits(file_info,(size_t) length); status&=WriteFileChunk(file_info,GetStringInfoDatum(keyring_info->nonce), length); if (status == WizardFalse) (void) ThrowWizardException(exception,GetWizardModule(),KeyringError, "unable to write keyring `%s': %s",GetFilePath(file_info), strerror(errno)); file_info=DestroyFileInfo(file_info,exception); return(WizardTrue); }