#include #include #include #include #include #include static void help_message(void) { printf( "chwrite [-h|--help]\n" "chwrite +|+w|-|-w FILE...\n" "\n" "Change write permissions for file(s)\n" ); } int main(int argc, char *argv[]) { int i = 0, f = 0, result = 0; struct stat fs = { 0, }; char operation; if (argc <= 1) { help_message(); return 0; } operation = argv[1][0]; if (operation != '+' && operation != '-') { help_message(); return 1; } for (i = 2; i < argc; ++i) { f = open(argv[i], 0); if (f == -1) return errno; result = fstat(f, &fs); if (result == -1) return errno; if (operation == '+') fs.st_mode |= S_IWUSR; else fs.st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH); result = fchmod(f, fs.st_mode); if (result == -1) return errno; } return result; }