Back to index

lightning-sunbird  0.9+nobinonly
Functions
item.c File Reference
#include "base.h"

Go to the source code of this file.

Functions

NSS_IMPLEMENT NSSItem * nssItem_Create (NSSArena *arenaOpt, NSSItem *rvOpt, PRUint32 length, const void *data)
NSS_IMPLEMENT void nssItem_Destroy (NSSItem *item)
NSS_IMPLEMENT NSSItem * nssItem_Duplicate (NSSItem *obj, NSSArena *arenaOpt, NSSItem *rvOpt)
NSS_IMPLEMENT PRBool nssItem_Equal (const NSSItem *one, const NSSItem *two, PRStatus *statusOpt)

Function Documentation

NSS_IMPLEMENT NSSItem* nssItem_Create ( NSSArena *  arenaOpt,
NSSItem *  rvOpt,
PRUint32  length,
const void data 
)

Definition at line 69 of file item.c.

{
  NSSItem *rv = (NSSItem *)NULL;

#ifdef DEBUG
  if( (NSSArena *)NULL != arenaOpt ) {
    if( PR_SUCCESS != nssArena_verifyPointer(arenaOpt) ) {
      return (NSSItem *)NULL;
    }
  }

  if( (const void *)NULL == data ) {
    if( length > 0 ) {
      nss_SetError(NSS_ERROR_INVALID_POINTER);
      return (NSSItem *)NULL;
    }
  }
#endif /* DEBUG */

  if( (NSSItem *)NULL == rvOpt ) {
    rv = (NSSItem *)nss_ZNEW(arenaOpt, NSSItem);
    if( (NSSItem *)NULL == rv ) {
      goto loser;
    }
  } else {
    rv = rvOpt;
  }

  rv->size = length;
  rv->data = nss_ZAlloc(arenaOpt, length);
  if( (void *)NULL == rv->data ) {
    goto loser;
  }

  if( length > 0 ) {
    (void)nsslibc_memcpy(rv->data, data, length);
  }

  return rv;

 loser:
  if( rv != rvOpt ) {
    nss_ZFreeIf(rv);
  }

  return (NSSItem *)NULL;
}
NSS_IMPLEMENT void nssItem_Destroy ( NSSItem *  item)

Definition at line 124 of file item.c.

{
  nss_ClearErrorStack();

  nss_ZFreeIf(item->data);
  nss_ZFreeIf(item);

}
NSS_IMPLEMENT NSSItem* nssItem_Duplicate ( NSSItem *  obj,
NSSArena *  arenaOpt,
NSSItem *  rvOpt 
)

Definition at line 153 of file item.c.

{
#ifdef DEBUG
  if( (NSSArena *)NULL != arenaOpt ) {
    if( PR_SUCCESS != nssArena_verifyPointer(arenaOpt) ) {
      return (NSSItem *)NULL;
    }
  }

  if( (NSSItem *)NULL == obj ) {
    nss_SetError(NSS_ERROR_INVALID_ITEM);
    return (NSSItem *)NULL;
  }
#endif /* DEBUG */

  return nssItem_Create(arenaOpt, rvOpt, obj->size, obj->data);
}
NSS_IMPLEMENT PRBool nssItem_Equal ( const NSSItem *  one,
const NSSItem *  two,
PRStatus statusOpt 
)

Definition at line 221 of file item.c.

{
  if( (PRStatus *)NULL != statusOpt ) {
    *statusOpt = PR_SUCCESS;
  }

  if( ((const NSSItem *)NULL == one) && ((const NSSItem *)NULL == two) ) {
    return PR_TRUE;
  }

  if( ((const NSSItem *)NULL == one) || ((const NSSItem *)NULL == two) ) {
    return PR_FALSE;
  }

  if( one->size != two->size ) {
    return PR_FALSE;
  }

  return nsslibc_memequal(one->data, two->data, one->size, statusOpt);
}