81 lines
1.6 KiB
C
81 lines
1.6 KiB
C
#include "load.h"
|
|
|
|
|
|
ErrEnum loadLogs(const char *logsName, Point **tabPoint, uint32_t *nbLigne)
|
|
{
|
|
/* Ouverture du fichier de logs */
|
|
FILE *logsFile = fopen(logsName, "r");
|
|
if(logsFile == NULL)
|
|
{
|
|
fprintf(stderr, "%s\n", strerror(errno));
|
|
return MISSING_FILE;
|
|
}
|
|
|
|
*nbLigne = 0;
|
|
char tmp[BUFSIZE] = "";
|
|
|
|
/* Comptage du nombre de lignes */
|
|
while(fgets(tmp, BUFSIZE, logsFile) != NULL)
|
|
++(*nbLigne);
|
|
|
|
/* Allocation de la mémoire en fonction du nombre de lignes */
|
|
*tabPoint = calloc(*nbLigne, sizeof(Point));
|
|
if(*tabPoint == NULL)
|
|
{
|
|
fprintf(stderr, "%s\n", strerror(errno));
|
|
return ALLOCATION_FAILURE;
|
|
}
|
|
|
|
rewind(logsFile);
|
|
|
|
// On met 'errno' à '0' car ce sera notre seul moyen de vérifier si 'strtol()' a bien fonctionné...
|
|
errno = 0;
|
|
|
|
/* Conversion du fichier en tableau de Points */
|
|
for(uint32_t i = 0; i < *nbLigne; ++i)
|
|
{
|
|
if(!convertLine(fgets(tmp, BUFSIZE, logsFile), &tabPoint[0][i]))
|
|
{
|
|
fprintf(stderr, "%s\n", strerror(errno));
|
|
return CORRUPTED_FILE;
|
|
}
|
|
}
|
|
|
|
if(fclose(logsFile) == EOF)
|
|
{
|
|
fprintf(stderr, "%s\n", strerror(errno));
|
|
}
|
|
|
|
return LOAD_SUCCESS;
|
|
}
|
|
|
|
|
|
bool convertLine(char *line, Point *point)
|
|
{
|
|
char *next = NULL;
|
|
|
|
next = strchr(line, ':') + 1;
|
|
point->date = (time_t)strtol(next, NULL, 10);
|
|
// En théorie, la valeur de 'errno' est censée avoir changée si une erreur est apparue...
|
|
if(errno != 0)
|
|
return false;
|
|
|
|
strcpy(line, next);
|
|
|
|
next = strchr(line, ':') + 1;
|
|
point->pos.lat = strtod(next, NULL);
|
|
if(point->pos.lat == 0)
|
|
return false;
|
|
|
|
strcpy(line, next);
|
|
|
|
next = strchr(line, ':') + 1;
|
|
point->pos.lon = strtod(next, NULL);
|
|
if(point->pos.lon == 0)
|
|
return false;
|
|
|
|
point->type = NONE;
|
|
|
|
return true;
|
|
}
|