fix: groupID wrong type, function headers

This commit is contained in:
Tiago Sousa 2024-05-12 23:04:01 +01:00
parent a81b245852
commit f372af3cc3
Signed by: tiago
SSH key fingerprint: SHA256:odOD9vln9U7qNe1R8o3UCbE3jkQCkr5/q5mgd5hwua0

View file

@ -1,172 +1,172 @@
#include <dirent.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h> #include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h> #include <time.h>
#include <unistd.h>
void displayMessagesFromSender(char *senderDir);
void displayMessage(char *senderDir, char *filename);
void displayHeader() { void displayHeader() {
printf("╭━━━╮╱╱╱╱╱╱╭╮\n"); printf("╭━━━╮╱╱╱╱╱╱╭╮\n");
printf("╰╮╭╮┣╮╱╱╱╱╱┃┃\n"); printf("╰╮╭╮┣╮╱╱╱╱╱┃┃\n");
printf("╱┃┃┃┣╋╮╭┳╮╭┫╰━┳━━┳╮\n"); printf("╱┃┃┃┣╋╮╭┳╮╭┫╰━┳━━┳╮\n");
printf("╱┃┃┃┣┫┃┃┃╰╯┃╭╮┃╭╮┣┫\n"); printf("╱┃┃┃┣┫┃┃┃╰╯┃╭╮┃╭╮┣┫\n");
printf("╭╯╰╯┃┃╰╯┃┃┃┃╰╯┃╭╮┃┃\n"); printf("╭╯╰╯┃┃╰╯┃┃┃┃╰╯┃╭╮┃┃\n");
printf("╰━━━┫┣━━┻┻┻┻━━┻╯╰┻╯\n"); printf("╰━━━┫┣━━┻┻┻┻━━┻╯╰┻╯\n");
printf("╱╱╱╭╯┃\n"); printf("╱╱╱╭╯┃\n");
printf("╱╱╱╰━╯\n"); printf("╱╱╱╰━╯\n");
} }
void displayAllMessages(uid_t userID) { void displayAllMessages(uid_t userID) {
char userDir[256]; char userDir[256];
sprintf(userDir, "/djumbai/user/%d/mailbox", userID); // Construct user directory path sprintf(userDir, "/djumbai/user/%d/mailbox", userID); // Construct user directory path
// sprintf(userDir, "/mnt/e/Desktop/CSI/djumbai/test/%d/mailbox", userID); // TODO MUDAR ESTE PATH // sprintf(userDir, "/mnt/e/Desktop/CSI/djumbai/test/%d/mailbox", userID); // TODO MUDAR ESTE
DIR *dir; // PATH
struct dirent *entry; DIR *dir;
struct dirent *entry;
printf("Reading all messages for UserID %d...\n", userID); printf("Reading all messages for UserID %d...\n", userID);
dir = opendir(userDir); dir = opendir(userDir);
if (dir == NULL) { if (dir == NULL) {
printf("Error opening directory\n"); printf("Error opening directory\n");
return; return;
} }
while ((entry = readdir(dir)) != NULL) { while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_DIR && strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) { if (entry->d_type == DT_DIR && strcmp(entry->d_name, ".") != 0 &&
char senderDir[256]; strcmp(entry->d_name, "..") != 0) {
sprintf(senderDir, "%s/%s", userDir, entry->d_name); // Construct sender directory path char senderDir[256];
displayMessagesFromSender(senderDir); sprintf(senderDir, "%s/%s", userDir, entry->d_name); // Construct sender directory path
} displayMessagesFromSender(senderDir);
} }
}
closedir(dir); closedir(dir);
} }
void displayGroupMessages(gid_t groupID) {
char groupDir[256];
sprintf(groupDir, "/djumbai/group/%d/mailbox", groupID);
DIR *dir;
struct dirent *entry;
printf("Reading all messages for GroupID %d...\n", groupID);
void displayGroupMessages(uid_t groupID) { dir = opendir(groupDir);
char groupDir[256]; if (dir == NULL) {
sprintf(groupDir, "/djumbai/group/%d/mailbox", groupID); printf("Error opening directory\n");
DIR *dir; return;
struct dirent *entry; }
printf("Reading all messages for GroupID %d...\n", groupID); while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_DIR && strcmp(entry->d_name, ".") != 0 &&
strcmp(entry->d_name, "..") != 0) {
char senderDir[256];
sprintf(senderDir, "%s/%s", groupDir, entry->d_name); // Construct sender directory path
displayMessagesFromSender(senderDir);
}
}
dir = opendir(groupDir); closedir(dir);
if (dir == NULL) {
printf("Error opening directory\n");
return;
}
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_DIR && strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
char senderDir[256];
sprintf(senderDir, "%s/%s", groupDir, entry->d_name); // Construct sender directory path
displayMessagesFromSender(senderDir);
}
}
closedir(dir);
} }
void displayMessagesFromSender(char *senderDir) { void displayMessagesFromSender(char *senderDir) {
char *senderName = strrchr(senderDir, '/'); // Find the last occurrence of '/' char *senderName = strrchr(senderDir, '/'); // Find the last occurrence of '/'
if (senderName == NULL) { if (senderName == NULL) {
printf("Error parsing sender directory\n"); printf("Error parsing sender directory\n");
return; return;
} }
senderName++; // Move past the '/' senderName++; // Move past the '/'
DIR *dir; DIR *dir;
struct dirent *entry; struct dirent *entry;
printf("Reading messages from sender %s...\n", senderName); printf("Reading messages from sender %s...\n", senderName);
dir = opendir(senderDir); dir = opendir(senderDir);
if (dir == NULL) { if (dir == NULL) {
printf("Error opening directory\n"); printf("Error opening directory\n");
return; return;
} }
while ((entry = readdir(dir)) != NULL) { while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_REG) { // If it's a regular file if (entry->d_type == DT_REG) { // If it's a regular file
displayMessage(senderDir, entry->d_name); displayMessage(senderDir, entry->d_name);
} }
} }
closedir(dir); closedir(dir);
} }
void displayMessage(char *senderDir, char *filename) { void displayMessage(char *senderDir, char *filename) {
char filepath[256]; char filepath[256];
sprintf(filepath, "%s/%s", senderDir, filename); sprintf(filepath, "%s/%s", senderDir, filename);
FILE *file = fopen(filepath, "r"); FILE *file = fopen(filepath, "r");
if (file == NULL) { if (file == NULL) {
printf("Error opening file: %s\n", filename); printf("Error opening file: %s\n", filename);
return; return;
} }
printf("----- %s -----\n", filename); printf("----- %s -----\n", filename);
char buffer[256]; char buffer[256];
while (fgets(buffer, sizeof(buffer), file)) { while (fgets(buffer, sizeof(buffer), file)) {
printf("%s", buffer); printf("%s", buffer);
} }
printf("----- End of %s -----\n", filename); printf("----- End of %s -----\n", filename);
fclose(file); fclose(file);
} }
int main() { int main() {
int choice; int choice;
char sender[20]; char sender[20];
char groupID[20]; char group[20];
displayHeader(); displayHeader();
while(1) { while (1) {
printf("\nCurrent UserID: %d\n", getuid()); printf("\nCurrent UserID: %d\n", getuid());
printf("Options:\n"); printf("Options:\n");
printf("1. all (read all messages)\n"); printf("1. all (read all messages)\n");
printf("2. user -userID_here (read messages from given userID)\n"); printf("2. user -userID_here (read messages from given userID)\n");
printf("3. group -groupID_here\n"); printf("3. group -groupID_here\n");
printf("4. kill (exit the program)\n"); printf("4. kill (exit the program)\n");
printf("Enter your choice: "); printf("Enter your choice: ");
scanf("%d", &choice); scanf("%d", &choice);
switch(choice) { switch (choice) {
case 1: case 1:
displayAllMessages(getuid()); displayAllMessages(getuid());
break; break;
case 2: case 2:
printf("Enter sender userID: "); printf("Enter sender userID: ");
scanf("%s", sender); scanf("%s", sender);
uid_t senderID = atoi(sender); uid_t senderID = atoi(sender);
char userDir[256]; char userDir[256];
sprintf(userDir, "/djumbai/user/%d/mailbox/%d", getuid(), senderID); sprintf(userDir, "/djumbai/user/%d/mailbox/%d", getuid(), senderID);
displayMessagesFromSender(userDir); displayMessagesFromSender(userDir);
break; break;
case 3: case 3:
printf("Enter groupID: "); printf("Enter groupID: ");
scanf("%s", groupID); scanf("%s", group);
displayGroupMessages(groupID); gid_t groupID = atoi(group);
printf("Group messages functionality is not implemented yet.\n"); displayGroupMessages(groupID);
break; printf("Group messages functionality is not implemented yet.\n");
case 4: break;
printf("Exiting program...\n"); case 4:
exit(0); printf("Exiting program...\n");
default: exit(0);
printf("Invalid choice. Please try again.\n"); default:
} printf("Invalid choice. Please try again.\n");
} }
}
return 0; return 0;
} }