OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / library / container / packetbuf / packetbuf_getbuf.c
1 /** 
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  packetbuf.h
5  * @brief %jp{パケットデータ用バッファクラス}
6  *
7  * Copyright (C) 2002-2007 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #include "packetbuf_local.h"
13
14
15
16 /** 送信用バッファの取得(省コピー) */
17 unsigned int PacketBuf_GetBuf(C_PACKETBUF *self, void **ppBuf, unsigned int uiSize)
18 {
19         unsigned int uiAllocSize;
20         
21         /* 割り当てサイズ計算 */
22         uiAllocSize = PACKETBUF_DATASIZE(uiSize) + sizeof(unsigned int);
23         
24         /* 割り当て可能性チェック */
25         if ( self->uiTail >= self->uiHead )
26         {
27                 if ( self->uiTail > self->uiBufSize - uiAllocSize )
28                 {
29                         /* 折り返し可能かチェック */
30                         if ( self->uiHead <= uiAllocSize )
31                         {
32                                 return 0;       /* 割り当て不可 */
33                         }
34                         
35                         /* 折り返し */
36                         self->uiReturnPoint = self->uiTail;
37                         self->uiTail        = 0;
38                 }
39         }
40         else
41         {
42                 if ( self->uiHead - self->uiTail <= uiAllocSize )
43                 {
44                         return 0;       /* 割り当て不可 */
45                 }
46         }
47         
48         /* 割り当てたバッファを返す */
49         *ppBuf = (void *)(self->pubBuf + self->uiTail + sizeof(unsigned int));
50         
51         return uiSize;  /* 割り当てたサイズを返す */
52 }
53
54
55 /* end of file */