1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
/***************************************************************************
* *
* Squish Developers Kit Source, Version 2.00 *
* Copyright 1989-1994 by SCI Communications. All rights reserved. *
* *
* USE OF THIS FILE IS SUBJECT TO THE RESTRICTIONS CONTAINED IN THE *
* SQUISH DEVELOPERS KIT LICENSING AGREEMENT IN SQDEV.PRN. IF YOU DO NOT *
* FIND THE TEXT OF THIS AGREEMENT IN THE AFOREMENTIONED FILE, OR IF YOU *
* DO NOT HAVE THIS FILE, YOU SHOULD IMMEDIATELY CONTACT THE AUTHOR AT *
* ONE OF THE ADDRESSES LISTED BELOW. IN NO EVENT SHOULD YOU PROCEED TO *
* USE THIS FILE WITHOUT HAVING ACCEPTED THE TERMS OF THE SQUISH *
* DEVELOPERS KIT LICENSING AGREEMENT, OR SUCH OTHER AGREEMENT AS YOU ARE *
* ABLE TO REACH WITH THE AUTHOR. *
* *
* You can contact the author at one of the address listed below: *
* *
* Scott Dudley FidoNet 1:249/106 *
* 777 Downing St. Internet sjd@f106.n249.z1.fidonet.org *
* Kingston, Ont. CompuServe >INTERNET:sjd@f106.n249.z1.fidonet.org *
* Canada K7M 5N3 BBS 1-613-634-3058, V.32bis *
* *
***************************************************************************/
/*
#pragma off(unreferenced)
static char rcs_id[]="$Id: sq_kill.c,v 1.7 2003/01/15 05:40:38 stas_degteff Exp $";
#pragma on(unreferenced)
*/
#define MSGAPI_HANDLERS
#define MSGAPI_NO_OLD_TYPES
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <assert.h>
#include "compiler.h"
#ifdef HAS_IO_H
# include <io.h>
#endif
#ifdef HAS_SHARE_H
#include <share.h>
#endif
#ifdef HAS_MALLOC_H
#include <malloc.h>
#endif
#include "prog.h"
#include "old_msg.h"
#include "msgapi.h"
#include "api_sq.h"
#include "api_sqp.h"
#include "apidebug.h"
#include "unused.h"
/* Kill the specified message number. *
* *
* This function assumes that we have exclusive access to the Squish base. */
static sword _SquishKill(HAREA ha, dword dwMsg, SQHDR *psqh, FOFS fo)
{
assert(Sqd->fHaveExclusive);
/* Link the existing messages over this one */
if (psqh->prev_frame)
if (!_SquishSetFrameNext(ha, psqh->prev_frame, psqh->next_frame))
return FALSE;
if (psqh->next_frame)
if (!_SquishSetFramePrev(ha, psqh->next_frame, psqh->prev_frame))
return FALSE;
/* Delete this message from the index file */
if (!_SquishRemoveIndexEntry(Sqd->hix, dwMsg, NULL, psqh, TRUE))
return FALSE;
/* Finally, add the freed message to the free frame list */
return (sword)_SquishInsertFreeChain(ha, fo, psqh);
}
/* This function is used to delete a message from a Squish message base */
sword _XPENTRY apiSquishKillMsg(HAREA ha, dword dwMsg)
{
SQHDR sqh;
sword rc;
FOFS fo;
/* Validate parameters */
if (MsgInvalidHarea(ha))
return -1;
/* Make sure that the message actually exists */
if (dwMsg==0 || dwMsg > ha->num_msg)
{
msgapierr=MERR_NOENT;
return -1;
}
/* Get the offset of the frame to delete */
if ((fo=_SquishGetFrameOfs(ha, dwMsg))==NULL_FRAME)
{
return -1;
}
/* Read that into memory */
if (!_SquishReadHdr(ha, fo, &sqh))
{
return -1;
}
/* Now get exclusive access for the delete operation */
if (!_SquishExclusiveBegin(ha))
{
return FALSE;
}
/* Let _SquishKill to the dirty work */
rc=_SquishKill(ha, dwMsg, &sqh, fo);
/* Let go of the base */
if (!_SquishExclusiveEnd(ha))
rc=FALSE;
return rc ? 0 : -1;
}
|