##// END OF EJS Templates
osutil: treat open modes 'w' and 'a' as 'w+' and 'a+' in posixfile...
Adrian Buehlmann -
r13273:764441ec default
parent child Browse files
Show More
@@ -436,7 +436,14 static PyObject *posixfile(PyObject *sel
436 }
436 }
437 else
437 else
438 flags = _O_TEXT;
438 flags = _O_TEXT;
439 if (plus) {
439 if (m0 == 'r' && !plus) {
440 flags |= _O_RDONLY;
441 access = GENERIC_READ;
442 } else {
443 /*
444 work around http://support.microsoft.com/kb/899149 and
445 set _O_RDWR for 'w' and 'a', even if mode has no '+'
446 */
440 flags |= _O_RDWR;
447 flags |= _O_RDWR;
441 access = GENERIC_READ | GENERIC_WRITE;
448 access = GENERIC_READ | GENERIC_WRITE;
442 fpmode[fppos++] = '+';
449 fpmode[fppos++] = '+';
@@ -446,25 +453,13 static PyObject *posixfile(PyObject *sel
446 switch (m0) {
453 switch (m0) {
447 case 'r':
454 case 'r':
448 creation = OPEN_EXISTING;
455 creation = OPEN_EXISTING;
449 if (!plus) {
450 flags |= _O_RDONLY;
451 access = GENERIC_READ;
452 }
453 break;
456 break;
454 case 'w':
457 case 'w':
455 creation = CREATE_ALWAYS;
458 creation = CREATE_ALWAYS;
456 if (!plus) {
457 access = GENERIC_WRITE;
458 flags |= _O_WRONLY;
459 }
460 break;
459 break;
461 case 'a':
460 case 'a':
462 creation = OPEN_ALWAYS;
461 creation = OPEN_ALWAYS;
463 flags |= _O_APPEND;
462 flags |= _O_APPEND;
464 if (!plus) {
465 flags |= _O_WRONLY;
466 access = GENERIC_WRITE;
467 }
468 break;
463 break;
469 default:
464 default:
470 PyErr_Format(PyExc_ValueError,
465 PyErr_Format(PyExc_ValueError,
General Comments 0
You need to be logged in to leave comments. Login now