2025-11-06 12:58:52 +01:00

88 lines
1.5 KiB
C

#include "namesarchive.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define INDEX_NOT_FOUND -1
static char **names = NULL;
static unsigned int numberOfEntries = 0;
int addName(const char *name)
{
char **oldPtr = names;
names = realloc(names, sizeof(char*)*(numberOfEntries+1));
if(names != NULL)
{
names[numberOfEntries] = malloc((strlen(name)+1) * sizeof(sizeof(char)));
if(names[numberOfEntries] != NULL)
{
strcpy(names[numberOfEntries], name);
numberOfEntries++;
return 1;
}
}
else
names = oldPtr;
return 0;
}
void printNames()
{
for(int i = 0; i < numberOfEntries; i++)
{
printf("%s\n", names[i]);
}
}
static int getNameIdx(const char *name)
{
for(int i = 0; i < numberOfEntries; i++)
{
if(strcmp(name, names[i]) == 0)
return i;
}
return INDEX_NOT_FOUND;
}
static void removeAt(int idx)
{
for(int i = idx; i < numberOfEntries-1; i++)
{
free(names[i]);
names[i] = names[i+1];
}
numberOfEntries--;
names = realloc(names, numberOfEntries*sizeof(char*));
}
int removeName(const char *name)
{
int idx = getNameIdx(name);
if(idx == INDEX_NOT_FOUND)
{
return 0;
}
else
{
removeAt(idx);
return 1;
}
}
void clearArchive()
{
for(int i = 0; i < numberOfEntries; i++)
{
free(names[i]);
names[i] = NULL;
}
free(names);
names = NULL;
numberOfEntries = 0;
}