remove previous work on mm(1)
This commit is contained in:
parent
b31e066bd5
commit
bdd95bdf8e
95
src/mm.c
95
src/mm.c
@ -1,95 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "libmm.h"
|
||||
|
||||
#define STDIN_NAME "<stdin>"
|
||||
#define STDOUT_NAME "<stdout>"
|
||||
|
||||
enum error{ /* possible errors */
|
||||
FILE_ACCESS_ERROR,
|
||||
REALLOC_ERROR
|
||||
};
|
||||
|
||||
void
|
||||
error(char *argv0, char *file_name, enum error errcode){
|
||||
switch(errcode){
|
||||
case FILE_ACCESS_ERROR:
|
||||
fprintf(stderr, "%s: %s: cannot open file\n", argv0, file_name);
|
||||
break;
|
||||
case REALLOC_ERROR:
|
||||
fprintf(stderr, "%s: error reallocating array\n", argv0);
|
||||
break;
|
||||
}
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[]){
|
||||
char *file_name;
|
||||
FILE **input = (FILE **)malloc(sizeof(FILE*));
|
||||
FILE **output = (FILE **)malloc(sizeof(FILE*));
|
||||
int i;
|
||||
size_t inputc = 1;
|
||||
size_t outputc = 1;
|
||||
*input = NULL;
|
||||
*output = NULL;
|
||||
|
||||
/* messy argparsing, fix me to use POSIX getopt */
|
||||
for(i = 1; i < argc; ++i){
|
||||
if(!strcmp(argv[i++], "-i")){
|
||||
if(i == argc){
|
||||
fprintf(stderr, "%s: Missing option argument for \"-i\"\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
file_name = argv[i];
|
||||
input[inputc-1] = fopen(file_name, "r");
|
||||
if(input[inputc-1] == NULL){
|
||||
free(input);
|
||||
free(output);
|
||||
error(argv[0], file_name, FILE_ACCESS_ERROR);
|
||||
}
|
||||
/* in one go, increment inputc, reallocate the input array, and set the new space in the array to NULL */
|
||||
if((input = realloc(input, sizeof(FILE*) * (++inputc))) == NULL){
|
||||
free(output);
|
||||
error(argv[0], file_name, REALLOC_ERROR);
|
||||
}
|
||||
input[inputc-1] = NULL;
|
||||
}else if(!strcmp(argv[i++], "-o")){
|
||||
if(i == argc){
|
||||
fprintf(stderr, "%s: Missing option argument for \"-o\"\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
file_name = argv[i];
|
||||
output[outputc-1] = fopen(file_name, "r");
|
||||
if(input[outputc-1] == NULL){
|
||||
free(input);
|
||||
free(output);
|
||||
error(argv[0], file_name, FILE_ACCESS_ERROR);
|
||||
}
|
||||
if((output = realloc(output, sizeof(FILE*) * (++outputc))) == NULL){
|
||||
free(input);
|
||||
error(argv[0], file_name, REALLOC_ERROR);
|
||||
}
|
||||
output[outputc-1] = NULL;
|
||||
}else{
|
||||
fprintf(stderr, "%s: %s: Unrecognized option.\n", argv[0], argv[i]);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* default to stdin/stdout */
|
||||
if(*input == NULL){
|
||||
*input = stdout;
|
||||
++inputc;
|
||||
}
|
||||
if(*output = NULL){
|
||||
*output = stdout;
|
||||
++outputc;
|
||||
}
|
||||
|
||||
for(i = 0; i < inputc; ++i)
|
||||
tee(input[inputc], output, outputc);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user