reduce usage of magic numbers
This commit is contained in:
parent
13613cab4d
commit
03a05c6ca1
24
shperm.c
24
shperm.c
@ -9,9 +9,14 @@
|
||||
#include <pwd.h>
|
||||
#include <grp.h>
|
||||
|
||||
#define PLEASE_ADD_ONE_EXTRA_BYTE_FOR_ZERO_TERMINATED_STRING 1
|
||||
|
||||
#define PERMISSION_USER 2
|
||||
#define PERMISSION_GROUP 1
|
||||
#define PERMISSION_OTHERS 0
|
||||
#define PERMISSION_BYTES 3 // rwx
|
||||
#define PERMISSION_ENTITIES 3 // user group others
|
||||
const MAX_PERMISSIONS = PERMISSION_ENTITIES * PERMISSION_BYTES;
|
||||
|
||||
typedef struct {
|
||||
char* username;
|
||||
@ -38,14 +43,15 @@ void mallocLines() {
|
||||
}
|
||||
|
||||
void addPermission2Line(int idx, int permissions) {
|
||||
strcpy(lines[idx].permissionStr[0], "---");
|
||||
strcpy(lines[idx].permissionStr[1], "---");
|
||||
strcpy(lines[idx].permissionStr[2], "---");
|
||||
for (int i = 0; i < 9; i++) {
|
||||
strcpy(lines[idx].permissionStr[PERMISSION_USER], "---");
|
||||
strcpy(lines[idx].permissionStr[PERMISSION_GROUP], "---");
|
||||
strcpy(lines[idx].permissionStr[PERMISSION_OTHERS], "---");
|
||||
for (int i = 0; i < MAX_PERMISSIONS; i++) {
|
||||
// clear out all permissions except the i'th bit
|
||||
int tmpPermission = permissions & (1 << i);
|
||||
int permissionUGO = i / 3;
|
||||
int permissionRWX = (8 - i) % 3;
|
||||
int permissionUGO = i / PERMISSION_ENTITIES;
|
||||
// -1 because of 0-based index
|
||||
int permissionRWX = (MAX_PERMISSIONS - i - 1) % PERMISSION_BYTES;
|
||||
|
||||
// read
|
||||
if (tmpPermission & S_IRUSR
|
||||
@ -81,7 +87,7 @@ void addLine(char* path, int permissions, int uid, int gid) {
|
||||
|
||||
// add user
|
||||
struct passwd* user = getpwuid(uid);
|
||||
lines[idx].username = malloc(strlen(user->pw_name) + 1);
|
||||
lines[idx].username = malloc(strlen(user->pw_name) + PLEASE_ADD_ONE_EXTRA_BYTE_FOR_ZERO_TERMINATED_STRING);
|
||||
strcpy(lines[idx].username, user->pw_name);
|
||||
if (maxUsername < strlen(lines[idx].username)) {
|
||||
maxUsername = strlen(lines[idx].username);
|
||||
@ -89,7 +95,7 @@ void addLine(char* path, int permissions, int uid, int gid) {
|
||||
|
||||
// add group
|
||||
struct group* group = getgrgid(gid);
|
||||
lines[idx].groupname = malloc(strlen(group->gr_name) + 1);
|
||||
lines[idx].groupname = malloc(strlen(group->gr_name) + PLEASE_ADD_ONE_EXTRA_BYTE_FOR_ZERO_TERMINATED_STRING);
|
||||
strcpy(lines[idx].groupname, group->gr_name);
|
||||
if (maxGroupname < strlen(lines[idx].groupname)) {
|
||||
maxGroupname = strlen(lines[idx].groupname);
|
||||
@ -99,7 +105,7 @@ void addLine(char* path, int permissions, int uid, int gid) {
|
||||
addPermission2Line(idx, permissions);
|
||||
|
||||
// add current path
|
||||
lines[idx].path = malloc(strlen(path) + 1);
|
||||
lines[idx].path = malloc(strlen(path) + PLEASE_ADD_ONE_EXTRA_BYTE_FOR_ZERO_TERMINATED_STRING);
|
||||
strcpy(lines[idx].path, path);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user