Added the MakeFileReadable() method.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8327 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
John Criswell 2003-09-02 21:09:30 +00:00
parent 9adeccc552
commit 66622be46a
4 changed files with 142 additions and 0 deletions

View File

@ -51,4 +51,21 @@ std::string getUniqueFilename(const std::string &FilenameBase);
/// In case of failure, the file's access attributes are unspecified.
///
bool MakeFileExecutable (const std::string & Filename);
///
/// Method: MakeFileReadable()
///
/// Description:
/// This method turns on whatever access attributes are needed to make the
/// specified file readable.
///
/// Return value:
/// True - The operation succeeded.
/// False - The operation failed.
///
/// Notes:
/// In case of failure, the file's access attributes are unspecified.
///
bool MakeFileReadable (const std::string & Filename);
#endif

View File

@ -51,4 +51,21 @@ std::string getUniqueFilename(const std::string &FilenameBase);
/// In case of failure, the file's access attributes are unspecified.
///
bool MakeFileExecutable (const std::string & Filename);
///
/// Method: MakeFileReadable()
///
/// Description:
/// This method turns on whatever access attributes are needed to make the
/// specified file readable.
///
/// Return value:
/// True - The operation succeeded.
/// False - The operation failed.
///
/// Notes:
/// In case of failure, the file's access attributes are unspecified.
///
bool MakeFileReadable (const std::string & Filename);
#endif

View File

@ -147,3 +147,57 @@ MakeFileExecutable (const std::string & Filename)
return true;
}
///
/// Method: MakeFileReadable ()
///
/// Description:
/// This method makes the specified filename readable by giving it
/// read permission. It respects the umask value of the process, and it
/// does not enable any unnecessary access bits.
///
/// Algorithm:
/// o Get file's current permissions.
/// o Get the process's current umask.
/// o Take the set of all read bits and disable those found in the umask.
/// o Add the remaining permissions to the file's permissions.
///
bool
MakeFileReadable (const std::string & Filename)
{
// Permissions masking value of the user
mode_t mask;
// Permissions currently enabled on the file
struct stat fstat;
//
// Grab the umask value from the operating system. We want to use it when
// changing the file's permissions.
//
// Note:
// Umask() is one of those annoying system calls. You have to call it
// to get the current value and then set it back.
//
mask = umask (0x777);
umask (mask);
//
// Go fetch the file's current permission bits. We want to *add* execute
// access to the file.
//
if ((stat (Filename.c_str(), &fstat)) == -1)
{
return false;
}
//
// Make the file executable...
//
if ((chmod(Filename.c_str(), (fstat.st_mode | (0444 & ~mask)))) == -1)
{
return false;
}
return true;
}

View File

@ -147,3 +147,57 @@ MakeFileExecutable (const std::string & Filename)
return true;
}
///
/// Method: MakeFileReadable ()
///
/// Description:
/// This method makes the specified filename readable by giving it
/// read permission. It respects the umask value of the process, and it
/// does not enable any unnecessary access bits.
///
/// Algorithm:
/// o Get file's current permissions.
/// o Get the process's current umask.
/// o Take the set of all read bits and disable those found in the umask.
/// o Add the remaining permissions to the file's permissions.
///
bool
MakeFileReadable (const std::string & Filename)
{
// Permissions masking value of the user
mode_t mask;
// Permissions currently enabled on the file
struct stat fstat;
//
// Grab the umask value from the operating system. We want to use it when
// changing the file's permissions.
//
// Note:
// Umask() is one of those annoying system calls. You have to call it
// to get the current value and then set it back.
//
mask = umask (0x777);
umask (mask);
//
// Go fetch the file's current permission bits. We want to *add* execute
// access to the file.
//
if ((stat (Filename.c_str(), &fstat)) == -1)
{
return false;
}
//
// Make the file executable...
//
if ((chmod(Filename.c_str(), (fstat.st_mode | (0444 & ~mask)))) == -1)
{
return false;
}
return true;
}