Extract file IO ops into separate file

This commit is contained in:
Aaron Helton
2019-10-17 19:04:45 -04:00
parent e2f29e8e33
commit e1a79cd536
4 changed files with 68 additions and 50 deletions

View File

@@ -7,6 +7,6 @@ add_executable(NameSort src/main.c
src/name_string.c
src/string_vector.c
include/name_string.h
include/string_vector.h)
include/string_vector.h include/file_io.h src/file_io.c)
target_include_directories(NameSort PRIVATE ${CMAKE_SOURCE_DIR}/include)

13
include/file_io.h Normal file
View File

@@ -0,0 +1,13 @@
//
// Created by Aargo on 10/17/2019.
//
#ifndef NAMESORT_FILE_IO_H
#define NAMESORT_FILE_IO_H
#include <string_vector.h>
char *read_line(FILE *file, int *eof_reached);
void read_file_into_vector(FILE *file, string_vector *vector);
#endif //NAMESORT_FILE_IO_H

53
src/file_io.c Normal file
View File

@@ -0,0 +1,53 @@
#include <stdio.h>
#include <stdlib.h>
#include <file_io.h>
char *read_line(FILE *file, int *eof_reached)
{
char *lineBuffer = malloc(sizeof(char) * MAX_STR_SIZE + 1);
int ch = getc(file);
int count = 0;
while((ch != '\n') && (ch != EOF))
{
if(count == MAX_STR_SIZE)
{
fprintf(stderr,
"Encounted name that is too long. Max name length is %d!\n",
MAX_STR_SIZE);
exit(2);
}
lineBuffer[count] = (char)ch;
count++;
ch = getc(file);
}
if(ch == EOF)
{
*eof_reached = 1;
}
lineBuffer[count] = '\0';
return lineBuffer;
}
void read_file_into_vector(FILE *file, string_vector *vector)
{
if(!file || !vector)
{
fprintf(stderr, "Invalid File Or Memory Error\n");
return;
}
int eof_reached = 0;
while(!eof_reached)
{
char *line = read_line(file, &eof_reached);
string *str = strip(create_from_cstr(line));
free(line);
if(str->len == 0)
{
destroy_string(str);
continue;
}
vector_add(vector, str);
}
}

View File

@@ -1,5 +1,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <file_io.h>
#include <name_string.h>
#include <string_vector.h>
@@ -31,55 +32,6 @@ void perform_length_alphabet_sort(string_vector *vector)
qsort((void *) vector->array, vector->size, sizeof(string *), compare);
}
char *read_line(FILE *file, int *eof_reached)
{
char *lineBuffer = malloc(sizeof(char) * MAX_STR_SIZE + 1);
int ch = getc(file);
int count = 0;
while((ch != '\n') && (ch != EOF))
{
if(count == MAX_STR_SIZE)
{
fprintf(stderr,
"Encounted name that is too long. Max name length is %d!\n",
MAX_STR_SIZE);
exit(2);
}
lineBuffer[count] = (char)ch;
count++;
ch = getc(file);
}
if(ch == EOF)
{
*eof_reached = 1;
}
lineBuffer[count] = '\0';
return lineBuffer;
}
void read_file_into_vector(FILE *file, string_vector *vector)
{
if(!file || !vector)
{
fprintf(stderr, "Invalid File Or Memory Error\n");
return;
}
int eof_reached = 0;
while(!eof_reached)
{
char *line = read_line(file, &eof_reached);
string *str = strip(create_from_cstr(line));
free(line);
if(str->len == 0)
{
destroy_string(str);
continue;
}
vector_add(vector, str);
}
}
int main(int argc, char **argv)
{
if(argc < 2)