static char rcsid[] = "@(#)$Id: wrapper.c,v 1.3 2006/05/30 16:33:21 hurtta Exp $";


/******************************************************************************
 *  The Elm (ME+) Mail System  -  $Revision: 1.3 $   $State: Exp $
 *
 *  Author: Kari Hurtta <hurtta+elm@posti.FMI.FI>
 *      or  Kari Hurtta <elm@elmme-mailer.org>
 *****************************************************************************/

#include "def_readmsg.h"

struct folder_handler * malloc_folder_handler(routines)
     struct folder_routines *routines;
{
    struct folder_handler * ret = safe_malloc(sizeof (*ret));

    /* bzero is defined hdrs/defs.h */
    bzero((void *)ret,sizeof (*ret));

    if (FOLDER_ROUTINES_magic != routines->magic)
	panic("READMSG PANIC",__FILE__,__LINE__,"malloc_folder_handler",
              "Bad magic number (routines)",0);

    ret->handler       = routines;
    ret->magic         = FOLDER_HANDLER_magic;
    ret->num_messages  = 0;
    
    ret->d.dummy  = NULL;
    ret->handler->init_it(ret);

    return ret;
}

void free_folder_handler(ptr)
     struct folder_handler **ptr;
{
    if (FOLDER_HANDLER_magic != (*ptr)->magic)
	panic("READMSG PANIC",__FILE__,__LINE__,"free_folder_handler",
              "Bad magic number (folder)",0);
    
    if (FOLDER_ROUTINES_magic != (*ptr)->handler->magic)
	panic("READMSG PANIC",__FILE__,__LINE__,"free_folder_handler",
              "Bad magic number (routines)",0);

    (*ptr)->handler->free_it(*ptr);
    (*ptr)->magic = 0;   /* Invalidate */

    free(*ptr);
    *ptr = NULL;
}


FILE * give_message_from_folder(folder,idx, content_length, err, 
				print_separator,
				env_buffer,entryret)
     struct folder_handler *folder;
     int idx;
     long *content_length;
     enum message_error *err;
     int print_separator;
     char **env_buffer;
     struct header_rec **entryret;
{
    if (FOLDER_HANDLER_magic != folder->magic)
	panic("READMSG PANIC",__FILE__,__LINE__,"give_message_from_folder",
              "Bad magic number (folder)",0);
	
    *content_length = 0;

    if (FOLDER_ROUTINES_magic != folder->handler->magic)
	panic("READMSG PANIC",__FILE__,__LINE__,"give_message_from_folder",
              "Bad magic number (routines)",0);


    if (entryret)
	*entryret = NULL;
    if (env_buffer)
	*env_buffer = NULL;
    if (err)
	*err = error_none;

    return folder->handler->give_message_from_it(folder,idx,content_length,
						 err,print_separator, 
						 env_buffer, entryret);
}

int parse_folder(folder) 
     struct folder_handler *folder;
{
    if (FOLDER_HANDLER_magic != folder->magic)
	panic("READMSG PANIC",__FILE__,__LINE__,"parse_folder",
              "Bad magic number (folder)",0);

    if (FOLDER_ROUTINES_magic != folder->handler->magic)
	panic("READMSG PANIC",__FILE__,__LINE__,"parse_folder",
              "Bad magic number (routines)",0);

    return folder->handler->parse_it(folder);
}


/*
 * Local Variables:
 *  mode:c
 *  c-basic-offset:4
 *  buffer-file-coding-system: iso-8859-1
 * End:
 */


syntax highlighted by Code2HTML, v. 0.9.1