btrfs: [] on the end of a struct field is a variable length array.
[haiku.git] / src / add-ons / kernel / file_systems / nfs / XDROutPacket.c
blobe99c5038d4a28c44250cfae721324ecec70675a9
1 #include "XDROutPacket.h"
3 #include <malloc.h>
4 #include <string.h>
5 #include <ByteOrder.h>
7 extern const uint8 *
8 XDROutPacketBuffer(struct XDROutPacket *packet)
10 return packet->fBuffer;
13 extern size_t
14 XDROutPacketLength(struct XDROutPacket *packet)
16 return packet->fLength;
19 extern void
20 XDROutPacketInit(struct XDROutPacket *packet)
22 packet->fBuffer=NULL;
23 packet->fSize=packet->fLength=0;
26 extern void
27 XDROutPacketDestroy(struct XDROutPacket *packet)
29 free (packet->fBuffer);
32 extern void
33 XDROutPacketGrow(struct XDROutPacket *packet, size_t size)
35 if (packet->fLength+size>packet->fSize)
37 while (packet->fLength+size>packet->fSize)
38 packet->fSize+=XDROUTPACKET_BUFFER_INCREMENT;
40 packet->fBuffer=(uint8 *)realloc(packet->fBuffer,packet->fSize);
44 extern void
45 XDROutPacketAddInt32(struct XDROutPacket *packet, int32 val)
47 XDROutPacketGrow (packet,4);
48 *(int32 *)(&packet->fBuffer[packet->fLength])=B_HOST_TO_BENDIAN_INT32(val);
49 packet->fLength+=4;
52 extern void
53 XDROutPacketAddDynamic(struct XDROutPacket *packet, const void *data, size_t size)
55 XDROutPacketAddInt32 (packet,size);
56 XDROutPacketAddFixed (packet,data,size);
59 extern void
60 XDROutPacketAddFixed(struct XDROutPacket *packet, const void *data, size_t size)
62 size_t roundedSize=(size+3)&~3;
63 XDROutPacketGrow (packet,roundedSize);
64 memcpy (&packet->fBuffer[packet->fLength],data,size);
65 memset (&packet->fBuffer[packet->fLength+size],0,roundedSize-size);
66 packet->fLength+=roundedSize;
69 extern void
70 XDROutPacketAddString(struct XDROutPacket *packet, const char *string)
72 XDROutPacketAddDynamic(packet,string,strlen(string));
75 extern void
76 XDROutPacketAppend(struct XDROutPacket *me, const struct XDROutPacket *packet)
78 XDROutPacketGrow (me,packet->fLength);
79 memcpy (&me->fBuffer[me->fLength],packet->fBuffer,packet->fLength);
80 me->fLength+=packet->fLength;
83 extern void
84 XDROutPacketClear(struct XDROutPacket *packet)
86 packet->fLength=0;