extern "C" NS_EXPORT
void Crash(int16_t how)
{
  switch (how) {
  case CRASH_INVALID_POINTER_DEREF: {
    volatile int* foo = (int*)0x42;
    *foo = 0;
    // not reached
    break;
  }
  case CRASH_PURE_VIRTUAL_CALL: {
    PureVirtualCall();
    // not reached
    break;
  }
  case CRASH_RUNTIMEABORT: {
    NS_RUNTIMEABORT("Intentional crash");
    break;
  }
  case CRASH_OOM: {
    mozilla::unused << moz_xmalloc((size_t) -1);
    mozilla::unused << moz_xmalloc((size_t) -1);
    mozilla::unused << moz_xmalloc((size_t) -1);
    break;
  }
  case CRASH_MOZ_CRASH: {
    MOZ_CRASH();
    break;
  }
  default:
    break;
  }
}
Пример #2
0
AddrInfo::AddrInfo(const char *host, const PRAddrInfo *prAddrInfo,
                   const char *cname)
{
  size_t hostlen = strlen(host);
  mHostName = static_cast<char*>(moz_xmalloc(hostlen + 1));
  memcpy(mHostName, host, hostlen + 1);
  if (cname) {
      size_t cnameLen = strlen(cname);
      mCanonicalName = static_cast<char*>(moz_xmalloc(cnameLen + 1));
      memcpy(mCanonicalName, cname, cnameLen + 1);
  }
  else {
      mCanonicalName = nullptr;
  }

  PRNetAddr tmpAddr;
  void *iter = nullptr;
  do {
    iter = PR_EnumerateAddrInfo(iter, prAddrInfo, 0, &tmpAddr);
    if (iter) {
      NetAddrElement *addrElement = new NetAddrElement(&tmpAddr);
      mAddresses.insertBack(addrElement);
    }
  } while (iter);
}
Пример #3
0
// Convert the list of words in iwords to the same capitalization aWord and
// return them in owords.
NS_IMETHODIMP mozEnglishWordUtils::FromRootForm(const char16_t *aWord, const char16_t **iwords, uint32_t icount, char16_t ***owords, uint32_t *ocount)
{
  nsAutoString word(aWord);
  nsresult rv = NS_OK;

  int32_t length;
  char16_t **tmpPtr  = (char16_t **)moz_xmalloc(sizeof(char16_t *)*icount);
  if (!tmpPtr)
    return NS_ERROR_OUT_OF_MEMORY;

  mozEnglishWordUtils::myspCapitalization ct = captype(word);
  for(uint32_t i = 0; i < icount; ++i) {
    length = NS_strlen(iwords[i]);
    tmpPtr[i] = (char16_t *) moz_xmalloc(sizeof(char16_t) * (length + 1));
    if (MOZ_UNLIKELY(!tmpPtr[i])) {
      NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(i, tmpPtr);
      return NS_ERROR_OUT_OF_MEMORY;
    }
    memcpy(tmpPtr[i], iwords[i], (length + 1) * sizeof(char16_t));

    nsAutoString capTest(tmpPtr[i]);
    mozEnglishWordUtils::myspCapitalization newCt=captype(capTest);
    if(newCt == NoCap){
      switch(ct)
        {
        case HuhCap:
        case NoCap:
          break;
        case AllCap:
          ToUpperCase(tmpPtr[i],tmpPtr[i],length);
          rv = NS_OK;
          break;
        case InitCap:
          ToUpperCase(tmpPtr[i],tmpPtr[i],1);
          rv = NS_OK;
          break;
        default:
          rv = NS_ERROR_FAILURE; // should never get here;
          break;

        }
    }
  }
  if (NS_SUCCEEDED(rv)){
    *owords = tmpPtr;
    *ocount = icount;
  }
  return rv;
}
Пример #4
0
nsTextFragment&
nsTextFragment::operator=(const nsTextFragment& aOther)
{
  ReleaseText();

  if (aOther.mState.mLength) {
    if (!aOther.mState.mInHeap) {
      m1b = aOther.m1b; // This will work even if aOther is using m2b
    }
    else {
      size_t m2bSize = aOther.mState.mLength *
        (aOther.mState.mIs2b ? sizeof(char16_t) : sizeof(char));

      m2b = static_cast<char16_t*>(malloc(m2bSize));
      if (m2b) {
        memcpy(m2b, aOther.m2b, m2bSize);
      } else {
        // allocate a buffer for a single REPLACEMENT CHARACTER
        m2b = static_cast<char16_t*>(moz_xmalloc(sizeof(char16_t)));
        m2b[0] = 0xFFFD; // REPLACEMENT CHARACTER
        mState.mIs2b = true;
        mState.mInHeap = true;
        mState.mLength = 1;
      }
    }

    if (m1b) {
      mAllBits = aOther.mAllBits;
    }
  }

  return *this;
}
Пример #5
0
NS_IMETHODIMP
nsRandomGenerator::GenerateRandomBytes(uint32_t aLength,
                                       uint8_t** aBuffer)
{
  NS_ENSURE_ARG_POINTER(aBuffer);
  *aBuffer = nullptr;

  nsNSSShutDownPreventionLock locker;
  if (isAlreadyShutDown()) {
    return NS_ERROR_NOT_AVAILABLE;
  }

  mozilla::UniquePK11SlotInfo slot(PK11_GetInternalSlot());
  if (!slot) {
    return NS_ERROR_FAILURE;
  }

  auto buf = static_cast<uint8_t*>(moz_xmalloc(aLength));
  if (!buf) {
    return NS_ERROR_OUT_OF_MEMORY;
  }

  SECStatus srv = PK11_GenerateRandomOnSlot(slot.get(), buf, aLength);
  if (srv != SECSuccess) {
    free(buf);
    return NS_ERROR_FAILURE;
  }

  *aBuffer = buf;

  return NS_OK;
}
Пример #6
0
//
// CreatePrimitiveForCFHTML
//
// Platform specific CreatePrimitive, windows CF_HTML.
//
void
nsPrimitiveHelpers :: CreatePrimitiveForCFHTML ( const void* aDataBuff,
                                                 uint32_t* aDataLen, nsISupports** aPrimitive )
{
  if (!aPrimitive)
    return;

  nsCOMPtr<nsISupportsString> primitive =
    do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID);
  if (!primitive)
    return;

  // We need to duplicate the input buffer, since the removal of linebreaks
  // might reallocte it.
  void* utf8 = moz_xmalloc(*aDataLen);
  if (!utf8)
    return;
  memcpy(utf8, aDataBuff, *aDataLen);
  int32_t signedLen = static_cast<int32_t>(*aDataLen);
  nsLinebreakHelpers::ConvertPlatformToDOMLinebreaks(kTextMime, &utf8, &signedLen);
  *aDataLen = signedLen;

  nsAutoString str(NS_ConvertUTF8toUTF16(reinterpret_cast<const char*>(utf8), *aDataLen));
  free(utf8);
  *aDataLen = str.Length() * sizeof(char16_t);
  primitive->SetData(str);
  NS_ADDREF(*aPrimitive = primitive);
}
NS_IMETHODIMP
EventListenerService::GetListenerInfoFor(nsIDOMEventTarget* aEventTarget,
        uint32_t* aCount,
        nsIEventListenerInfo*** aOutArray)
{
    NS_ENSURE_ARG_POINTER(aEventTarget);
    *aCount = 0;
    *aOutArray = nullptr;
    nsCOMArray<nsIEventListenerInfo> listenerInfos;

    nsCOMPtr<EventTarget> eventTarget = do_QueryInterface(aEventTarget);
    NS_ENSURE_TRUE(eventTarget, NS_ERROR_NO_INTERFACE);

    EventListenerManager* elm = eventTarget->GetExistingListenerManager();
    if (elm) {
        elm->GetListenerInfo(&listenerInfos);
    }

    int32_t count = listenerInfos.Count();
    if (count == 0) {
        return NS_OK;
    }

    *aOutArray =
        static_cast<nsIEventListenerInfo**>(
            moz_xmalloc(sizeof(nsIEventListenerInfo*) * count));
    NS_ENSURE_TRUE(*aOutArray, NS_ERROR_OUT_OF_MEMORY);

    for (int32_t i = 0; i < count; ++i) {
        NS_ADDREF((*aOutArray)[i] = listenerInfos[i]);
    }
    *aCount = count;
    return NS_OK;
}
Пример #8
0
// Caller is responsible for freeing returned buffer.
static char* CFStringRefToUTF8Buffer(CFStringRef cfString)
{
  const char* buffer = ::CFStringGetCStringPtr(cfString, kCFStringEncodingUTF8);
  if (buffer) {
    return PL_strdup(buffer);
  }

  int bufferLength =
    ::CFStringGetMaximumSizeForEncoding(::CFStringGetLength(cfString),
                                        kCFStringEncodingUTF8) + 1;
  char* newBuffer = static_cast<char*>(moz_xmalloc(bufferLength));
  if (!newBuffer) {
    return nullptr;
  }

  if (!::CFStringGetCString(cfString, newBuffer, bufferLength,
                            kCFStringEncodingUTF8)) {
    free(newBuffer);
    return nullptr;
  }

  newBuffer = static_cast<char*>(moz_xrealloc(newBuffer,
                                              strlen(newBuffer) + 1));
  return newBuffer;
}
nsresult nsMsgSearchValidityTable::GetAvailableOperators(
    nsMsgSearchAttribValue aAttribute, uint32_t *aLength,
    nsMsgSearchOpValue **aResult) {
  NS_ENSURE_ARG_POINTER(aLength);
  NS_ENSURE_ARG_POINTER(aResult);

  nsMsgSearchAttribValue attr;
  if (aAttribute == nsMsgSearchAttrib::Default)
    attr = m_defaultAttrib;
  else
    attr = std::min(aAttribute,
                    (nsMsgSearchAttribValue)nsMsgSearchAttrib::OtherHeader);

  uint32_t totalOperators = 0;
  int32_t i;
  for (i = 0; i < nsMsgSearchOp::kNumMsgSearchOperators; i++) {
    if (m_table[attr][i].bitAvailable) totalOperators++;
  }

  nsMsgSearchOpValue *array = (nsMsgSearchOpValue *)moz_xmalloc(
      sizeof(nsMsgSearchOpValue) * totalOperators);
  NS_ENSURE_TRUE(array, NS_ERROR_OUT_OF_MEMORY);

  uint32_t numStored = 0;
  for (i = 0; i < nsMsgSearchOp::kNumMsgSearchOperators; i++) {
    if (m_table[attr][i].bitAvailable) array[numStored++] = i;
  }

  NS_ASSERTION(totalOperators == numStored, "Search Operators not lining up");
  *aLength = totalOperators;
  *aResult = array;
  return NS_OK;
}
Пример #10
0
static T*
ConvertUnknownBreaks(const T* aInSrc, int32_t& aIoLen, const char* aDestBreak)
{
  const T* src = aInSrc;
  const T* srcEnd = aInSrc + aIoLen;  // includes null, if any

  int32_t destBreakLen = strlen(aDestBreak);
  int32_t finalLen = 0;

  while (src < srcEnd) {
    if (*src == nsCRT::CR) {
      if (src < srcEnd && src[1] == nsCRT::LF) {
        // CRLF
        finalLen += destBreakLen;
        src++;
      } else {
        // Lone CR
        finalLen += destBreakLen;
      }
    } else if (*src == nsCRT::LF) {
      // Lone LF
      finalLen += destBreakLen;
    } else {
      finalLen++;
    }
    src++;
  }

  T* resultString = (T*)moz_xmalloc(sizeof(T) * finalLen);
  if (!resultString) {
    return nullptr;
  }

  src = aInSrc;
  srcEnd = aInSrc + aIoLen;  // includes null, if any

  T* dst = resultString;

  while (src < srcEnd) {
    if (*src == nsCRT::CR) {
      if (src < srcEnd && src[1] == nsCRT::LF) {
        // CRLF
        AppendLinebreak(dst, aDestBreak);
        src++;
      } else {
        // Lone CR
        AppendLinebreak(dst, aDestBreak);
      }
    } else if (*src == nsCRT::LF) {
      // Lone LF
      AppendLinebreak(dst, aDestBreak);
    } else {
      *dst++ = *src;
    }
    src++;
  }

  aIoLen = finalLen;
  return resultString;
}
NS_IMETHODIMP
calIcalComponent::GetReferencedTimezones(uint32_t * aCount, calITimezone *** aTimezones)
{
    NS_ENSURE_ARG_POINTER(aCount);
    NS_ENSURE_ARG_POINTER(aTimezones);

    uint32_t const count = mReferencedTimezones.Count();
    if (count == 0) {
        *aCount = 0;
        *aTimezones = nullptr;
        return NS_OK;
    }

    calITimezone ** const timezones = static_cast<calITimezone **>(
        moz_xmalloc(sizeof(calITimezone *) * count));
    CAL_ENSURE_MEMORY(timezones);
    // tzptr will get used as an iterator by the enumerator function
    calITimezone ** tzptr = timezones;
    for (auto iter = mReferencedTimezones.ConstIter(); !iter.Done(); iter.Next() ) {
        NS_ADDREF(*tzptr = iter.Data());
        ++tzptr;
    }

    *aTimezones = timezones;
    *aCount = count;
    return NS_OK;
}
Пример #12
0
NS_IMETHODIMP
EventListenerService::GetEventTargetChainFor(nsIDOMEventTarget* aEventTarget,
                                             bool aComposed,
                                             uint32_t* aCount,
                                             nsIDOMEventTarget*** aOutArray)
{
  *aCount = 0;
  *aOutArray = nullptr;
  NS_ENSURE_ARG(aEventTarget);
  WidgetEvent event(true, eVoidEvent);
  event.SetComposed(aComposed);
  nsTArray<EventTarget*> targets;
  nsresult rv = EventDispatcher::Dispatch(aEventTarget, nullptr, &event,
                                          nullptr, nullptr, nullptr, &targets);
  NS_ENSURE_SUCCESS(rv, rv);
  int32_t count = targets.Length();
  if (count == 0) {
    return NS_OK;
  }

  *aOutArray =
    static_cast<nsIDOMEventTarget**>(
      moz_xmalloc(sizeof(nsIDOMEventTarget*) * count));
  NS_ENSURE_TRUE(*aOutArray, NS_ERROR_OUT_OF_MEMORY);

  for (int32_t i = 0; i < count; ++i) {
    NS_ADDREF((*aOutArray)[i] = targets[i]);
  }
  *aCount = count;

  return NS_OK;
}
Пример #13
0
char*
ToNewUTF8String(const nsAString& aSource, uint32_t* aUTF8Count)
{
  nsAString::const_iterator start, end;
  CalculateUTF8Size calculator;
  copy_string(aSource.BeginReading(start), aSource.EndReading(end),
              calculator);

  if (aUTF8Count) {
    *aUTF8Count = calculator.Size();
  }

  char* result = static_cast<char*>
                 (moz_xmalloc(calculator.Size() + 1));
  if (!result) {
    return nullptr;
  }

  ConvertUTF16toUTF8 converter(result);
  copy_string(aSource.BeginReading(start), aSource.EndReading(end),
              converter).write_terminator();
  NS_ASSERTION(calculator.Size() == converter.Size(), "length mismatch");

  return result;
}
Пример #14
0
inline
ToCharT*
AllocateStringCopy(const FromStringT& aSource, ToCharT*)
{
  return static_cast<ToCharT*>(moz_xmalloc(
    (aSource.Length() + 1) * sizeof(ToCharT)));
}
Пример #15
0
NS_IMETHODIMP
nsProperties::GetKeys(uint32_t* aCount, char*** aKeys)
{
  if (NS_WARN_IF(!aCount) || NS_WARN_IF(!aKeys)) {
    return NS_ERROR_INVALID_ARG;
  }

  uint32_t count = Count();
  char** keys = (char**)moz_xmalloc(count * sizeof(char*));
  uint32_t j = 0;

  for (auto iter = this->Iter(); !iter.Done(); iter.Next()) {
    const char* key = iter.Key();
    keys[j] = strdup(key);

    if (!keys[j]) {
      // Free 'em all
      for (uint32_t i = 0; i < j; i++) {
        free(keys[i]);
      }
      free(keys);
      return NS_ERROR_OUT_OF_MEMORY;
    }
    j++;
  }

  *aCount = count;
  *aKeys = keys;
  return NS_OK;
}
NS_IMETHODIMP
nsNSSCertificateFakeTransport::GetClassID(nsCID** aClassID)
{
  *aClassID = (nsCID*) moz_xmalloc(sizeof(nsCID));
  if (!*aClassID)
    return NS_ERROR_OUT_OF_MEMORY;
  return GetClassIDNoAlloc(*aClassID);
}
Пример #17
0
NS_IMETHODIMP
TransportSecurityInfo::GetClassID(nsCID * *aClassID)
{
    *aClassID = (nsCID*) moz_xmalloc(sizeof(nsCID));
    if (!*aClassID)
        return NS_ERROR_OUT_OF_MEMORY;
    return GetClassIDNoAlloc(*aClassID);
}
Пример #18
0
nsresult
CacheFileMetadata::WriteMetadata(uint32_t aOffset,
                                 CacheFileMetadataListener *aListener)
{
  LOG(("CacheFileMetadata::WriteMetadata() [this=%p, offset=%d, listener=%p]",
       this, aOffset, aListener));

  MOZ_ASSERT(!mListener);
  MOZ_ASSERT(!mWriteBuf);
  MOZ_ASSERT(!mKeyIsHash);

  nsresult rv;

  mIsDirty = false;

  mWriteBuf = static_cast<char *>(moz_xmalloc(sizeof(uint32_t) +
                mHashCount * sizeof(CacheHashUtils::Hash16_t) +
                sizeof(CacheFileMetadataHeader) + mKey.Length() + 1 +
                mElementsSize + sizeof(uint32_t)));

  char *p = mWriteBuf + sizeof(uint32_t);
  memcpy(p, mHashArray, mHashCount * sizeof(CacheHashUtils::Hash16_t));
  p += mHashCount * sizeof(CacheHashUtils::Hash16_t);
  memcpy(p, &mMetaHdr, sizeof(CacheFileMetadataHeader));
  p += sizeof(CacheFileMetadataHeader);
  memcpy(p, mKey.get(), mKey.Length());
  p += mKey.Length();
  *p = 0;
  p++;
  memcpy(p, mBuf, mElementsSize);
  p += mElementsSize;

  CacheHashUtils::Hash32_t hash;
  hash = CacheHashUtils::Hash(mWriteBuf + sizeof(uint32_t),
                              p - mWriteBuf - sizeof(uint32_t));
  *reinterpret_cast<uint32_t *>(mWriteBuf) = PR_htonl(hash);

  *reinterpret_cast<uint32_t *>(p) = PR_htonl(aOffset);
  p += sizeof(uint32_t);

  mListener = aListener;
  rv = CacheFileIOManager::Write(mHandle, aOffset, mWriteBuf, p - mWriteBuf,
                                 true, this);
  if (NS_FAILED(rv)) {
    LOG(("CacheFileMetadata::WriteMetadata() - CacheFileIOManager::Write() "
         "failed synchronously. [this=%p, rv=0x%08x]", this, rv));

    mListener = nullptr;
    free(mWriteBuf);
    mWriteBuf = nullptr;
    NS_ENSURE_SUCCESS(rv, rv);
  }

  DoMemoryReport(MemoryUsage());

  return NS_OK;
}
Пример #19
0
void*
nsMemory::Clone(const void* aPtr, size_t aSize)
{
  void* newPtr = moz_xmalloc(aSize);
  if (newPtr) {
    memcpy(newPtr, aPtr, aSize);
  }
  return newPtr;
}
Пример #20
0
void*
moz_xmalloc(size_t size)
{
    void* ptr = malloc(size);
    if (UNLIKELY(!ptr)) {
        mozalloc_handle_oom();
        return moz_xmalloc(size);
    }
    return ptr;
}
Пример #21
0
static char* p2cstrdup(StringPtr pstr)
{
  int len = pstr[0];
  char* cstr = static_cast<char*>(moz_xmalloc(len + 1));
  if (cstr) {
    memmove(cstr, pstr + 1, len);
    cstr[len] = '\0';
  }
  return cstr;
}
Пример #22
0
NS_IMETHODIMP
nsSupportsCharImpl::ToString(char** aResult)
{
  NS_ASSERTION(aResult, "Bad pointer");

  char* result = (char*)moz_xmalloc(2 * sizeof(char));
  if (result) {
    result[0] = mData;
    result[1] = '\0';
  }
  *aResult = result;
  return result ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
}
Пример #23
0
bool
CryptoBuffer::ToNewUnsignedBuffer(uint8_t** aBuf, uint32_t* aBufLen) const
{
  MOZ_ASSERT(aBuf);
  MOZ_ASSERT(aBufLen);

  uint32_t dataLen = Length();
  uint8_t* tmp = reinterpret_cast<uint8_t*>(moz_xmalloc(dataLen));

  memcpy(tmp, Elements(), dataLen);
  *aBuf = tmp;
  *aBufLen = dataLen;
  return true;
}
Пример #24
0
char*
nsSegmentedBuffer::AppendNewSegment()
{
  if (GetSize() >= mMaxSize) {
    return nullptr;
  }

  if (!mSegmentArray) {
    uint32_t bytes = mSegmentArrayCount * sizeof(char*);
    mSegmentArray = (char**)moz_xmalloc(bytes);
    if (!mSegmentArray) {
      return nullptr;
    }
    memset(mSegmentArray, 0, bytes);
  }

  if (IsFull()) {
    uint32_t newArraySize = mSegmentArrayCount * 2;
    uint32_t bytes = newArraySize * sizeof(char*);
    char** newSegArray = (char**)moz_xrealloc(mSegmentArray, bytes);
    if (!newSegArray) {
      return nullptr;
    }
    mSegmentArray = newSegArray;
    // copy wrapped content to new extension
    if (mFirstSegmentIndex > mLastSegmentIndex) {
      // deal with wrap around case
      memcpy(&mSegmentArray[mSegmentArrayCount],
             mSegmentArray,
             mLastSegmentIndex * sizeof(char*));
      memset(mSegmentArray, 0, mLastSegmentIndex * sizeof(char*));
      mLastSegmentIndex += mSegmentArrayCount;
      memset(&mSegmentArray[mLastSegmentIndex], 0,
             (newArraySize - mLastSegmentIndex) * sizeof(char*));
    } else {
      memset(&mSegmentArray[mLastSegmentIndex], 0,
             (newArraySize - mLastSegmentIndex) * sizeof(char*));
    }
    mSegmentArrayCount = newArraySize;
  }

  char* seg = (char*)malloc(mSegmentSize);
  if (!seg) {
    return nullptr;
  }
  mSegmentArray[mLastSegmentIndex] = seg;
  mLastSegmentIndex = ModSegArraySize(mLastSegmentIndex + 1);
  return seg;
}
Пример #25
0
 static already_AddRefed<AudioBlockBuffer> Create(uint32_t aChannelCount)
 {
   CheckedInt<size_t> size = WEBAUDIO_BLOCK_SIZE;
   size *= aChannelCount;
   size *= sizeof(float);
   size += sizeof(AudioBlockBuffer);
   if (!size.isValid()) {
     MOZ_CRASH();
   }
   void* m = moz_xmalloc(size.value());
   nsRefPtr<AudioBlockBuffer> p = new (m) AudioBlockBuffer();
   NS_ASSERTION((reinterpret_cast<char*>(p.get() + 1) - reinterpret_cast<char*>(p.get())) % 4 == 0,
                "AudioBlockBuffers should be at least 4-byte aligned");
   return p.forget();
 }
Пример #26
0
void
WebGLShader::ShaderSource(const nsAString& source)
{
    const char funcName[] = "shaderSource";
    nsString sourceWithoutComments;
    if (!TruncateComments(source, &sourceWithoutComments)) {
        mContext->ErrorOutOfMemory("%s: Failed to alloc for empting comment contents.",
                                   funcName);
        return;
    }

    if (!ValidateGLSLPreprocString(mContext, funcName, sourceWithoutComments))
        return;

    // We checked that the source stripped of comments is in the
    // 7-bit ASCII range, so we can skip the NS_IsAscii() check.
    const NS_LossyConvertUTF16toASCII cleanSource(sourceWithoutComments);

    if (PR_GetEnv("MOZ_WEBGL_DUMP_SHADERS")) {
        printf_stderr("////////////////////////////////////////\n");
        printf_stderr("// MOZ_WEBGL_DUMP_SHADERS:\n");

        // Wow - Roll Your Own Foreach-Lines because printf_stderr has a hard-coded
        // internal size, so long strings are truncated.

        const size_t maxChunkSize = 1024-1; // -1 for null-term.
        const UniqueBuffer buf(moz_xmalloc(maxChunkSize+1)); // +1 for null-term
        const auto bufBegin = (char*)buf.get();

        size_t chunkStart = 0;
        while (chunkStart != cleanSource.Length()) {
            const auto chunkEnd = std::min(chunkStart + maxChunkSize,
                                           size_t(cleanSource.Length()));
            const auto chunkSize = chunkEnd - chunkStart;

            memcpy(bufBegin, cleanSource.BeginReading() + chunkStart, chunkSize);
            bufBegin[chunkSize + 1] = '\0';

            printf_stderr("%s", bufBegin);
            chunkStart += chunkSize;
        }

        printf_stderr("////////////////////////////////////////\n");
    }

    mSource = source;
    mCleanSource = cleanSource;
}
Пример #27
0
AddrInfo::AddrInfo(const char *host, const PRAddrInfo *prAddrInfo,
                   bool disableIPv4)
{
  size_t hostlen = strlen(host);
  mHostName = static_cast<char*>(moz_xmalloc(hostlen + 1));
  memcpy(mHostName, host, hostlen + 1);

  PRNetAddr tmpAddr;
  void *iter = nullptr;
  do {
    iter = PR_EnumerateAddrInfo(iter, prAddrInfo, 0, &tmpAddr);
    if (iter && (!disableIPv4 || tmpAddr.raw.family != PR_AF_INET)) {
      NetAddrElement *addrElement = new NetAddrElement(&tmpAddr);
      mAddresses.insertBack(addrElement);
    }
  } while (iter);
}
NS_IMETHODIMP
nsThebesFontEnumerator::EnumerateFonts(const char *aLangGroup,
                                       const char *aGeneric,
                                       uint32_t *aCount,
                                       char16_t ***aResult)
{
    NS_ENSURE_ARG_POINTER(aCount);
    NS_ENSURE_ARG_POINTER(aResult);

    nsTArray<nsString> fontList;

    nsAutoCString generic;
    if (aGeneric)
        generic.Assign(aGeneric);
    else
        generic.SetIsVoid(true);

    nsCOMPtr<nsIAtom> langGroupAtom;
    if (aLangGroup) {
        nsAutoCString lowered;
        lowered.Assign(aLangGroup);
        ToLowerCase(lowered);
        langGroupAtom = NS_Atomize(lowered);
    }

    nsresult rv = gfxPlatform::GetPlatform()->GetFontList(langGroupAtom, generic, fontList);

    if (NS_FAILED(rv)) {
        *aCount = 0;
        *aResult = nullptr;
        /* XXX in this case, do we want to return the CSS generics? */
        return NS_OK;
    }

    char16_t **fs = static_cast<char16_t **>
                                (moz_xmalloc(fontList.Length() * sizeof(char16_t*)));
    for (uint32_t i = 0; i < fontList.Length(); i++) {
        fs[i] = ToNewUnicode(fontList[i]);
    }

    *aResult = fs;
    *aCount = fontList.Length();

    return NS_OK;
}
Пример #29
0
char16_t*
UTF8ToNewUnicode(const nsACString& aSource, uint32_t* aUTF16Count)
{
  const uint32_t length = CalcUTF8ToUnicodeLength(aSource);
  const size_t buffer_size = (length + 1) * sizeof(char16_t);
  char16_t* buffer = static_cast<char16_t*>(moz_xmalloc(buffer_size));
  if (!buffer) {
    return nullptr;
  }

  uint32_t copied;
  UTF8ToUnicodeBuffer(aSource, buffer, &copied);
  NS_ASSERTION(length == copied, "length mismatch");

  if (aUTF16Count) {
    *aUTF16Count = copied;
  }
  return buffer;
}
Пример #30
0
    // nsIStreamListener method
    NS_IMETHOD OnDataAvailable(nsIRequest* request, nsISupports *ctxt, nsIInputStream *inStr, 
                               uint64_t sourceOffset, uint32_t count) override
    {
        nsresult rv;
        uint32_t read;
        uint64_t len64;
        rv = inStr->Available(&len64);
        if (NS_FAILED(rv)) return rv;
        uint32_t len = (uint32_t)std::min(len64, (uint64_t)(UINT32_MAX - 1));

        char *buffer = (char*)moz_xmalloc(len + 1);
        if (!buffer) return NS_ERROR_OUT_OF_MEMORY;

        rv = inStr->Read(buffer, len, &read);
        buffer[len] = '\0';
        if (NS_SUCCEEDED(rv)) {
            printf("CONTEXT %p: Received %u bytes and the following data: \n %s\n\n",
                   static_cast<void*>(ctxt), read, buffer);
        }
        free(buffer);

        return NS_OK;
    }