-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuser_info_utils.c
119 lines (111 loc) · 4.25 KB
/
user_info_utils.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "user_info_utils.h"
/*******************************************************************************
* user_infos_init function creates user_info struct and initializes its fields.
*
* @param void
* @return user_info_t*
******************************************************************************/
user_info_t *user_infos_init()
{
user_info_t *user_info = malloc(sizeof(user_info_t));
user_info->fd = 0;
user_info->user_name = NULL;
return user_info;
}
/*******************************************************************************
* user_infos_array_init function creates user_infos struct and initializes its fields.
*
* @param void
* @return user_infos_array_t*
******************************************************************************/
user_infos_array_t *user_infos_array_init()
{
user_infos_array_t *user_infos_struct = (user_infos_array_t *)malloc(sizeof(user_infos_array_t));
user_infos_struct->size = 0;
user_infos_struct->user_infos = NULL;
return user_infos_struct;
}
/*******************************************************************************
* user_infos_add_user function adds user info to the user_infos array.
*
* @param
* - user_infos_array_t *user_infos_struct,
* - user_info_t *user_insert
* @return user_infos_array_t*
******************************************************************************/
void user_infos_add_user(user_infos_array_t *user_infos_struct, user_info_t *user_insert)
{
user_infos_struct->size++;
user_infos_struct->user_infos = realloc(user_infos_struct->user_infos, user_infos_struct->size * sizeof(user_info_t *));
user_infos_struct->user_infos[user_infos_struct->size - 1] = user_insert;
}
/*******************************************************************************
* user_infos_remove_user function removes an user from the array.
*
* @param
* - user_infos_array_t *user_infos_struct,
* - user_info_t *user_remove
* @return int
******************************************************************************/
void user_infos_remove_user(user_infos_array_t *user_infos_struct, user_info_t *user_remove)
{
for (size_t index = 0; index < user_infos_struct->size; index++)
{
if (strcmp(user_remove->user_name, user_infos_struct->user_infos[index]->user_name) == 0)
{
memmove(user_infos_struct->user_infos + index, user_infos_struct->user_infos + index + 1,
(user_infos_struct->size - index - 1) * sizeof(user_info_t *));
user_infos_struct->size--;
user_infos_struct->user_infos = realloc(user_infos_struct->user_infos,
user_infos_struct->size * sizeof(user_info_t *));
}
}
}
/*******************************************************************************
* is_duplicate_user_name function checks if there is a duplicate username in the array.
*
* @param
* - user_infos_array_t *user_infos_struct,
* - char *user_name
* @return int
******************************************************************************/
int is_duplicate_user_name(user_infos_array_t *user_infos_struct, char *user_name)
{
for (size_t index = 0; index < user_infos_struct->size; index++)
{
if (strcmp(user_name, user_infos_struct->user_infos[index]->user_name) == 0)
{
return 1;
}
}
return 0;
}
/*******************************************************************************
* user_info_destroy frees user info.
*
* @param user_info_t *user_info
* @return void
******************************************************************************/
void user_info_destroy(user_info_t *user_info)
{
free(user_info->user_name);
free(user_info);
}
/*******************************************************************************
* user_infos_array_destroy function destroys the array and frees the relevant contents.
*
* @param user_infos_array_t *user_infos_struct
* @return void
******************************************************************************/
void user_infos_array_destroy(user_infos_array_t *user_infos_struct)
{
for (size_t index = 0; index < user_infos_struct->size; index++)
{
free(user_infos_struct->user_infos[index]->user_name);
free(user_infos_struct->user_infos[index]);
}
free(user_infos_struct);
}