MCPcopy Create free account
hub / github.com/Kitware/CMake / HandleChmodCommandImpl

Function HandleChmodCommandImpl

Source/cmFileCommand.cxx:3966–4083  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3964}
3965
3966bool HandleChmodCommandImpl(std::vector<std::string> const& args, bool recurse,
3967 cmExecutionStatus& status)
3968{
3969 mode_t perms = 0;
3970 mode_t fperms = 0;
3971 mode_t dperms = 0;
3972 cmsys::Glob globber;
3973
3974 globber.SetRecurse(recurse);
3975 globber.SetRecurseListDirs(recurse);
3976
3977 struct Arguments : public ArgumentParser::ParseResult
3978 {
3979 cm::optional<ArgumentParser::NonEmpty<std::vector<std::string>>>
3980 Permissions;
3981 cm::optional<ArgumentParser::NonEmpty<std::vector<std::string>>>
3982 FilePermissions;
3983 cm::optional<ArgumentParser::NonEmpty<std::vector<std::string>>>
3984 DirectoryPermissions;
3985 };
3986
3987 static auto const parser =
3988 cmArgumentParser<Arguments>{}
3989 .Bind("PERMISSIONS"_s, &Arguments::Permissions)
3990 .Bind("FILE_PERMISSIONS"_s, &Arguments::FilePermissions)
3991 .Bind("DIRECTORY_PERMISSIONS"_s, &Arguments::DirectoryPermissions);
3992
3993 std::vector<std::string> pathEntries;
3994 Arguments parsedArgs =
3995 parser.Parse(cmMakeRange(args).advance(1), &pathEntries);
3996
3997 // check validity of arguments
3998 if (!parsedArgs.Permissions && !parsedArgs.FilePermissions &&
3999 !parsedArgs.DirectoryPermissions) // no permissions given
4000 {
4001 status.SetError("No permissions given");
4002 cmSystemTools::SetFatalErrorOccurred();
4003 return false;
4004 }
4005
4006 if (parsedArgs.Permissions && parsedArgs.FilePermissions &&
4007 parsedArgs.DirectoryPermissions) // all keywords are used
4008 {
4009 status.SetError("Remove either PERMISSIONS or FILE_PERMISSIONS or "
4010 "DIRECTORY_PERMISSIONS from the invocation");
4011 cmSystemTools::SetFatalErrorOccurred();
4012 return false;
4013 }
4014
4015 if (parsedArgs.MaybeReportError(status.GetMakefile())) {
4016 cmSystemTools::SetFatalErrorOccurred();
4017 return true;
4018 }
4019
4020 // validate permissions
4021 bool validatePermissions =
4022 ValidateAndConvertPermissions(parsedArgs.Permissions, perms, status) &&
4023 ValidateAndConvertPermissions(parsedArgs.FilePermissions, fperms,

Callers 2

HandleChmodCommandFunction · 0.85

Calls 15

cmMakeRangeFunction · 0.85
moveFunction · 0.85
SetPermissionsFunction · 0.85
MaybeReportErrorMethod · 0.80
FindFilesMethod · 0.80
emplace_backMethod · 0.80
cmStrCatFunction · 0.70
FileExistsFunction · 0.50
BindMethod · 0.45
ParseMethod · 0.45
advanceMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…