From: MARSHALL K. <Kei...@to...> - 2003-08-04 10:35:40
|
Hi Guys, I just had an application throw an unexpected "Permission denied" exception, when it tried to redirect stdout to a named temporary file, with the file name generated by "tmpnam()". The problem here lies with the definition of "_P_tmpdir" in stdio.h; the MinGW implementation has #define _P_tmpdir "\\" and "tmpnam( mytmpfile )" prepends exactly this pathname prefix to the proposed file name returned in "mytmpfile"; i.e. the named temporary file would be created in the root directory of the *current drive*. This would be fine, if we could always *guarantee* to have write permission in the root directory of every drive, which could possibly host the current working directory! However, what happens when PWD refers to a mapped drive on a network share, where we do not have write permission in the root directory? Answer: the application throws the "Permission denied" exception, when it calls "creat()" to initialise the temporary file stream! (Yes, my application failed because PWD referred to just such a network share; and, yes, it works fine when PWD refers to a local drive, where I *do* have root directory write permission). This is quite clearly a bug, arising from an inappropriate definition of "_P_tmpdir" in stdio.h; however, is it a MinGW bug, or is it yet another MS cock up, that allows "tmpnam()" to use this inappropriate definition? Regards, Keith Marshall |