1 #include <linux/slab.h>
2 #include <linux/vmalloc.h>
4 #include "parser_defs.h"
6 int init_mb(struct msg_buf *mb, size_t size)
9 mb->begin = vmalloc(size);
10 if (mb->begin == NULL) {
11 printk("Cannot alloc memory!\n");
16 mb->end = mb->begin + size;
18 mb->begin = mb->end = mb->ptr = NULL;
23 void uninit_mb(struct msg_buf *mb)
28 int cmp_mb(struct msg_buf *mb, size_t size)
35 else if (mb->end < tmp)
41 size_t remained_mb(struct msg_buf *mb)
43 return mb->end - mb->ptr;
46 int is_end_mb(struct msg_buf *mb)
48 return mb->ptr == mb->end;
51 int get_u32(struct msg_buf *mb, u32 *val)
53 if (cmp_mb(mb, sizeof(*val)) < 0)
56 *val = *((u32 *)mb->ptr);
57 mb->ptr += sizeof(*val);
59 print_parse_debug("u32->%d;%08X\n", *val, *val);
64 int get_u64(struct msg_buf *mb, u64 *val)
66 if (cmp_mb(mb, sizeof(*val)) < 0)
69 *val = *((u64 *)mb->ptr);
70 mb->ptr += sizeof(*val);
71 print_parse_debug("u64->%d; 0x%016lX\n", *val, *val);
76 int get_string(struct msg_buf *mb, char **str)
80 len_max = mb->end - mb->ptr - 1;
84 len = strlen(mb->ptr) + 1;
86 *str = kmalloc(len, GFP_KERNEL);
90 memcpy(*str, mb->ptr, len);
93 print_parse_debug("str->'%s'\n", *str);
97 void put_string(char *str)