Implement chmod function (no-op on Windows)
This commit is contained in:
parent
683f1dd7bf
commit
524093ce1e
2 changed files with 34 additions and 0 deletions
|
|
@ -158,6 +158,11 @@ namespace fc {
|
||||||
void rename( const path& from, const path& to );
|
void rename( const path& from, const path& to );
|
||||||
void resize_file( const path& file, size_t s );
|
void resize_file( const path& file, size_t s );
|
||||||
|
|
||||||
|
// setuid, setgid not implemented.
|
||||||
|
// translates octal permission like 0755 to S_ stuff defined in sys/stat.h
|
||||||
|
// no-op on Windows.
|
||||||
|
void chmod( const path& p, int perm );
|
||||||
|
|
||||||
void create_hard_link( const path& from, const path& to );
|
void create_hard_link( const path& from, const path& to );
|
||||||
|
|
||||||
path unique_path();
|
path unique_path();
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
# include <ShlObj.h>
|
# include <ShlObj.h>
|
||||||
#else
|
#else
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -265,6 +266,34 @@ namespace fc {
|
||||||
("f",f)("s",t)( "reason", fc::except_str() ) );
|
("f",f)("s",t)( "reason", fc::except_str() ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// setuid, setgid not implemented.
|
||||||
|
// translates octal permission like 0755 to S_ stuff defined in sys/stat.h
|
||||||
|
// no-op on Windows.
|
||||||
|
void chmod( const path& p, int perm )
|
||||||
|
{
|
||||||
|
#ifndef WIN32
|
||||||
|
mode_t actual_perm =
|
||||||
|
((perm & 0400) ? S_IRUSR : 0)
|
||||||
|
| ((perm & 0200) ? S_IWUSR : 0)
|
||||||
|
| ((perm & 0100) ? S_IXUSR : 0)
|
||||||
|
|
||||||
|
| ((perm & 0040) ? S_IRGRP : 0)
|
||||||
|
| ((perm & 0020) ? S_IWGRP : 0)
|
||||||
|
| ((perm & 0010) ? S_IXGRP : 0)
|
||||||
|
|
||||||
|
| ((perm & 0004) ? S_IROTH : 0)
|
||||||
|
| ((perm & 0002) ? S_IWOTH : 0)
|
||||||
|
| ((perm & 0001) ? S_IXOTH : 0)
|
||||||
|
;
|
||||||
|
|
||||||
|
int result = ::chmod( p.string().c_str(), actual_perm );
|
||||||
|
if( result != 0 )
|
||||||
|
FC_THROW( "chmod operation failed on ${p}", ("p",p) );
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
void rename( const path& f, const path& t ) {
|
void rename( const path& f, const path& t ) {
|
||||||
try {
|
try {
|
||||||
boost::filesystem::rename( boost::filesystem::path(f), boost::filesystem::path(t) );
|
boost::filesystem::rename( boost::filesystem::path(f), boost::filesystem::path(t) );
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue