chiark / gitweb /
*** empty log message ***
[sympathy.git] / src / slide.c
1 /*
2  * slide.c:
3  *
4  * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
5  * All rights reserved.
6  *
7  */
8
9 static char rcsid[] = "$Id$";
10
11 /*
12  * $Log$
13  * Revision 1.1  2008/02/13 16:57:29  james
14  * *** empty log message ***
15  *
16  * Revision 1.3  2008/02/13 09:12:21  james
17  * *** empty log message ***
18  *
19  * Revision 1.2  2008/02/12 22:36:46  james
20  * *** empty log message ***
21  *
22  * Revision 1.1  2008/02/08 15:06:42  james
23  * *** empty log message ***
24  *
25  */
26
27 #include "project.h"
28
29 void
30 slide_free (Slide * s)
31 {
32   free (s->slide);
33   free (s);
34 }
35
36 void
37 slide_consume (Slide * s, int n)
38 {
39   s->nbytes -= n;
40   memmove (s->slide, s->slide + n, s->nbytes);
41
42   if ((s->size > s->target_size) && (s->nbytes <= s->size))
43     {
44       s->size = s->target_size;
45       s->slide = realloc (s->slide, s->size);
46     }
47
48 }
49
50 void
51 slide_added (Slide * s, int n)
52 {
53   s->nbytes += n;
54 }
55
56 Slide *
57 slide_new (int n)
58 {
59   Slide *ret = (Slide *) malloc (sizeof (Slide));
60
61   ret->slide = (uint8_t *) malloc (n);
62   ret->size = n;
63   ret->target_size = n;
64   ret->nbytes = 0;
65
66   return ret;
67 }
68
69
70 void
71 slide_expand (Slide * s, int n)
72 {
73   n += s->nbytes;
74
75   if (n <= s->size)
76     return;
77
78   while (n > s->size)
79     s->size <<= 1;
80
81 //FIXME -- might fail
82   s->slide = realloc (s->slide, s->size);
83
84 }