Refactor user management functions and improve memory handling in addPersonToList
This commit is contained in:
Vendored
+4
-2
@@ -4,6 +4,8 @@
|
|||||||
"ncurses.h": "c",
|
"ncurses.h": "c",
|
||||||
"stdlib.h": "c",
|
"stdlib.h": "c",
|
||||||
"errno.h": "c",
|
"errno.h": "c",
|
||||||
"rfid_handler.h": "c"
|
"rfid_handler.h": "c",
|
||||||
}
|
"fcntl.h": "c"
|
||||||
|
},
|
||||||
|
"C_Cpp.errorSquiggles": "enabled"
|
||||||
}
|
}
|
||||||
+33
-6
@@ -17,7 +17,7 @@ typedef struct person
|
|||||||
time_t last_time_event;
|
time_t last_time_event;
|
||||||
uint32_t total;
|
uint32_t total;
|
||||||
|
|
||||||
pthread_mutex_t lock;
|
pthread_mutex_t lock;
|
||||||
} person_t;
|
} person_t;
|
||||||
|
|
||||||
typedef struct node
|
typedef struct node
|
||||||
@@ -26,14 +26,41 @@ typedef struct node
|
|||||||
struct node *next;
|
struct node *next;
|
||||||
} node_t;
|
} node_t;
|
||||||
|
|
||||||
uint16_t generateUUID(node_t * _head);
|
uint16_t generateUUID(node_t *_head);
|
||||||
|
|
||||||
uint16_t searchUUIDByName(node_t * _head);
|
uint16_t searchUUIDByName(node_t *_head);
|
||||||
|
|
||||||
node_t * searchPersonByUUID(node_t * _head);
|
node_t *searchPersonByUUID(node_t *_head);
|
||||||
|
|
||||||
void addPersonToList(node_t * _head, char * _name, char * _surname, uint32_t _department);
|
/**
|
||||||
|
* @brief Adds a new person to the linked list.
|
||||||
|
*
|
||||||
|
* This function creates a new person and appends it to the end of the linked list.
|
||||||
|
* It dynamically allocates memory for the new person and initializes their details.
|
||||||
|
* If memory allocation fails or the input parameters are invalid, the function returns an error.
|
||||||
|
*
|
||||||
|
* @param _head Pointer to the head of the linked list (node_t **).
|
||||||
|
* @param _name Pointer to a string containing the person's first name.
|
||||||
|
* @param _surname Pointer to a string containing the person's last name.
|
||||||
|
* @param _department The department number to which the person belongs.
|
||||||
|
*
|
||||||
|
* @return int Returns 1 if the person was successfully added, otherwise 0 on failure.
|
||||||
|
*
|
||||||
|
* @note Memory for the name and surname is dynamically allocated. It is the caller's
|
||||||
|
* responsibility to free the memory for the entire list to avoid memory leaks.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* ```c
|
||||||
|
* node_t *head = NULL;
|
||||||
|
* if (addPersonToList(&head, "John", "Doe", 101)) {
|
||||||
|
* printf("Person successfully added.\n");
|
||||||
|
* } else {
|
||||||
|
* printf("Error adding person.\n");
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
int addPersonToList(node_t **_head, char *_name, char *_surname, uint32_t _department);
|
||||||
|
|
||||||
void addTimeEvent(node_t * _person);
|
int addTimeEvent(node_t *_person);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
+62
-1
@@ -1 +1,62 @@
|
|||||||
#include "users.h"
|
#include "users.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <termios.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int addPersonToList(
|
||||||
|
node_t **_head,
|
||||||
|
char *_name,
|
||||||
|
char *_surname,
|
||||||
|
uint32_t _department)
|
||||||
|
{
|
||||||
|
node_t *new_node = (node_t *)malloc(sizeof(node_t));
|
||||||
|
if (new_node == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!strlen(_name) || !strlen(_surname))
|
||||||
|
{
|
||||||
|
free(new_node);
|
||||||
|
new_node = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
new_node->user.name = (char *)malloc(strlen(_name) + 1);
|
||||||
|
new_node->user.surname = (char *)malloc(strlen(_surname) + 1);
|
||||||
|
|
||||||
|
if (new_node->user.name == NULL || new_node->user.surname == NULL)
|
||||||
|
{
|
||||||
|
free(new_node->user.name);
|
||||||
|
free(new_node->user.surname);
|
||||||
|
free(new_node);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy(new_node->user.name, _name);
|
||||||
|
strcpy(new_node->user.surname, _surname);
|
||||||
|
new_node->user.department = _department;
|
||||||
|
new_node->user.last_time_event = -255;
|
||||||
|
new_node->user.total = 0;
|
||||||
|
|
||||||
|
new_node->next = NULL;
|
||||||
|
|
||||||
|
if (*_head == NULL)
|
||||||
|
{
|
||||||
|
*_head = new_node;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
node_t *current = *_head;
|
||||||
|
while (current->next != NULL)
|
||||||
|
{
|
||||||
|
current = current->next;
|
||||||
|
}
|
||||||
|
current->next = new_node;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user