tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

prerror.c (2104B)


      1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 #include "primpl.h"
      7 
      8 #include <string.h>
      9 #include <stdlib.h>
     10 
     11 PR_IMPLEMENT(PRErrorCode) PR_GetError(void) {
     12  PRThread* thread = PR_GetCurrentThread();
     13  return thread->errorCode;
     14 }
     15 
     16 PR_IMPLEMENT(PRInt32) PR_GetOSError(void) {
     17  PRThread* thread = PR_GetCurrentThread();
     18  return thread->osErrorCode;
     19 }
     20 
     21 PR_IMPLEMENT(void) PR_SetError(PRErrorCode code, PRInt32 osErr) {
     22  PRThread* thread = PR_GetCurrentThread();
     23  thread->errorCode = code;
     24  thread->osErrorCode = osErr;
     25  thread->errorStringLength = 0;
     26 }
     27 
     28 PR_IMPLEMENT(void) PR_SetErrorText(PRIntn textLength, const char* text) {
     29  PRThread* thread = PR_GetCurrentThread();
     30 
     31  if (0 == textLength) {
     32    if (NULL != thread->errorString) {
     33      PR_DELETE(thread->errorString);
     34    }
     35    thread->errorStringSize = 0;
     36  } else {
     37    PRIntn size =
     38        textLength + 31; /* actual length to allocate. Plus a little extra */
     39    if (thread->errorStringSize < textLength + 1) /* do we have room? */
     40    {
     41      if (NULL != thread->errorString) {
     42        PR_DELETE(thread->errorString);
     43      }
     44      thread->errorString = (char*)PR_MALLOC(size);
     45      if (NULL == thread->errorString) {
     46        thread->errorStringSize = 0;
     47        thread->errorStringLength = 0;
     48        return;
     49      }
     50      thread->errorStringSize = size;
     51    }
     52    memcpy(thread->errorString, text, textLength + 1);
     53  }
     54  thread->errorStringLength = textLength;
     55 }
     56 
     57 PR_IMPLEMENT(PRInt32) PR_GetErrorTextLength(void) {
     58  PRThread* thread = PR_GetCurrentThread();
     59  return thread->errorStringLength;
     60 } /* PR_GetErrorTextLength */
     61 
     62 PR_IMPLEMENT(PRInt32) PR_GetErrorText(char* text) {
     63  PRThread* thread = PR_GetCurrentThread();
     64  if (0 != thread->errorStringLength) {
     65    memcpy(text, thread->errorString, thread->errorStringLength + 1);
     66  }
     67  return thread->errorStringLength;
     68 } /* PR_GetErrorText */