reduce usage of magic numbers

This commit is contained in:
damage 2024-08-25 20:56:24 +02:00
parent 13613cab4d
commit 03a05c6ca1

View File

@ -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);
}