mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
r3395: added support for "string32" type, to fix the fixed width string
problem that tim found.
This commit is contained in:
parent
d967569c56
commit
2cf35cb4d2
@ -5,6 +5,7 @@
|
||||
#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
|
||||
@ -27,6 +28,11 @@
|
||||
*/
|
||||
#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
|
||||
|
@ -55,7 +55,7 @@
|
||||
} spoolss_PrinterInfo0;
|
||||
|
||||
typedef struct {
|
||||
uint16 devicename[32];
|
||||
string32 devicename;
|
||||
uint16 specversion;
|
||||
uint16 driverversion;
|
||||
uint16 size;
|
||||
@ -74,7 +74,7 @@
|
||||
uint16 yresolution;
|
||||
uint16 ttoption;
|
||||
uint16 collate;
|
||||
uint16 formname[32];
|
||||
string32 formname;
|
||||
uint16 logpixels;
|
||||
uint32 bitsperpel;
|
||||
uint32 pelswidth;
|
||||
|
@ -96,7 +96,8 @@ struct ndr_print {
|
||||
#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)
|
||||
|
@ -673,6 +673,22 @@ NTSTATUS ndr_pull_string(struct ndr_pull *ndr, int ndr_flags, const char **s)
|
||||
*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);
|
||||
@ -807,6 +823,18 @@ NTSTATUS ndr_push_string(struct ndr_push *ndr, int ndr_flags, const char *s)
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user