pidl: Add new ‘u16string’ type
[samba.git] / pidl / lib / Parse / Pidl / Samba4 / Python.pm
index 432f8724ba06a684d7edb7b318e791f308ecd77c..2f2574338595eaa1827bc78aee88706864dda069 100644 (file)
@@ -1700,6 +1700,27 @@ sub ConvertStringFromPythonData($$$$$)
        $self->pidl("}");
 }
 
+sub ConvertU16StringFromPythonData($$$$$)
+{
+       my ($self, $mem_ctx, $py_var, $target, $fail) = @_;
+
+       $self->pidl("{");
+       $self->indent;
+       $self->pidl("uint16_t *str = NULL;");
+       $self->pidl("");
+       $self->pidl("str = PyUtf16String_FromBytes(");
+       $self->pidl("   $mem_ctx, $py_var);");
+       $self->pidl("if (str == NULL) {");
+       $self->indent;
+       $self->pidl("$fail");
+       $self->deindent;
+       $self->pidl("}");
+       $self->pidl("");
+       $self->pidl("$target = str;");
+       $self->deindent;
+       $self->pidl("}");
+}
+
 sub ConvertObjectFromPythonData($$$$$$;$$)
 {
        my ($self, $mem_ctx, $cvar, $ctype, $target, $fail, $location, $switch) = @_;
@@ -1854,6 +1875,12 @@ sub ConvertObjectFromPythonData($$$$$$;$$)
                return;
        }
 
+       if ($actual_ctype->{TYPE} eq "SCALAR" and
+               $actual_ctype->{NAME} eq "u16string") {
+               $self->ConvertU16StringFromPythonData($mem_ctx, $cvar, $target, $fail);
+               return;
+       }
+
        if ($actual_ctype->{TYPE} eq "SCALAR" and $actual_ctype->{NAME} eq "NTSTATUS") {
                $self->pidl("$target = NT_STATUS(PyLong_AsLong($cvar));");
                return;
@@ -2086,6 +2113,10 @@ sub ConvertScalarToPython($$$$)
                return "PyString_FromStringOrNULL($cvar)";
        }
 
+       if ($ctypename eq "u16string") {
+               return "PyBytes_FromUtf16StringOrNULL($cvar)";
+       }
+
        # Not yet supported
        if ($ctypename eq "string_array") {
                return "pytalloc_GenericObject_reference_ex($mem_ctx, $cvar)";