static char rcsid[] = "@(#)$Id: sb_mem.c,v 1.6 2006/04/09 07:37:07 hurtta Exp $";
/******************************************************************************
* The Elm (ME+) Mail System - $Revision: 1.6 $ $State: Exp $
*
* Author: Kari Hurtta <hurtta+elm@posti.FMI.FI> (was hurtta+elm@ozone.FMI.FI)
*****************************************************************************/
#include "headers.h"
#include "s_me.h"
#include "sb_imp.h"
static int sb_init_mem P_((struct stringbuffer *buffer));
static int sb_init_mem(buffer)
struct stringbuffer *buffer;
{
buffer->p->a.mem.string_count = 0;
buffer->p->a.mem.strings = NULL;
return 1;
}
static void sb_free_mem P_((struct stringbuffer *buffer));
static void sb_free_mem(buffer)
struct stringbuffer *buffer;
{
int i;
for (i = 0; i < buffer->p->a.mem.string_count; i++)
if (buffer->p->a.mem.strings[i])
free_string(&(buffer->p->a.mem.strings[i]));
if (buffer->p->a.mem.strings)
free(buffer->p->a.mem.strings);
buffer->p->a.mem.strings = NULL;
buffer->p->a.mem.string_count = 0;
}
static void sb_add_line_to_mem P_((struct stringbuffer *buffer,
const struct string *string));
static void sb_add_line_to_mem(buffer,string)
struct stringbuffer *buffer;
CONST struct string *string;
{
int ptr = buffer->p->a.mem.string_count;
buffer->p->a.mem.strings = safe_realloc(buffer->p->a.mem.strings,
(buffer->p->a.mem.string_count+1) *
sizeof (struct string *));
buffer->p->a.mem.strings[ptr] = dup_string(string);
buffer->p->a.mem.string_count++;
}
static int sb_linecount_mem P_((const struct stringbuffer *ptr));
static int sb_linecount_mem(ptr)
CONST struct stringbuffer *ptr;
{
return ptr->p->a.mem.string_count;
}
static struct string *sb_get_line_from_mem P_((const struct
stringbuffer *buffer,
int ptr));
static struct string *sb_get_line_from_mem(buffer,ptr)
CONST struct stringbuffer *buffer;
int ptr;
{
if (ptr < 0 || ptr >= buffer->p->a.mem.string_count)
panic("STRINGBUFFER PANIC",__FILE__,__LINE__,"sb_get_line_from_mem",
"Bad index",0);
return dup_string(buffer->p->a.mem.strings[ptr]);
}
struct sb_type sb_in_mem = {
sb_init_mem,
sb_free_mem,
sb_add_line_to_mem,
sb_linecount_mem,
sb_get_line_from_mem
};
/*
* Local Variables:
* mode:c
* c-basic-offset:4
* buffer-file-coding-system: iso-8859-1
* End:
*/
syntax highlighted by Code2HTML, v. 0.9.1