FAT - Removed unneeded malloc() calls
[tpg/acess2.git] / Kernel / adt.c
1 /*
2  */
3 #include <acess.h>
4 #include <adt.h>
5
6 // === CODE ===
7 // --- Ring Buffers ---
8 tRingBuffer *RingBuffer_Create(size_t Space)
9 {
10         tRingBuffer     *ret = malloc(sizeof(tRingBuffer)+Space);
11         ret->Start = 0;
12         ret->Length = 0;
13         ret->Space = Space;
14         return ret;
15 }
16
17 size_t RingBuffer_Read(void *Dest, tRingBuffer *Buffer, size_t Length)
18 {
19         if(Length > Buffer->Length)     Length = Buffer->Length;
20         
21         if( Buffer->Start + Length > Buffer->Space )
22         {
23                  int    endData = Buffer->Space - Buffer->Start;
24                 memcpy(Dest, &Buffer->Data[Buffer->Start], endData);
25                 memcpy((Uint8*)Dest + endData, &Buffer->Data, Length - endData);
26         }
27         else
28         {
29                 memcpy(Dest, &Buffer->Data[Buffer->Start], Length);
30         }
31         Buffer->Start += Length;
32         Buffer->Length -= Length;
33         return Length;
34 }
35
36 size_t RingBuffer_Write(tRingBuffer *Buffer, void *Source, size_t Length)
37 {
38         size_t  bufEnd = Buffer->Start + Buffer->Length;
39         size_t  endSpace = Buffer->Space - bufEnd;
40         
41         // Force to bounds
42         if(Length > Buffer->Space - Buffer->Length)
43                 Length = Buffer->Space - Buffer->Length;
44         
45         if(endSpace < Length)
46         {
47                 memcpy( &Buffer->Data[bufEnd], Source, endSpace );
48                 memcpy( Buffer->Data, (Uint8*)Source + endSpace, Length - endSpace );
49                 Buffer->Length = Length - endSpace;
50         }
51         else
52         {
53                 memcpy( &Buffer->Data[bufEnd], Source, Length );
54                 Buffer->Length += Length;
55         }
56         
57         return Length;
58 }

UCC git Repository :: git.ucc.asn.au