chiark / gitweb /
*** empty log message ***
[sympathy.git] / src / ring.c
1 /*
2  * ring.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.4  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 int
30 ring_read (Ring * r, void *b, int n)
31 {
32   int red = 0;
33
34   while (n--)
35     {
36
37       if (!ring_read_one (r, b))
38         break;
39
40       b++;
41       red++;
42     }
43
44   return red;
45 }
46
47 int
48 ring_write (Ring * r, void *b, int n)
49 {
50   int writ = 0;
51
52   while (n--)
53     {
54
55       if (!ring_write_one (r, b))
56         break;
57
58       b++;
59       writ++;
60     }
61
62   return writ;
63 }
64
65 int
66 ring_space (Ring * r)
67 {
68   int i;
69
70   i = r->size - RING_NEXT_W (r) + r->rptr;
71   i %= r->size;
72   return i;
73 }
74
75 int
76 ring_bytes (Ring * r)
77 {
78   int i;
79
80   i = r->size + r->wptr - r->rptr;
81   i %= r->size;
82   return i;
83 }
84
85
86
87
88 Ring *
89 ring_new (int n)
90 {
91   Ring *ret = (Ring *) malloc (sizeof (Ring));
92   ret->ring = (uint8_t *) malloc (n);
93   ret->size = n;
94   ret->wptr = ret->rptr = 0;
95
96   return ret;
97 }