1
0
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:
Andrew Tridgell 2004-10-30 23:19:09 +00:00 committed by Gerald (Jerry) Carter
parent d967569c56
commit 2cf35cb4d2
4 changed files with 38 additions and 3 deletions

View File

@ -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

View File

@ -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;

View File

@ -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)

View File

@ -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);