AuroraRuntime/Source/IO/FS/FileAdvisory.Unix.cpp

34 lines
830 B
C++

/***
Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved.
File: FileAdvisory.Unix.cpp
Date: 2022-1-29
Author: Reece
***/
#include <Source/RuntimeInternal.hpp>
#include "FS.hpp"
#include "FileAdvisory.Unix.hpp"
#include <sys/file.h>
namespace Aurora::IO::FS
{
bool ApplyDumbAdvisoryLock(int fd, EFileAdvisoryLockLevel level)
{
int operation = LOCK_NB;
switch (level)
{
case EFileAdvisoryLockLevel::eEnumCount:
case EFileAdvisoryLockLevel::eNoSafety:
return true;
case EFileAdvisoryLockLevel::eBlockWrite:
operation |= LOCK_SH;
break;
case EFileAdvisoryLockLevel::eBlockReadWrite:
operation |= LOCK_EX;
break;
}
return flock(fd, operation) == 0;
}
}