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.

Reply via email to