diff --git a/shperm.c b/shperm.c index 509fe59..b28db96 100644 --- a/shperm.c +++ b/shperm.c @@ -9,9 +9,14 @@ #include #include +#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); }