#define STR_NOTERM LIBNDR_FLAG_STR_NOTERM
#define STR_NULLTERM LIBNDR_FLAG_STR_NULLTERM
#define STR_BYTESIZE LIBNDR_FLAG_STR_BYTESIZE
+#define STR_FIXLEN32 LIBNDR_FLAG_STR_FIXLEN32
/*
a UCS2 string prefixed with [size] [offset] [length], all 32 bits
*/
#define nstring [flag(STR_NULLTERM)] string
+/*
+ fixed length 32 character UCS-2 string
+*/
+#define string32 [flag(STR_FIXLEN32)] string
+
/*
an ascii string prefixed with [size] [offset] [length], all 32 bits
null terminated
#define LIBNDR_FLAG_STR_NULLTERM (1<<6)
#define LIBNDR_FLAG_STR_SIZE2 (1<<7)
#define LIBNDR_FLAG_STR_BYTESIZE (1<<8)
-#define LIBNDR_STRING_FLAGS (0x1FC)
+#define LIBNDR_FLAG_STR_FIXLEN32 (1<<9)
+#define LIBNDR_STRING_FLAGS (0x3FC)
#define LIBNDR_FLAG_REF_ALLOC (1<<10)
#define LIBNDR_FLAG_REMAINING (1<<11)
*s = as;
break;
+ case LIBNDR_FLAG_STR_FIXLEN32:
+ len1 = 32;
+ NDR_PULL_NEED_BYTES(ndr, len1*byte_mul);
+ ret = convert_string_talloc(ndr, chset, CH_UNIX,
+ ndr->data+ndr->offset,
+ len1*byte_mul,
+ (void **)&as);
+ if (ret == -1) {
+ return ndr_pull_error(ndr, NDR_ERR_CHARCNV,
+ "Bad character conversion");
+ }
+ NDR_CHECK(ndr_pull_advance(ndr, len1*byte_mul));
+ *s = as;
+ break;
+
+
default:
return ndr_pull_error(ndr, NDR_ERR_STRING, "Bad string flags 0x%x\n",
ndr->flags & LIBNDR_STRING_FLAGS);
ndr->offset += c_len*byte_mul;
break;
+ case LIBNDR_FLAG_STR_FIXLEN32:
+ NDR_PUSH_NEED_BYTES(ndr, byte_mul*32);
+ ret = convert_string(CH_UNIX, chset,
+ s, s_len + 1,
+ ndr->data+ndr->offset, byte_mul*32);
+ if (ret == -1) {
+ return ndr_push_error(ndr, NDR_ERR_CHARCNV,
+ "Bad character conversion");
+ }
+ ndr->offset += byte_mul*32;
+ break;
+
default:
return ndr_push_error(ndr, NDR_ERR_STRING, "Bad string flags 0x%x\n",
ndr->flags & LIBNDR_STRING_FLAGS);