mirror of
https://github.com/samba-team/samba.git
synced 2025-12-05 12:23:50 +03:00
calls to init_unistr2() in the code and every one of them got the 3rd argument incorrect, so I thought it best just to remove the argument. The incorrect usage was caused by callers using strlen() to determine the length of the string. The 3rd argument to init_unistr2() was supposed to be the character length, not the byte length of the string, so for non-english this could come out wrong. I also removed the bogus 'always allocate at least 256 bytes' hack. There may be some code that relies on this, but if there is then the code is broken and needs fixing.
-
92 lines
2.6 KiB
C
92 lines
2.6 KiB
C
/*
|
|
Python wrappers for DCERPC/SMB client routines.
|
|
|
|
Copyright (C) Tim Potter, 2002
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
#include "python/py_spoolss.h"
|
|
#include "python/py_conv.h"
|
|
|
|
struct pyconv py_FORM[] = {
|
|
{ "flags", PY_UINT32, offsetof(FORM, flags) },
|
|
{ "width", PY_UINT32, offsetof(FORM, size_x) },
|
|
{ "length", PY_UINT32, offsetof(FORM, size_y) },
|
|
{ "top", PY_UINT32, offsetof(FORM, top) },
|
|
{ "left", PY_UINT32, offsetof(FORM, left) },
|
|
{ "right", PY_UINT32, offsetof(FORM, right) },
|
|
{ "bottom", PY_UINT32, offsetof(FORM, bottom) },
|
|
{ NULL }
|
|
};
|
|
|
|
struct pyconv py_FORM_1[] = {
|
|
{ "flags", PY_UINT32, offsetof(FORM_1, flag) },
|
|
{ "width", PY_UINT32, offsetof(FORM_1, width) },
|
|
{ "length", PY_UINT32, offsetof(FORM_1, length) },
|
|
{ "top", PY_UINT32, offsetof(FORM_1, top) },
|
|
{ "left", PY_UINT32, offsetof(FORM_1, left) },
|
|
{ "right", PY_UINT32, offsetof(FORM_1, right) },
|
|
{ "bottom", PY_UINT32, offsetof(FORM_1, bottom) },
|
|
{ "name", PY_UNISTR, offsetof(FORM_1, name) },
|
|
{ NULL }
|
|
};
|
|
|
|
BOOL py_from_FORM_1(PyObject **dict, FORM_1 *form)
|
|
{
|
|
*dict = from_struct(form, py_FORM_1);
|
|
|
|
PyDict_SetItemString(*dict, "level", PyInt_FromLong(1));
|
|
|
|
return True;
|
|
}
|
|
|
|
BOOL py_to_FORM(FORM *form, PyObject *dict)
|
|
{
|
|
PyObject *obj, *dict_copy = PyDict_Copy(dict);
|
|
char *name;
|
|
BOOL result = False;
|
|
|
|
if (!(obj = PyDict_GetItemString(dict_copy, "name")) ||
|
|
!PyString_Check(obj))
|
|
goto done;
|
|
|
|
PyDict_DelItemString(dict_copy, "name");
|
|
|
|
if (!(obj = PyDict_GetItemString(dict_copy, "level")) ||
|
|
!PyInt_Check(obj))
|
|
goto done;
|
|
|
|
PyDict_DelItemString(dict_copy, "level");
|
|
|
|
if (!to_struct(form, dict_copy, py_FORM))
|
|
goto done;
|
|
|
|
/* Careful! We can't call PyString_AsString(obj) then delete
|
|
obj and still expect to have our pointer pointing somewhere
|
|
useful. */
|
|
|
|
obj = PyDict_GetItemString(dict, "name");
|
|
name = PyString_AsString(obj);
|
|
|
|
init_unistr2(&form->name, name);
|
|
|
|
result = True;
|
|
|
|
done:
|
|
Py_DECREF(dict_copy);
|
|
return result;
|
|
}
|