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