[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
|