From: Roger U. <ru...@us...> - 2007-02-22 18:51:51
|
Update of /cvsroot/pywin32/pywin32/win32/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12727/win32/src Modified Files: win32file.i Log Message: Use PyWinLong_FromVoidPtr for backup context pointers Pass file handles to CopyProgressRoutine as plain int handles to avoid Detach operations Index: win32file.i =================================================================== RCS file: /cvsroot/pywin32/pywin32/win32/src/win32file.i,v retrieving revision 1.72 retrieving revision 1.73 diff -C2 -d -r1.72 -r1.73 *** win32file.i 8 Feb 2007 07:19:57 -0000 1.72 --- win32file.i 22 Feb 2007 18:51:39 -0000 1.73 *************** *** 3574,3579 **** if (!PyWinObject_AsHANDLE(obh, &h, FALSE)) return NULL; ! ctxt=PyLong_AsVoidPtr(obctxt); ! if ((ctxt==NULL) && PyErr_Occurred()) return NULL; if (obbuf==Py_None){ --- 3574,3578 ---- if (!PyWinObject_AsHANDLE(obh, &h, FALSE)) return NULL; ! if (!PyWinLong_AsVoidPtr(obctxt, &ctxt)) return NULL; if (obbuf==Py_None){ *************** *** 3599,3603 **** return NULL; } ! return Py_BuildValue("lNN", bytes_read, obbufout, PyLong_FromVoidPtr(ctxt)); } --- 3598,3602 ---- return NULL; } ! return Py_BuildValue("lNN", bytes_read, obbufout, PyWinLong_FromVoidPtr(ctxt)); } *************** *** 3622,3627 **** if (!PyWinObject_AsHANDLE(obh, &h, FALSE)) return NULL; ! ctxt=PyLong_AsVoidPtr(obctxt); ! if ((ctxt==NULL) && PyErr_Occurred()) return NULL; if (!PyWinObject_AsULARGE_INTEGER(obbytes_to_seek, &bytes_to_seek)) --- 3621,3625 ---- if (!PyWinObject_AsHANDLE(obh, &h, FALSE)) return NULL; ! if (!PyWinLong_AsVoidPtr(obctxt, &ctxt)) return NULL; if (!PyWinObject_AsULARGE_INTEGER(obbytes_to_seek, &bytes_to_seek)) *************** *** 3665,3670 **** if (!PyWinObject_AsHANDLE(obh, &h, FALSE)) return NULL; ! ctxt=PyLong_AsVoidPtr(obctxt); ! if ((ctxt==NULL) && PyErr_Occurred()) return NULL; if (PyObject_AsReadBuffer(obbuf, (const void **)&buf, &buflen)==-1) --- 3663,3667 ---- if (!PyWinObject_AsHANDLE(obh, &h, FALSE)) return NULL; ! if (!PyWinLong_AsVoidPtr(obctxt, &ctxt)) return NULL; if (PyObject_AsReadBuffer(obbuf, (const void **)&buf, &buflen)==-1) *************** *** 3677,3681 **** return NULL; } ! return Py_BuildValue("lN", bytes_written, PyLong_FromVoidPtr(ctxt)); } --- 3674,3678 ---- return NULL; } ! return Py_BuildValue("lN", bytes_written, PyWinLong_FromVoidPtr(ctxt)); } *************** *** 3728,3743 **** LPVOID lpData) { ! PyObject *args=NULL, *hsrc=NULL, *hdst=NULL, *ret=NULL; DWORD retcode; CEnterLeavePython _celp; PyObject **callback_objects=(PyObject **)lpData; - hsrc=PyWinObject_FromHANDLE(hSourceFile); - hdst=PyWinObject_FromHANDLE(hDestinationFile); // Py_BuildValue should catch PyHANDLEs NULL ! args=Py_BuildValue("LLLLkkOOO", TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, dwStreamNumber, dwCallbackReason, ! hsrc, hdst, callback_objects[1]); if (args==NULL) // Some serious error, cancel operation. retcode=PROGRESS_CANCEL; --- 3725,3740 ---- LPVOID lpData) { ! PyObject *args=NULL, *ret=NULL; DWORD retcode; CEnterLeavePython _celp; PyObject **callback_objects=(PyObject **)lpData; // Py_BuildValue should catch PyHANDLEs NULL ! args=Py_BuildValue("LLLLkkNNO", TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred, dwStreamNumber, dwCallbackReason, ! PyWinLong_FromHANDLE(hSourceFile), ! PyWinLong_FromHANDLE(hDestinationFile), ! callback_objects[1]); if (args==NULL) // Some serious error, cancel operation. retcode=PROGRESS_CANCEL; *************** *** 3748,3752 **** else{ retcode=PyInt_AsLong(ret); ! if (PyErr_Occurred()) retcode=PROGRESS_CANCEL; } --- 3745,3749 ---- else{ retcode=PyInt_AsLong(ret); ! if ((retcode==(DWORD)-1) && PyErr_Occurred()) retcode=PROGRESS_CANCEL; } *************** *** 3755,3769 **** Py_XDECREF(args); Py_XDECREF(ret); - // Detach PyHANDLEs so they don't prematurely close file handles when destroyed - if (hsrc!=NULL){ - ret=PyObject_CallMethod(hsrc,"Detach",NULL); - Py_DECREF(hsrc); - Py_XDECREF(ret); - } - if (hdst!=NULL){ - ret=PyObject_CallMethod(hdst,"Detach",NULL); - Py_DECREF(hdst); - Py_XDECREF(ret); - } return retcode; } --- 3752,3755 ---- |