|
|
1.1 root 1: /* m_remsg.c - realloc a msgs structure */
2:
3: #include "../h/mh.h"
4: #include <stdio.h>
5:
6:
7: struct msgs *m_remsg (mp, lo, hi)
8: register struct msgs *mp;
9: int lo,
10: hi;
11: {
12: int msgnum;
13: #ifdef MTR
14: register short *sp,
15: *pp;
16: #endif MTR
17:
18: if (lo == 0 && (lo = mp -> lowmsg) == 0)
19: lo = 1;
20: if (hi < mp -> hghmsg)
21: hi = mp -> hghmsg + (MAXFOLDER - mp -> nummsg);
22: if (hi <= mp -> hghmsg)
23: hi = mp -> hghmsg + MAXFOLDER;
24: if (lo == mp -> lowmsg && hi == mp -> hghmsg)
25: return mp;
26:
27: #ifndef MTR
28: mp = (struct msgs *) realloc ((char *) mp, MSIZE (mp, lo, hi));
29: if (mp == NULL)
30: adios (NULLCP, "unable to re-allocate folder storage");
31: #else MTR
32: if ((sp = (short *) calloc ((unsigned) 1, MSIZEX (mp, lo, hi))) == NULL)
33: adios (NULLCP, "unable to re-allocate messages storage");
34:
35: pp = sp - lo;
36: if (pp < 0)
37: adios (NULLCP, "m_remsg() botch -- you lose big[1]");
38: for (msgnum = mp -> lowmsg; msgnum <= mp -> hghmsg; msgnum++)
39: pp[msgnum] = mp -> msgstats[msgnum];
40: free ((char *) mp -> msgbase);
41: mp -> msgstats = sp;
42: #endif MTR
43: mp -> lowoff = lo;
44: mp -> hghoff = hi;
45: #ifdef MTR
46: mp -> msgstats = (mp -> msgbase = mp -> msgstats) - mp -> lowoff;
47: if (mp -> msgstats < 0)
48: adios (NULLCP, "m_remsg() botch -- you lose big[2]");
49: #endif MTR
50: for (msgnum = mp -> lowmsg - 1; msgnum >= lo; msgnum--)
51: mp -> msgstats[msgnum] = NULL;
52: for (msgnum = mp -> hghmsg + 1; msgnum <= hi; msgnum++)
53: mp -> msgstats[msgnum] = NULL;
54:
55: return mp;
56: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.