#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;
{
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;
}
}
{
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);
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 {
{
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;
}
}
{
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);
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 {
.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;
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) {
{
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;
}
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);