Gary Benson writes:
> Hi all,
>
> I just noticed that File.canWrite() actually writes things in order to
> check whether they are writable. This seems really wrong to me: just
> checking something should not modify the filesystem! Does anyone mind
> if I replace this?
I agree with you. We should just use access("file", W_OK).
The gcj source I'm looking at has
public boolean canWrite()
{
checkWrite();
return _access (WRITE);
}
which is correct, but the Classpath native code I'm looking at uses
/* The lazy man's way out. We actually do open the file for writing
briefly to verify it can be done */
TARGET_NATIVE_FILE_OPEN_READWRITE (filename, fd, result);
(*env)->ReleaseStringUTFChars (env, name, filename);
if (result != TARGET_NATIVE_OK)
{
return (0);
}
TARGET_NATIVE_FILE_CLOSE (fd, result);
I can't see any code that actually writes anything.
Andrew.