mirror of
https://github.com/samba-team/samba.git
synced 2025-10-25 19:33:18 +03:00
r9339: treat arrays of uint8 values as a special DATA_BLOB type in the ejs
interfaces to RPC. This makes large blobs of data much saner. Tim, you will probably want to do the same for the smb_interfaces.h generated code. Next we will need ways of extracting different data types from these blobs, for example asking for the blob to be interpreted as a utf16 string, or as a little-endian integer. That will allow for registry scripting to be quite sane.
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
8354b01612
commit
a8bca2e8e2
@@ -349,3 +349,40 @@ NTSTATUS ejs_push_BOOL(struct ejs_rpc *ejs,
|
||||
{
|
||||
return mprSetVar(v, name, mprCreateBoolVar(*r));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
pull a uint8 array from a mpr variable to a C element - treating as a data blob
|
||||
*/
|
||||
NTSTATUS ejs_pull_array_uint8(struct ejs_rpc *ejs,
|
||||
struct MprVar *v, const char *name,
|
||||
uint8_t *r, uint32_t length)
|
||||
{
|
||||
NTSTATUS status;
|
||||
DATA_BLOB *blob;
|
||||
|
||||
status = mprGetVar(&v, name);
|
||||
NT_STATUS_NOT_OK_RETURN(status);
|
||||
|
||||
blob = mprToDataBlob(v);
|
||||
if (blob == NULL) {
|
||||
return NT_STATUS_OBJECT_NAME_INVALID;
|
||||
}
|
||||
if (blob->length != length) {
|
||||
return NT_STATUS_INFO_LENGTH_MISMATCH;
|
||||
}
|
||||
memcpy(r, blob->data, length);
|
||||
return NT_STATUS_OK;
|
||||
|
||||
}
|
||||
|
||||
NTSTATUS ejs_push_array_uint8(struct ejs_rpc *ejs,
|
||||
struct MprVar *v, const char *name,
|
||||
const uint8_t *r, uint32_t length)
|
||||
{
|
||||
DATA_BLOB blob;
|
||||
blob.data = discard_const(r);
|
||||
blob.length = length;
|
||||
mprSetVar(v, name, mprDataBlob(blob));
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user