Exemple #1
0
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( &currentTime, 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( &currentTime, 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);
    }
}
Exemple #3
0
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                             %
%                                                                             %
%                                                                             %
%   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);
}