Extension to Samba IDL.
Luke Kenneth Casson Leighton
lkcl at samba.org
Mon Jun 19 23:16:36 GMT 2000
> c) Simply
> prs_uint_bitfield("flags", &bitfield, ps, 14, ...);
io_struct
{
char *data_p;
int data_size;
int data_offset;
int bit_offset;
};
prs_uint32_bitfield(char *desc, io_struct *ps, uint32 *il, int bit_size,
int flags)
{
uint32 mask = (1 << bit_size)-1;
char *data = io_mem_get_bits(ps, bitsize);
if (UNMARSHALLING(ps))
{
uint64 v = I64VAL(data, 0);
*il = (v >> ps->bit_offset) & mask;
}
else
{
uint64 v = I64VAL(data, 0);
v &= (~mask) >> ps->bit_offset;
v |= ((*il) & mask) >> ps->bit_offset);
}
ps->bit_offset += bit_size;
while (ps->bit_offset > 8)
{
ps->bit_offset -= 8;
ps->byte_offset++;
}
}
hack-hack.
More information about the samba-technical
mailing list