This is the mail archive of the cygwin-developers@cygwin.com mailing list for the Cygwin project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
I guess that I found the complement of the following: http://cygwin.com/ml/cygwin-developers/2002-05/msg00008.html while tracking down some regressions with Cygwin Python CVS. :,) The attached test program, j7.cc, demonstrates the problem: $ >file $ j7 file dir The root cause of the problem is that symlink_info::check() ignores the ERROR_ACCESS_DENIED case in the following: fileattr = GetFileAttributes (suffix.path); if (fileattr == INVALID_FILE_ATTRIBUTES) { /* The GetFileAttributes call can fail for reasons that don't matter, so we just return 0. For example, getting the attributes of \\HOST will typically fail. */ debug_printf ("GetFileAttributes (%s) failed", suffix.path); error = geterrno_from_win_error (GetLastError (), EACCES); continue; } The above causes path_conv::check() to the lop off the tail component of the recently deleted file so that path_conv::fileattr incorrectly indicates a directory instead of a file. This in turn, causes fstat() to incorrectly indicate that the file descriptor is a directory instead of a file. Unfortunately, once again I do not know the best way to fix this problem. Should fstat() (and cousins) just return EACCES in this case? BTW, this would fix the Cygwin Python regressions: static PyFileObject* dircheck(PyFileObject* f) { struct stat buf; if (f->f_fp == NULL) return f; if (fstat(fileno(f->f_fp), &buf) == 0 && ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ S_ISDIR(buf.st_mode)) { char *msg = strerror(EISDIR); PyObject *exc = PyObject_CallFunction(PyExc_IOError, ... PyErr_SetObject(PyExc_IOError, exc); return NULL; } return f; } Thanks, Jason
Attachment:
j7.cc
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |