/*
* Copyright (c) 2002-2005 Sendmail, Inc. and its suppliers.
* All rights reserved.
*
* By using this file, you agree to the terms and conditions set
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*/
#include "sm/generic.h"
SM_RCSID("@(#)$Id: rcbenew.c,v 1.14 2005/06/02 19:00:36 ca Exp $")
#include "sm/assert.h"
#include "sm/magic.h"
#include "sm/memops.h"
#include "sm/rpool.h"
#include "sm/rcb.h"
#include "sm/rcbl.h"
/*
** SM_RCBE_NEW -- Create a new RCB entry (list element).
**
** Parameters:
** rpool -- The rpool in which to allocate.
** fixme: Not used by any caller...
** len -- Best guess as to how long the buf will be.
** maxlen -- Maximum length of buf data, if 0 a system
** default will be used.
**
** Returns:
** New RCB entry.
** NULL on error (ENOMEM)
**
** Side Effects: none on error.
**
** Last code review:
** Last code change: 2005-03-22 17:34:45
*/
sm_rcbe_P
sm_rcbe_new(sm_rpool_P rpool, uint len, uint maxlen)
{
sm_rcbe_P rcbe;
SM_REQUIRE(maxlen == 0 || len <= maxlen);
if (len < SM_MIN_RCB_SIZE)
len = SM_MIN_RCB_SIZE;
if (maxlen == 0)
maxlen = SM_RCB_MAX_LEN;
if (maxlen < SM_MIN_RCB_SIZE)
maxlen = SM_MIN_RCB_SIZE;
SM_REQUIRE(len <= maxlen);
rcbe = sm_rpool_zalloc(rpool, sizeof(*rcbe));
if (rcbe == NULL)
return NULL;
rcbe->rcbe_rcb.sm_rcb_base = sm_rpool_malloc(rpool, len);
if (rcbe->rcbe_rcb.sm_rcb_base == NULL)
{
sm_rpool_free_size(rpool, rcbe, sizeof(*rcbe));
return NULL;
}
rcbe->rcbe_rcb.sm_rcb_rw = 0;
#if SM_RCB_CHECK
sm_memzero(rcbe->rcbe_rcb.sm_rcb_base, len);
rcbe->rcbe_rcb.sm_rcb_state = SM_RCB_NONE;
#endif
rcbe->rcbe_rcb.sm_rcb_max = maxlen;
rcbe->rcbe_rcb.sm_rcb_rpool = rpool;
rcbe->rcbe_rcb.sm_rcb_size = len;
rcbe->rcbe_rcb.sm_magic = SM_RCB_MAGIC;
return rcbe;
}
syntax highlighted by Code2HTML, v. 0.9.1