[string] attribute. Pidl itself would support a couple of extra
attributes for it's own use while being compatible with other IDL
compilers.
- Proposed extensions for pidl:
+ Proposed extensions for pidl (to arrays):
[convert(t)] attribute for forcing conversions from CH_UCS2, etc to UTF8
- [noterm] attribute
- [nullterm] attribute
+ [noterm] attribute -> Indicating there is no terminating character
+ [nullterm] attribute -> Indicating the string is null terminated
The various flags for strings would change as follows:
LIBNDR_FLAG_STR_NOTERM -> [noterm]
LIBNDR_FLAG_STR_NULLTERM -> [nullterm]
LIBNDR_FLAG_STR_SIZE2 -> uint16 length; [string] char data[length]
-LIBNDR_FLAG_STR_BYTESIZE -> ???
+LIBNDR_FLAG_STR_BYTESIZE -> uint16 length; [string] char data[length]
LIBNDR_FLAG_STR_FIXLEN32 -> [32]
LIBNDR_FLAG_STR_CONFORMANT -> no longer needed
LIBNDR_FLAG_STR_CHARLEN -> ???
start_flags($e);
if (my $value = util::has_property($e, "value")) {
- pidl "$var_name = $value;";
+ pidl "$var_name = " . ParseExpr($value, $env) . ";";
}
ParseElementPushLevel($e, $e->{LEVELS}[0], $ndr, $var_name, $env, $primitives, $deferred);
if (my $value = util::has_property($e, "value")) {
pidl "if (ndr->flags & LIBNDR_PRINT_SET_VALUES) {";
- pidl "\t$var_name = $value;";
+ pidl "\t$var_name = " . ParseExpr($value,$env) . ";";
pidl "}";
}
# array
"range" => ["ELEMENT"],
"size_is" => ["ELEMENT"],
+ "string" => ["ELEMENT"],
"length_is" => ["ELEMENT"],
);
NTTIME_1sec last_attempt;
WERROR result_last_attempt;
[relative] repsFromTo1OtherInfo *other_info;
- [value(ndr_size_repsFromTo1OtherInfo(r->other_info, ndr->flags))] uint32 other_info_length;
+ [value(ndr_size_repsFromTo1OtherInfo(other_info, ndr->flags))] uint32 other_info_length;
drsuapi_DsReplicaNeighbourFlags replica_flags;
uint8 schedule[84];
uint32 reserved;
} epm_tower;
typedef struct {
- [value(ndr_size_epm_tower(&r->tower, ndr->flags))] uint32 tower_length;
+ [value(ndr_size_epm_tower(&tower, ndr->flags))] uint32 tower_length;
[subcontext(4)] epm_tower tower;
} epm_twr_t;
} eventlog_OpenUnknown0;
typedef struct {
- [value(2*strlen_m(r->name))] uint16 name_len;
- [value(r->name_len)] uint16 name_size;
+ [value(2*strlen_m(name))] uint16 name_len;
+ [value(name_len)] uint16 name_size;
unistr_noterm *name;
} eventlog_String;
] interface initshutdown
{
typedef struct {
- [value(strlen_m_term(r->name))] uint32 name_size;
+ [value(strlen_m_term(name))] uint32 name_size;
[flag(STR_LEN4|STR_NOTERM)] string name;
} initshutdown_String_sub;
/* Function: 0x02 */
typedef struct {
- [value(2*strlen_m(r->string))] uint16 length;
- [value(r->length)] uint16 size;
+ [value(2*strlen_m(string))] uint16 length;
+ [value(length)] uint16 size;
unistr_noterm *string;
} lsa_String;
} nbt_status_name;
typedef struct {
- [value(r->num_names * 18 + 47)] uint16 length;
+ [value(num_names * 18 + 47)] uint16 length;
uint8 num_names;
nbt_status_name names[num_names];
nbt_statistics statistics;
uint16 opcode;
uint16 priority;
uint16 class;
- [value(strlen(r->mailslot_name)+1+r->data.length)]
+ [value(strlen(mailslot_name)+1+r->data.length)]
uint16 byte_count;
astring mailslot_name;
[flag(NDR_REMAINING)] DATA_BLOB data;
nstring unicode_domain;
uint32 db_count;
nbt_db_change dbchange[db_count];
- [value(ndr_size_dom_sid(&r->sid))] uint32 sid_size;
+ [value(ndr_size_dom_sid(&sid))] uint32 sid_size;
[flag(NDR_ALIGN4)] DATA_BLOB _pad2;
dom_sid sid;
uint32 nt_version;
nstring user_name;
astring mailslot_name;
uint32 acct_control;
- [value(ndr_size_dom_sid(&r->sid))] uint32 sid_size;
+ [value(ndr_size_dom_sid(&sid))] uint32 sid_size;
[flag(NDR_ALIGN4)] DATA_BLOB _pad;
dom_sid sid;
uint32 nt_version;
LocalMasterAnnouncement = 15
} nbt_browse_opcode;
- typedef bitmap {
- SV_TYPE_WORKSTATION = 0x00000001,
- SV_TYPE_SERVER = 0x00000002,
- SV_TYPE_SQLSERVER = 0x00000004,
- SV_TYPE_DOMAIN_CTRL = 0x00000008,
- SV_TYPE_DOMAIN_BAKCTRL = 0x00000010,
- SV_TYPE_TIME_SOURCE = 0x00000020,
- SV_TYPE_AFP = 0x00000040,
- SV_TYPE_NOVELL = 0x00000080,
- SV_TYPE_DOMAIN_MEMBER = 0x00000100,
- SV_TYPE_PRINTQ_SERVER = 0x00000200,
- SV_TYPE_DIALIN_SERVER = 0x00000400,
- SV_TYPE_XENIX_SERVER = 0x00000800,
- SV_TYPE_NT = 0x00001000,
- SV_TYPE_POTENTIAL_BROWSER = 0x00010000,
- SV_TYPE_BACKUP_BROWSER = 0x00020000,
- SV_TYPE_MASTER_BROWSER = 0x00040000,
- SV_TYPE_DOMAIN_MASTER = 0x00080000,
- SV_TYPE_LOCAL_LIST_ONLY = 0x40000000,
- SV_TYPE_DOMAIN_ENUM = 0x80000000
- } nbt_browse_server_type;
-
typedef struct {
uint8 update_count;
uint32 ttl;
declare bitmap samr_AcctFlags;
typedef [public] struct {
- [value(strlen_m(r->string)*2)] uint16 size;
- [value(r->size)] uint16 length;
+ [value(strlen_m(string)*2)] uint16 size;
+ [value(size)] uint16 length;
unistr_noterm *string;
} netr_String;
typedef [flag(NDR_PAHEX)] struct {
uint16 length;
- [value(r->length)] uint16 size;
+ [value(length)] uint16 size;
[size_is(size),length_is(length)] uint8 *data;
} netr_ChallengeResponse;
typedef struct {
uint16 length;
- [value(r->length)] uint16 size;
+ [value(length)] uint16 size;
uint32 flags;
samr_Password pwd;
} netr_USER_KEY16;
/******************/
/* Function: 0x05 */
typedef struct {
- [value(2*strlen_m(r->string))] uint16 length;
- [value(r->length)] uint16 size;
+ [value(2*strlen_m(string))] uint16 length;
+ [value(length)] uint16 size;
unistr_noterm *string;
} samr_String;
} samr_DispInfoFull;
typedef struct {
- [value(strlen_m(r->string))] uint16 length;
- [value(strlen_m(r->string))] uint16 size;
+ [value(strlen_m(string))] uint16 length;
+ [value(strlen_m(string))] uint16 size;
ascstr_noterm *string;
} samr_AsciiName;
} security_descriptor;
typedef [public] struct {
- [range(0,0x40000),value(ndr_size_security_descriptor(r->sd))] uint32 sd_size;
+ [range(0,0x40000),value(ndr_size_security_descriptor(sd))] uint32 sd_size;
[subcontext(4)] security_descriptor *sd;
} sec_desc_buf;
}
uint32 reserved2;
uint32 panningwidth;
uint32 panningheight;
- [subcontext_size(r->__driverextra_length),subcontext(0),flag(NDR_REMAINING)] DATA_BLOB driverextra_data;
+ [subcontext_size(__driverextra_length),subcontext(0),flag(NDR_REMAINING)] DATA_BLOB driverextra_data;
} spoolss_DeviceMode;
typedef [public] bitmap {
[in] unistr value_name,
[in] spoolss_PrinterDataType type,
[in,subcontext(4),switch_is(type)] spoolss_PrinterData data,
- [in,value(ndr_size_spoolss_PrinterData(&r->in.data,r->in.type,flags))] uint32 _buf_size
+ [in,value(ndr_size_spoolss_PrinterData(&data,type,flags))] uint32 _buf_size
);
/******************/
] interface winreg
{
typedef struct {
- [value(strlen_m_term(r->name)*2)] uint16 name_len;
- [value(r->name_len)] uint16 name_size;
+ [value(strlen_m_term(name)*2)] uint16 name_len;
+ [value(name_len)] uint16 name_size;
unistr *name;
} winreg_String;
} wrepl_packet;
typedef [flag(NDR_BIG_ENDIAN|NDR_PAHEX),public] struct {
- [value(ndr_size_wrepl_packet(&r->packet, ndr->flags))] uint32 size;
+ [value(ndr_size_wrepl_packet(&packet, ndr->flags))] uint32 size;
wrepl_packet packet;
} wrepl_wrap;