ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/salloc.C
(Generate patch)

Comparing rxvt-unicode/src/salloc.C (file contents):
Revision 1.1 by pcg, Wed Dec 17 09:00:35 2003 UTC vs.
Revision 1.10 by root, Mon Feb 20 22:42:01 2006 UTC

1/*----------------------------------------------------------------------*
2 * File: salloc.C
3 *----------------------------------------------------------------------*
4 *
5 * All portions of code are copyright by their respective author/s.
6 * Copyright (c) 2003-2006 Marc Lehmann <pcg@goof.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 *----------------------------------------------------------------------*/
22
1#include "salloc.h" 23#include "salloc.h"
2 24
3#define SALLOC_BLOCK 65536 // size of basic block to allocate 25#define SALLOC_BLOCK 65536 // size of basic block to allocate
4 26
5rxvt_salloc::rxvt_salloc (int size) 27rxvt_salloc::rxvt_salloc (unsigned int size)
6{ 28{
7 this->size = size < sizeof (chain) ? sizeof (chain) : size; 29 this->size = size < sizeof (chain) ? sizeof (chain) : size;
8 firstline = 0; 30 firstline = 0;
9 firstblock = 0; 31 firstblock = 0;
10 firstfree = SALLOC_BLOCK; 32 firstfree = SALLOC_BLOCK;
38 next->next = firstblock; 60 next->next = firstblock;
39 firstblock = next; 61 firstblock = next;
40 firstfree = sizeof (chain); 62 firstfree = sizeof (chain);
41 } 63 }
42 64
43 r = (void *)((char *)firstblock + firstfree); 65 r = (void *) ((char *)firstblock + firstfree);
44 66
45 firstfree += size; 67 firstfree += size;
46 } 68 }
47 69
48 return r; 70 return r;
49} 71}
50 72
73void *
74rxvt_salloc::alloc (void *data, unsigned int datalen)
75{
76 void *s = alloc ();
77
78 if (datalen < size)
79 {
80 memcpy (s, data, datalen);
81 memset ((unsigned char *)s + datalen, 0, size - datalen); // not strictly required for screen.C
82 }
83 else
84 memcpy (s, data, size);
85
86 return s;
87}
88
51void 89void
52rxvt_salloc::free (void *data) 90rxvt_salloc::free (void *data)
53{ 91{
92 if (!data)
93 return;
94
54 chain *line = (chain *)data; 95 chain *line = (chain *)data;
55 line->next = firstline; 96 line->next = firstline;
56 firstline = line; 97 firstline = line;
57} 98}
58 99

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines