59 lines
1.2 KiB
C
59 lines
1.2 KiB
C
#include "link.h"
|
|
#include <errno.h>
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
char* link_strdup(const char* str)
|
|
{
|
|
size_t len = strlen(str);
|
|
char* val = calloc(len + 1, sizeof(char));
|
|
strncpy(val, str, len);
|
|
return val;
|
|
}
|
|
|
|
FILE* open_output_file(const char* filename)
|
|
{
|
|
FILE* fp = fopen(filename, "wb");
|
|
if (!fp) {
|
|
fprintf(stderr,
|
|
"error: could not open output file '%s' for writing: %s\n",
|
|
filename,
|
|
strerror(errno));
|
|
return NULL;
|
|
}
|
|
return fp;
|
|
}
|
|
|
|
FILE* open_input_file(const char* filename)
|
|
{
|
|
FILE* fp = fopen(filename, "rb");
|
|
if (!fp) {
|
|
fprintf(stderr,
|
|
"error: could not open input file '%s' for reading: %s\n",
|
|
filename,
|
|
strerror(errno));
|
|
return NULL;
|
|
}
|
|
return fp;
|
|
}
|
|
|
|
const char* file_iter_next(FileIter* iter)
|
|
{
|
|
while (iter->files) {
|
|
const char* arg = iter->argv[iter->argc];
|
|
iter->argc += 1;
|
|
if (strcmp(arg, "-o") == 0) {
|
|
iter->argc += 1;
|
|
continue;
|
|
} else if (strcmp(arg, "-p") == 0) {
|
|
iter->argc += 1;
|
|
continue;
|
|
}
|
|
iter->files -= 1;
|
|
return arg;
|
|
}
|
|
return NULL;
|
|
}
|