diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-03-31 15:14:27 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-03-31 15:14:27 -0700 |
commit | 890a13a45285ad44858add2ce2f74eb478f549c8 (patch) | |
tree | 778d3d73aef0d238edd621eaaf38dcdb9f22616e /compat | |
parent | 87b3c0117a340df61bdbac6794611c74696bd42a (diff) | |
parent | 2be10bb5c1cfe15aa4f1b43137ccd17d826d8553 (diff) | |
download | git-890a13a45285ad44858add2ce2f74eb478f549c8.tar.gz git-890a13a45285ad44858add2ce2f74eb478f549c8.tar.xz |
Sync with 1.7.0.4
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'compat')
-rw-r--r-- | compat/bswap.h | 2 | ||||
-rw-r--r-- | compat/mingw.c | 20 |
2 files changed, 20 insertions, 2 deletions
diff --git a/compat/bswap.h b/compat/bswap.h index f3b8c4418..54756dbb0 100644 --- a/compat/bswap.h +++ b/compat/bswap.h @@ -17,6 +17,8 @@ static inline uint32_t default_swab32(uint32_t val) ((val & 0x000000ff) << 24)); } +#undef bswap32 + #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) #define bswap32(x) ({ \ diff --git a/compat/mingw.c b/compat/mingw.c index c5bfb39b3..30716903f 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -275,8 +275,17 @@ int mingw_utime (const char *file_name, const struct utimbuf *times) int fh, rc; /* must have write permission */ - if ((fh = open(file_name, O_RDWR | O_BINARY)) < 0) - return -1; + DWORD attrs = GetFileAttributes(file_name); + if (attrs != INVALID_FILE_ATTRIBUTES && + (attrs & FILE_ATTRIBUTE_READONLY)) { + /* ignore errors here; open() will report them */ + SetFileAttributes(file_name, attrs & ~FILE_ATTRIBUTE_READONLY); + } + + if ((fh = open(file_name, O_RDWR | O_BINARY)) < 0) { + rc = -1; + goto revert_attrs; + } time_t_to_filetime(times->modtime, &mft); time_t_to_filetime(times->actime, &aft); @@ -286,6 +295,13 @@ int mingw_utime (const char *file_name, const struct utimbuf *times) } else rc = 0; close(fh); + +revert_attrs: + if (attrs != INVALID_FILE_ATTRIBUTES && + (attrs & FILE_ATTRIBUTE_READONLY)) { + /* ignore errors again */ + SetFileAttributes(file_name, attrs); + } return rc; } |