git add -f bin/default/librpc/gen_ndr/*.{c,h,ndr,pidl} bin/default/source*/librpc...
[metze/samba/wip.git] / bin / default / librpc / gen_ndr / py_browser.c
index 3ba2ba595497224ecdbb269fd285f2c20822d26f..54302fa74c2b2f55e6afe5f3574ee45408a84744 100644 (file)
@@ -8,11 +8,68 @@
 #include "bin/default/librpc/gen_ndr/ndr_browser.h"
 #include "bin/default/librpc/gen_ndr/ndr_browser_c.h"
 
+/*
+ * These functions are here to ensure they can be optomised out by
+ * the compiler based on the constant input values
+ */
+
+static inline unsigned long long ndr_sizeof2uintmax(size_t var_size)
+{
+       switch (var_size) {
+       case 8:
+               return UINT64_MAX;
+       case 4:
+               return UINT32_MAX;
+       case 2:
+               return UINT16_MAX;
+       case 1:
+               return UINT8_MAX;
+       }
+
+       return 0;
+}
+
+static inline long long ndr_sizeof2intmax(size_t var_size)
+{
+       switch (var_size) {
+       case 8:
+               return INT64_MAX;
+       case 4:
+               return INT32_MAX;
+       case 2:
+               return INT16_MAX;
+       case 1:
+               return INT8_MAX;
+       }
+
+       return 0;
+}
+
+static inline PyObject *ndr_PyLong_FromLongLong(long long v)
+{
+       if (v > LONG_MAX || v < LONG_MIN) {
+               return PyLong_FromLongLong(v);
+       } else {
+               return PyInt_FromLong(v);
+       }
+}
+
+static inline PyObject *ndr_PyLong_FromUnsignedLongLong(unsigned long long v)
+{
+       if (v > LONG_MAX) {
+               return PyLong_FromUnsignedLongLong(v);
+       } else {
+               return PyInt_FromLong(v);
+       }
+}
+
 #include "librpc/gen_ndr/srvsvc.h"
-staticforward PyTypeObject BrowserrSrvInfo100Ctr_Type;
-staticforward PyTypeObject BrowserrSrvInfo101Ctr_Type;
-staticforward PyTypeObject BrowserrSrvInfo_Type;
-staticforward PyTypeObject browser_InterfaceType;
+static PyTypeObject BrowserrSrvInfo100Ctr_Type;
+static PyTypeObject BrowserrSrvInfo101Ctr_Type;
+PyObject *py_import_BrowserrSrvInfoUnion(TALLOC_CTX *mem_ctx, int level, union BrowserrSrvInfoUnion *in);
+union BrowserrSrvInfoUnion *py_export_BrowserrSrvInfoUnion(TALLOC_CTX *mem_ctx, int level, PyObject *in);
+static PyTypeObject BrowserrSrvInfo_Type;
+static PyTypeObject browser_InterfaceType;
 
 void initbrowser(void);static PyTypeObject *srvsvc_NetSrvInfo100_Type;
 static PyTypeObject *Object_Type;
@@ -24,15 +81,42 @@ static PyObject *py_BrowserrSrvInfo100Ctr_get_entries_read(PyObject *obj, void *
 {
        struct BrowserrSrvInfo100Ctr *object = (struct BrowserrSrvInfo100Ctr *)pytalloc_get_ptr(obj);
        PyObject *py_entries_read;
-       py_entries_read = PyInt_FromLong(object->entries_read);
+       py_entries_read = ndr_PyLong_FromUnsignedLongLong((uint32_t)object->entries_read);
        return py_entries_read;
 }
 
 static int py_BrowserrSrvInfo100Ctr_set_entries_read(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct BrowserrSrvInfo100Ctr *object = (struct BrowserrSrvInfo100Ctr *)pytalloc_get_ptr(py_obj);
-       PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
-       object->entries_read = PyInt_AsLong(value);
+       {
+               const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->entries_read));
+               if (PyLong_Check(value)) {
+                       unsigned long long test_var;
+                       test_var = PyLong_AsUnsignedLongLong(value);
+                       if (PyErr_Occurred() != NULL) {
+                               return -1;
+                       }
+                       if (test_var > uint_max) {
+                               PyErr_Format(PyExc_OverflowError, "Expected type %s or %s within range 0 - %llu, got %llu",\
+                                 PyInt_Type.tp_name, PyLong_Type.tp_name, uint_max, test_var);
+                               return -1;
+                       }
+                       object->entries_read = test_var;
+               } else if (PyInt_Check(value)) {
+                       long test_var;
+                       test_var = PyInt_AsLong(value);
+                       if (test_var < 0 || test_var > uint_max) {
+                               PyErr_Format(PyExc_OverflowError, "Expected type %s or %s within range 0 - %llu, got %ld",\
+                                 PyInt_Type.tp_name, PyLong_Type.tp_name, uint_max, test_var);
+                               return -1;
+                       }
+                       object->entries_read = test_var;
+               } else {
+                       PyErr_Format(PyExc_TypeError, "Expected type %s or %s",\
+                         PyInt_Type.tp_name, PyLong_Type.tp_name);
+                       return -1;
+               }
+       }
        return 0;
 }
 
@@ -50,7 +134,7 @@ static PyObject *py_BrowserrSrvInfo100Ctr_get_entries(PyObject *obj, void *closu
                }
                {
                        int entries_cntr_1;
-                       for (entries_cntr_1 = 0; entries_cntr_1 < object->entries_read; entries_cntr_1++) {
+                       for (entries_cntr_1 = 0; entries_cntr_1 < (object->entries_read); entries_cntr_1++) {
                                PyObject *py_entries_1;
                                py_entries_1 = pytalloc_reference_ex(srvsvc_NetSrvInfo100_Type, object->entries, &object->entries[entries_cntr_1]);
                                PyList_SetItem(py_entries, entries_cntr_1, py_entries_1);
@@ -63,7 +147,7 @@ static PyObject *py_BrowserrSrvInfo100Ctr_get_entries(PyObject *obj, void *closu
 static int py_BrowserrSrvInfo100Ctr_set_entries(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct BrowserrSrvInfo100Ctr *object = (struct BrowserrSrvInfo100Ctr *)pytalloc_get_ptr(py_obj);
-       talloc_unlink(pytalloc_get_mem_ctx(py_obj), object->entries);
+       talloc_unlink(pytalloc_get_mem_ctx(py_obj), discard_const(object->entries));
        if (value == Py_None) {
                object->entries = NULL;
        } else {
@@ -114,15 +198,42 @@ static PyObject *py_BrowserrSrvInfo101Ctr_get_entries_read(PyObject *obj, void *
 {
        struct BrowserrSrvInfo101Ctr *object = (struct BrowserrSrvInfo101Ctr *)pytalloc_get_ptr(obj);
        PyObject *py_entries_read;
-       py_entries_read = PyInt_FromLong(object->entries_read);
+       py_entries_read = ndr_PyLong_FromUnsignedLongLong((uint32_t)object->entries_read);
        return py_entries_read;
 }
 
 static int py_BrowserrSrvInfo101Ctr_set_entries_read(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct BrowserrSrvInfo101Ctr *object = (struct BrowserrSrvInfo101Ctr *)pytalloc_get_ptr(py_obj);
-       PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
-       object->entries_read = PyInt_AsLong(value);
+       {
+               const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->entries_read));
+               if (PyLong_Check(value)) {
+                       unsigned long long test_var;
+                       test_var = PyLong_AsUnsignedLongLong(value);
+                       if (PyErr_Occurred() != NULL) {
+                               return -1;
+                       }
+                       if (test_var > uint_max) {
+                               PyErr_Format(PyExc_OverflowError, "Expected type %s or %s within range 0 - %llu, got %llu",\
+                                 PyInt_Type.tp_name, PyLong_Type.tp_name, uint_max, test_var);
+                               return -1;
+                       }
+                       object->entries_read = test_var;
+               } else if (PyInt_Check(value)) {
+                       long test_var;
+                       test_var = PyInt_AsLong(value);
+                       if (test_var < 0 || test_var > uint_max) {
+                               PyErr_Format(PyExc_OverflowError, "Expected type %s or %s within range 0 - %llu, got %ld",\
+                                 PyInt_Type.tp_name, PyLong_Type.tp_name, uint_max, test_var);
+                               return -1;
+                       }
+                       object->entries_read = test_var;
+               } else {
+                       PyErr_Format(PyExc_TypeError, "Expected type %s or %s",\
+                         PyInt_Type.tp_name, PyLong_Type.tp_name);
+                       return -1;
+               }
+       }
        return 0;
 }
 
@@ -140,7 +251,7 @@ static PyObject *py_BrowserrSrvInfo101Ctr_get_entries(PyObject *obj, void *closu
                }
                {
                        int entries_cntr_1;
-                       for (entries_cntr_1 = 0; entries_cntr_1 < object->entries_read; entries_cntr_1++) {
+                       for (entries_cntr_1 = 0; entries_cntr_1 < (object->entries_read); entries_cntr_1++) {
                                PyObject *py_entries_1;
                                py_entries_1 = pytalloc_reference_ex(srvsvc_NetSrvInfo101_Type, object->entries, &object->entries[entries_cntr_1]);
                                PyList_SetItem(py_entries, entries_cntr_1, py_entries_1);
@@ -153,7 +264,7 @@ static PyObject *py_BrowserrSrvInfo101Ctr_get_entries(PyObject *obj, void *closu
 static int py_BrowserrSrvInfo101Ctr_set_entries(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct BrowserrSrvInfo101Ctr *object = (struct BrowserrSrvInfo101Ctr *)pytalloc_get_ptr(py_obj);
-       talloc_unlink(pytalloc_get_mem_ctx(py_obj), object->entries);
+       talloc_unlink(pytalloc_get_mem_ctx(py_obj), discard_const(object->entries));
        if (value == Py_None) {
                object->entries = NULL;
        } else {
@@ -199,7 +310,7 @@ static PyTypeObject BrowserrSrvInfo101Ctr_Type = {
        .tp_new = py_BrowserrSrvInfo101Ctr_new,
 };
 
-static PyObject *py_import_BrowserrSrvInfoUnion(TALLOC_CTX *mem_ctx, int level, union BrowserrSrvInfoUnion *in)
+PyObject *py_import_BrowserrSrvInfoUnion(TALLOC_CTX *mem_ctx, int level, union BrowserrSrvInfoUnion *in)
 {
        PyObject *ret;
 
@@ -232,7 +343,7 @@ static PyObject *py_import_BrowserrSrvInfoUnion(TALLOC_CTX *mem_ctx, int level,
        return NULL;
 }
 
-static union BrowserrSrvInfoUnion *py_export_BrowserrSrvInfoUnion(TALLOC_CTX *mem_ctx, int level, PyObject *in)
+union BrowserrSrvInfoUnion *py_export_BrowserrSrvInfoUnion(TALLOC_CTX *mem_ctx, int level, PyObject *in)
 {
        union BrowserrSrvInfoUnion *ret = talloc_zero(mem_ctx, union BrowserrSrvInfoUnion);
        switch (level) {
@@ -277,15 +388,42 @@ static PyObject *py_BrowserrSrvInfo_get_level(PyObject *obj, void *closure)
 {
        struct BrowserrSrvInfo *object = (struct BrowserrSrvInfo *)pytalloc_get_ptr(obj);
        PyObject *py_level;
-       py_level = PyInt_FromLong(object->level);
+       py_level = ndr_PyLong_FromUnsignedLongLong((uint32_t)object->level);
        return py_level;
 }
 
 static int py_BrowserrSrvInfo_set_level(PyObject *py_obj, PyObject *value, void *closure)
 {
        struct BrowserrSrvInfo *object = (struct BrowserrSrvInfo *)pytalloc_get_ptr(py_obj);
-       PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
-       object->level = PyInt_AsLong(value);
+       {
+               const unsigned long long uint_max = ndr_sizeof2uintmax(sizeof(object->level));
+               if (PyLong_Check(value)) {
+                       unsigned long long test_var;
+                       test_var = PyLong_AsUnsignedLongLong(value);
+                       if (PyErr_Occurred() != NULL) {
+                               return -1;
+                       }
+                       if (test_var > uint_max) {
+                               PyErr_Format(PyExc_OverflowError, "Expected type %s or %s within range 0 - %llu, got %llu",\
+                                 PyInt_Type.tp_name, PyLong_Type.tp_name, uint_max, test_var);
+                               return -1;
+                       }
+                       object->level = test_var;
+               } else if (PyInt_Check(value)) {
+                       long test_var;
+                       test_var = PyInt_AsLong(value);
+                       if (test_var < 0 || test_var > uint_max) {
+                               PyErr_Format(PyExc_OverflowError, "Expected type %s or %s within range 0 - %llu, got %ld",\
+                                 PyInt_Type.tp_name, PyLong_Type.tp_name, uint_max, test_var);
+                               return -1;
+                       }
+                       object->level = test_var;
+               } else {
+                       PyErr_Format(PyExc_TypeError, "Expected type %s or %s",\
+                         PyInt_Type.tp_name, PyLong_Type.tp_name);
+                       return -1;
+               }
+       }
        return 0;
 }
 
@@ -380,7 +518,7 @@ static PyObject *unpack_py_BrowserrQueryOtherDomains_args_out(struct BrowserrQue
        result = PyTuple_New(2);
        py_info = pytalloc_reference_ex(&BrowserrSrvInfo_Type, r->out.info, r->out.info);
        PyTuple_SetItem(result, 0, py_info);
-       py_total_entries = PyInt_FromLong(*r->out.total_entries);
+       py_total_entries = ndr_PyLong_FromUnsignedLongLong((uint32_t)*r->out.total_entries);
        PyTuple_SetItem(result, 1, py_total_entries);
        if (!W_ERROR_IS_OK(r->out.result)) {
                PyErr_SetWERROR(r->out.result);