FileOpeningConfig cfg;
/* I/O */
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
cfg.desiredAccess = GENERIC_READ;
cfg.shareMode = FILE_SHARE_READ;
#else
#endif
/* locking (if enabled later) */
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
cfg.lockFlags = 0; // no named constant for a shared lock
#elif _SQUID_SOLARIS_
cfg.lockType = F_RDLCK;
FileOpeningConfig cfg;
/* I/O */
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
cfg.desiredAccess = GENERIC_READ | GENERIC_WRITE;
cfg.shareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
#else
#endif
/* locking (if enabled later) */
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
cfg.lockFlags = LOCKFILE_EXCLUSIVE_LOCK;
#elif _SQUID_SOLARIS_
cfg.lockType = F_WRLCK;
FileOpeningConfig &
FileOpeningConfig::createdIfMissing()
{
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
Must((desiredAccess & GENERIC_WRITE) == GENERIC_WRITE);
creationDisposition = OPEN_ALWAYS;
#else
void
File::open(const FileOpeningConfig &cfg)
{
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
fd_ = CreateFile(TEXT(name_.c_str()), cfg.desiredAccess, cfg.shareMode, nullptr, cfg.creationDisposition, FILE_ATTRIBUTE_NORMAL, nullptr);
if (fd_ == InvalidHandle) {
const auto savedError = GetLastError();
{
if (!isOpen())
return;
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
if (!CloseHandle(fd_)) {
const auto savedError = GetLastError();
debugs(54, DBG_IMPORTANT, sysCallFailure("CloseHandle", WindowsErrorMessage(savedError)));
void
File::truncate()
{
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
if (!SetFilePointer(fd_, 0, nullptr, FILE_BEGIN)) {
const auto savedError = GetLastError();
throw TexcHere(sysCallFailure("SetFilePointer", WindowsErrorMessage(savedError)));
SBuf buf;
const auto readLimit = maxBytes + 1; // to detect excessively large files that we do not handle
char *rawBuf = buf.rawAppendStart(readLimit);
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
DWORD result = 0;
if (!ReadFile(fd_, rawBuf, readLimit, &result, nullptr)) {
const auto savedError = GetLastError();
void
File::writeAll(const SBuf &data)
{
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
DWORD nBytesWritten = 0;
if (!WriteFile(fd_, data.rawContent(), data.length(), &nBytesWritten, nullptr)) {
const auto savedError = GetLastError();
void
File::synchronize()
{
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
if (!FlushFileBuffers(fd_)) {
const auto savedError = GetLastError();
throw TexcHere(sysCallFailure("FlushFileBuffers", WindowsErrorMessage(savedError)));
void
File::lockOnce(const FileOpeningConfig &cfg)
{
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
if (!LockFileEx(fd_, cfg.lockFlags, 0, 0, 1, 0)) {
const auto savedError = GetLastError();
throw TexcHere(sysCallFailure("LockFileEx", WindowsErrorMessage(savedError)));
return sysCallFailure(callName, SBuf(xstrerr(savedErrno)));
}
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
const HANDLE File::InvalidHandle = INVALID_HANDLE_VALUE;
-#endif /* _SQUID_WINDOWS_ */
+#endif /* _SQUID_WINDOWS_ || _SQUID_MINGW_*/
friend class File;
/* file opening parameters */
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
DWORD desiredAccess = 0; ///< 2nd CreateFile() parameter
DWORD shareMode = 0; ///< 3rd CreateFile() parameter
DWORD creationDisposition = OPEN_EXISTING; ///< 5th CreateFile() parameter
#endif
/* file locking (disabled unless lock(n) sets positive lockAttempts) */
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
DWORD lockFlags = 0; ///< 2nd LockFileEx() parameter
#elif _SQUID_SOLARIS_
int lockType = F_UNLCK; ///< flock::type member for fcntl(F_SETLK)
protected:
bool isOpen() const {
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
return fd_ != InvalidHandle;
#else
return fd_ >= 0;
SBuf name_; ///< location on disk
// Windows-specific HANDLE is needed because LockFileEx() does not take POSIX FDs.
-#if _SQUID_WINDOWS_
+#if _SQUID_WINDOWS_ || _SQUID_MINGW_
typedef HANDLE Handle;
static const Handle InvalidHandle;
#else