feat: move file2char to library

This commit is contained in:
dancingCycle 2023-01-20 14:08:59 +01:00
parent cc9d6f3526
commit 4bda62f7d0
4 changed files with 116 additions and 101 deletions

87
file2char/file2char.c Normal file
View File

@ -0,0 +1,87 @@
/*to use exit*/
#include <stdlib.h>
/*to use *print**/
#include <stdio.h>
/*to user file2char*/
#include "file2char.h"
int convert_file2char(char const* path, char **buf){
/*declarations*/
FILE *fp;
long lSize;
/*TODO Check path for validity!*/
/*fopen()
*filename
*mode
*return: set errno value in error case
*/
fp=fopen(path,"r");
if(fp){
fprintf(stdout,"file opened.\n");
/*set offset to file end*/
/*fseek()
*stream
*offset
*origin
*/
fseek(fp,0L,SEEK_END);
if (ferror(fp)){
printf ("Error seeking file\n");
}
/*get file size*/
lSize = ftell( fp );
fprintf(stdout,"lSize: %ld.\n",lSize);
/*set offset to file start*/
fseek(fp,0,SEEK_SET);
if (ferror(fp)){
printf ("Error seeking file\n");
}
/*allocate memory for entire content + null termination*/
*buf=(char *)malloc((lSize+1)*sizeof(char));
if(!*buf){
fclose(fp);
fputs("Error allocating memory",stderr);
exit(EXIT_FAILURE);
}
fprintf(stdout,"mem allocated.\n");
/*copy file into buffer*/
/*fread()
*ptr
*size
*count
*stream
*/
if( 1!=fread(*buf,lSize,1,fp)){
fclose(fp);
free(*buf);
fputs("Error reading entire file",stderr);
exit(EXIT_FAILURE);
}
fprintf(stdout,"file read.\n");
/*close file*/
if(EOF==fclose(fp)){
free(*buf);
exit(EXIT_FAILURE);
}
fprintf(stdout,"file closed.\n");
(*buf)[lSize] = '\0';
fprintf(stdout,"mem null terminated.\n");
printf("buffer = %s\n", *buf);
}else{
perror(path);
exit(EXIT_FAILURE);
}
/*done*/
return 0;
}

16
file2char/file2char.h Normal file
View File

@ -0,0 +1,16 @@
/*We can use CPP tricks to avoid parsing the same header file more than once*/
#ifndef FILE2CHAR_H
#define FILE2CHAR_H
/*
* convert_file2char reads the file identified by 'path' into a character buffer
* pointed at by 'buf'.
* On success, 0 is returned.
* On failure, exit(EXIT_FAILURE) is returned.
*
* WARNING: convert_file2char malloc()s memory to '*buf' which must be freed by
* the caller.
*/
int convert_file2char(char const* path, char **buf);
#endif /* FILE2CHAR_H */

View File

@ -2,105 +2,11 @@
#include <stdlib.h>
/*to use *print**/
#include <stdio.h>
/*
* load_file reads the file identified by 'path' into a character buffer
* pointed at by 'buf'.
* On success, the size of the file is returned.
* On failure, exit(EXIT_FAILURE) is returned and.
*
* WARNING: load_file malloc()s memory to '*buf' which must be freed by
* the caller.
*/
int load_file(char const* path, char **buf){
/*declarations*/
FILE *fp;
long lSize;
/*fopen()
*filename
*mode
*return: set errno value in error case
*/
fp=fopen(path,"r");
if(fp){
fprintf(stdout,"file opened.\n");
/*set offset to file end*/
/*fseek()
*stream
*offset
*origin
*/
fseek(fp,0L,SEEK_END);
if (ferror(fp)){
printf ("Error seeking file\n");
}
/*get file size*/
lSize = ftell( fp );
fprintf(stdout,"lSize: %ld.\n",lSize);
/*set offset to file start*/
fseek(fp,0,SEEK_SET);
if (ferror(fp)){
printf ("Error seeking file\n");
}
/*allocate memory for entire content + null termination*/
*buf=(char *)malloc((lSize+1)*sizeof(char));
if(!*buf){
fclose(fp);
fputs("Error allocating memory",stderr);
exit(EXIT_FAILURE);
}
fprintf(stdout,"mem allocated.\n");
/*copy file into buffer*/
/*fread()
*ptr
*size
*count
*stream
*/
if( 1!=fread(*buf,lSize,1,fp)){
fclose(fp);
free(*buf);
fputs("Error reading entire file",stderr);
exit(EXIT_FAILURE);
}
fprintf(stdout,"file read.\n");
/*close file*/
if(EOF==fclose(fp)){
free(*buf);
exit(EXIT_FAILURE);
}
fprintf(stdout,"file closed.\n");
(*buf)[lSize] = '\0';
fprintf(stdout,"mem null terminated.\n");
/*TODO Cleanup debugging!*/
/*
for (int i = 0; i < lSize; i++) {
printf("buffer[%d] == %c\n", i, buffer[i]);
}
*/
printf("buffer = %s\n", *buf);
}else{
perror(path);
exit(EXIT_FAILURE);
}
/*done*/
return lSize;
}
/*to user file2char*/
#include "file2char.h"
int main(int argc, char** argv){
/*declaration*/
int fileSize;
char *buf;
fprintf(stdout,"main() Started...\n");
@ -109,11 +15,14 @@ int main(int argc, char** argv){
fprintf(stderr, "Usage: %s <file path>\n", argv[0]);
exit(EXIT_FAILURE);
}
fprintf(stdout,"main() argv[1]: %s.\n",argv[1]);
fileSize = load_file(argv[1], &buf);
if(!convert_file2char(argv[1], &buf)){
fprintf(stderr,"main() Error calling convert_file2char().\n");
}else{
fprintf(stdout,"main() convert_file2char() done.\n");
}
free(buf);
fprintf(stdout,"main() fileSize: %d.\n",fileSize);
fprintf(stdout,"main() Done.\n");
return 0;
}

View File

@ -2,7 +2,7 @@
# command
#
RM = /bin/rm -f
OBJ = main.o
OBJ = main.o file2char.o
EXE = main
CC = /usr/bin/gcc
CFLAGS = -Wall
@ -12,7 +12,10 @@ all: $(EXE)
$(EXE): $(OBJ)
$(CC) $(CFLAGS) $(OBJ) -o $(EXE)
#
main.o: main.c
file2char.o: file2char.c file2char.h
$(CC) -c file2char.c -o file2char.o
#
main.o: main.c file2char.h
$(CC) -c main.c -o main.o
#
clean: