diff options
Diffstat (limited to 'libdiskfs/rdwr-internal.c')
-rw-r--r-- | libdiskfs/rdwr-internal.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/libdiskfs/rdwr-internal.c b/libdiskfs/rdwr-internal.c index 9fe42ade..18a4ae1e 100644 --- a/libdiskfs/rdwr-internal.c +++ b/libdiskfs/rdwr-internal.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1994, 1995, 1996 Free Software Foundation + Copyright (C) 1994,95,96,97,99,2000 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -41,16 +41,23 @@ _diskfs_rdwr_internal (struct node *np, if (dir) assert (!diskfs_readonly); + if (*amt == 0) + /* Zero-length writes do not update mtime or anything else, by POSIX. */ + return 0; + if (!diskfs_check_readonly () && !notime) { if (dir) np->dn_set_mtime = 1; - else + else if (! _diskfs_noatime) np->dn_set_atime = 1; } memobj = diskfs_get_filemap (np, prot); + if (memobj == MACH_PORT_NULL) + return errno; + err = pager_memcpy (diskfs_get_filemap_pager_struct (np), memobj, offset, data, amt, prot); @@ -58,7 +65,7 @@ _diskfs_rdwr_internal (struct node *np, { if (dir) np->dn_set_mtime = 1; - else + else if (!_diskfs_noatime) np->dn_set_atime = 1; } |