chiark / gitweb /
d032421e713085e02b9313d57cf3707ba1e46d7b
[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.2  2008/02/14 00:57:58  james
14  * *** empty log message ***
15  *
16  * Revision 1.1  2008/02/13 16:57:29  james
17  * *** empty log message ***
18  *
19  * Revision 1.3  2008/02/13 09:12:21  james
20  * *** empty log message ***
21  *
22  * Revision 1.2  2008/02/12 22:36:46  james
23  * *** empty log message ***
24  *
25  * Revision 1.1  2008/02/08 15:06:42  james
26  * *** empty log message ***
27  *
28  */
29
30 #include "project.h"
31
32 void
33 slide_free (Slide * s)
34 {
35   free (s->slide);
36   free (s);
37 }
38
39 void
40 slide_consume (Slide * s, int n)
41 {
42   s->nbytes -= n;
43
44   if (s->nbytes<0) 
45         abort();
46
47   memmove (s->slide, s->slide + n, s->nbytes);
48
49   if ((s->size > s->target_size) && (s->nbytes <= s->target_size))
50     {
51       s->size = s->target_size;
52       s->slide = realloc (s->slide, s->size);
53     }
54
55 }
56
57 void
58 slide_added (Slide * s, int n)
59 {
60   s->nbytes += n;
61 }
62
63 Slide *
64 slide_new (int n)
65 {
66   Slide *ret = (Slide *) malloc (sizeof (Slide));
67
68   ret->slide = (uint8_t *) malloc (n);
69   ret->size = n;
70   ret->target_size = n;
71   ret->nbytes = 0;
72
73   return ret;
74 }
75
76
77 void
78 slide_expand (Slide * s, int n)
79 {
80   n += s->nbytes;
81
82   if (n <= s->size)
83     return;
84
85   while (n > s->size)
86     s->size <<= 1;
87
88 //FIXME -- might fail
89   s->slide = realloc (s->slide, s->size);
90
91 }