Thread: [pywin32-checkins] pywin32/win32/src/win32net win32netmisc.cpp,1.6,1.7
OLD project page for the Python extensions for Windows
Brought to you by:
mhammond
From: <mha...@us...> - 2003-10-19 04:08:46
|
Update of /cvsroot/pywin32/pywin32/win32/src/win32net In directory sc8-pr-cvs1:/tmp/cvs-serv18470 Modified Files: win32netmisc.cpp Log Message: [ 801727 ] win32net.NetServerDiskEnum only returns every other drive From Roger Upole Index: win32netmisc.cpp =================================================================== RCS file: /cvsroot/pywin32/pywin32/win32/src/win32net/win32netmisc.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** win32netmisc.cpp 7 Apr 2003 12:46:31 -0000 1.6 --- win32netmisc.cpp 18 Oct 2003 06:04:27 -0000 1.7 *************** *** 1088,1150 **** } ! // @pymethod ([dict, ...], total, resumeHandle)|win32net|NetServerDiskEnum|Retrieves the list of disk drives on a server. ! // @rdesc The result is a list of items read (with each item being a dictionary of format ! // <o PyUnicode>, depending on the level parameter), ! // the total available, and a "resume handle". If the result handle is true, you should call ! // this function again to fetch more data, passing this handle in the resumeHandle param. PyObject * PyNetServerDiskEnum(PyObject *self, PyObject *args) { ! WCHAR *szServer = NULL, *szDomain = NULL; ! PyObject *obServer, *obDomain = Py_None; PyObject *ret = NULL; DWORD err; ! DWORD dwPrefLen = 4096; ! DWORD level; ! BOOL ok = FALSE; DWORD resumeHandle = 0; DWORD numRead, i; - PyObject *list; BYTE *buf = NULL; DWORD totalEntries = 0; // @pyparm string/<o PyUnicode>|server||The name of the server to execute on, or None. ! // @pyparm int|level||The level of data required. Must be None or 0. ! // @pyparm int|resumeHandle|0|A resume handle. See the return description for more information. ! // @pyparm int|prefLen|4096|The preferred length of the data buffer. ! if (!PyArg_ParseTuple(args, "Oi|ii", &obServer, &level, &resumeHandle, &dwPrefLen)) return NULL; if (!PyWinObject_AsWCHAR(obServer, &szServer, TRUE)) ! goto done; ! if (!PyWinObject_AsWCHAR(obDomain, &szDomain, TRUE)) ! goto done; Py_BEGIN_ALLOW_THREADS err = NetServerDiskEnum(szServer, level, &buf, dwPrefLen, &numRead, &totalEntries, &resumeHandle); Py_END_ALLOW_THREADS ! if (err!=0 && err != ERROR_MORE_DATA) { ReturnNetError("NetServerDiskEnum",err); goto done; } ! list = PyList_New(numRead); ! if (list==NULL) goto done; ! // The return buffer contains drive letters as wchar_t seperated by wchar_t ! // NULLs. ! for (i=0;i<numRead;i++) { ! PyObject *sub = PyWinObject_FromWCHAR((WCHAR *)buf); ! if (sub==NULL) goto done; ! PyList_SetItem(list, i, sub); ! buf = buf + wcslen((WCHAR *)buf) + sizeof((wchar_t)0); ! } ! resumeHandle = err==0 ? 0 : resumeHandle; ! ret = Py_BuildValue("Oll", list, totalEntries, resumeHandle); ! Py_DECREF(list); ! ok = TRUE; done: if (buf) NetApiBufferFree(buf); ! if (!ok) { ! Py_XDECREF(ret); ! ret = NULL; ! } ! PyWinObject_FreeWCHAR(szServer); return ret; // @pyseeapi NetServerDiskEnum --- 1088,1138 ---- } ! // @pymethod (list|win32net|NetServerDiskEnum|Retrieves the list of disk drives on a server. ! // @rdesc The result is a list of drives on the server PyObject * PyNetServerDiskEnum(PyObject *self, PyObject *args) { ! WCHAR *szServer=NULL, *disk=NULL; ! PyObject *obServer=NULL, *obdisk=NULL; PyObject *ret = NULL; DWORD err; ! DWORD dwPrefLen = MAX_PREFERRED_LENGTH; ! DWORD level=0; DWORD resumeHandle = 0; DWORD numRead, i; BYTE *buf = NULL; DWORD totalEntries = 0; // @pyparm string/<o PyUnicode>|server||The name of the server to execute on, or None. ! // @pyparm int|level||The level of data required. Must be 0. ! if (!PyArg_ParseTuple(args, "O|i", &obServer, &level)) return NULL; if (!PyWinObject_AsWCHAR(obServer, &szServer, TRUE)) ! return NULL; Py_BEGIN_ALLOW_THREADS err = NetServerDiskEnum(szServer, level, &buf, dwPrefLen, &numRead, &totalEntries, &resumeHandle); Py_END_ALLOW_THREADS ! if (err!=0) { ReturnNetError("NetServerDiskEnum",err); goto done; } ! ret = PyTuple_New(totalEntries); ! if (ret==NULL) ! goto done; ! // The return buffer contains drive letters as 3-char segments terminated by NULLs ! for (i=0;i<totalEntries;i++){ ! disk=(WCHAR *)(buf+(i*sizeof(WCHAR)*3)); ! obdisk = PyWinObject_FromWCHAR(disk,2); ! if (obdisk==NULL){ ! Py_DECREF(ret); ! ret = NULL; ! break; ! } ! PyTuple_SetItem(ret, i, obdisk); ! } done: if (buf) NetApiBufferFree(buf); ! if (szServer) ! PyWinObject_FreeWCHAR(szServer); return ret; // @pyseeapi NetServerDiskEnum |