Extract file IO ops into separate file
This commit is contained in:
@@ -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
13
include/file_io.h
Normal 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
53
src/file_io.c
Normal 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);
|
||||
}
|
||||
}
|
||||
50
src/main.c
50
src/main.c
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user