Beispiel #1
0
  void Open()
  {
    int mode = GetOpenMode();
    int siz = GetFileSize();
    if(siz == -1){
      if(Mode == MMapMode::READ)
        throw MMapException("can't find file", path_);
      else
        mode |= O_CREAT;
      siz = 0;
    }
    size_ = size_ <= 0 ? siz : size_;

    if((fd_=::open(path_, mode, 0644))== -1){
      throw MMapException("open", path_);
    }

    if(static_cast<int>(size_ + offset_) > siz){
      if(Mode == MMapMode::READ){
        size_ = std::max(siz - offset_ ,0UL);
      }else{
        ExpandFile();
      }
    }
  }
Beispiel #2
0
already_AddRefed<Promise>
Cache::Keys(JSContext* aCx, const Optional<RequestOrUSVString>& aRequest,
            const CacheQueryOptions& aOptions, ErrorResult& aRv)
{
  if (NS_WARN_IF(!mActor)) {
    aRv.Throw(NS_ERROR_UNEXPECTED);
    return nullptr;
  }

  CacheChild::AutoLock actorLock(mActor);

  CacheQueryParams params;
  ToCacheQueryParams(params, aOptions);

  AutoChildOpArgs args(this,
                       CacheKeysArgs(void_t(), params, GetOpenMode()),
                       1);

  if (aRequest.WasPassed()) {
    RefPtr<InternalRequest> ir =
      ToInternalRequest(aCx, aRequest.Value(), IgnoreBody, aRv);
    if (NS_WARN_IF(aRv.Failed())) {
      return nullptr;
    }

    args.Add(ir, IgnoreBody, IgnoreInvalidScheme, aRv);
    if (NS_WARN_IF(aRv.Failed())) {
      return nullptr;
    }
  }

  return ExecuteOp(args, aRv);
}
Beispiel #3
0
already_AddRefed<Promise>
CacheStorage::Match(JSContext* aCx, const RequestOrUSVString& aRequest,
                    const CacheQueryOptions& aOptions, ErrorResult& aRv)
{
  NS_ASSERT_OWNINGTHREAD(CacheStorage);

  if (!HasStorageAccess()) {
    aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
    return nullptr;
  }

  if (NS_WARN_IF(NS_FAILED(mStatus))) {
    aRv.Throw(mStatus);
    return nullptr;
  }

  RefPtr<InternalRequest> request =
    ToInternalRequest(aCx, aRequest, IgnoreBody, aRv);
  if (NS_WARN_IF(aRv.Failed())) {
    return nullptr;
  }

  RefPtr<Promise> promise = Promise::Create(mGlobal, aRv);
  if (NS_WARN_IF(!promise)) {
    return nullptr;
  }

  CacheQueryParams params;
  ToCacheQueryParams(params, aOptions);

  nsAutoPtr<Entry> entry(new Entry());
  entry->mPromise = promise;
  entry->mArgs = StorageMatchArgs(CacheRequest(), params, GetOpenMode());
  entry->mRequest = request;

  RunRequest(std::move(entry));

  return promise.forget();
}