smu: Minor error handeling changes
This commit is contained in:
parent
e195f586cd
commit
14f610e8af
1 changed files with 25 additions and 10 deletions
35
smu.c
35
smu.c
|
@ -16,6 +16,14 @@
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
#ifndef PACKAGE
|
||||||
|
#define PACKAGE "smu"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef VERSION
|
||||||
|
#define VERSION "0.0"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define CHARWIDTH 4
|
#define CHARWIDTH 4
|
||||||
#define LENGTH(x) sizeof(x) / sizeof(x[0])
|
#define LENGTH(x) sizeof(x) / sizeof(x[0])
|
||||||
#define ADDC(b, i, a) \
|
#define ADDC(b, i, a) \
|
||||||
|
@ -56,7 +64,7 @@ static int dounderline(const char *begin, const char *end, int newblock);
|
||||||
static void *ereallocz(void *p, size_t size);
|
static void *ereallocz(void *p, size_t size);
|
||||||
static void eprint(const char *format, ...);
|
static void eprint(const char *format, ...);
|
||||||
static void hprint(const char *begin, const char *end);
|
static void hprint(const char *begin, const char *end);
|
||||||
static void process(const char *begin, const char *end, int isblock);
|
static int process(const char *begin, const char *end, int isblock);
|
||||||
|
|
||||||
/* list of parsers */
|
/* list of parsers */
|
||||||
static Parser parsers[] = { dounderline, docomment, dolineprefix, dolist,
|
static Parser parsers[] = { dounderline, docomment, dolineprefix, dolist,
|
||||||
|
@ -123,14 +131,14 @@ char *read_file(const char *path, off64_t file_size)
|
||||||
char *buf = calloc(file_size + CHARWIDTH, sizeof(char));
|
char *buf = calloc(file_size + CHARWIDTH, sizeof(char));
|
||||||
|
|
||||||
if (!buf) {
|
if (!buf) {
|
||||||
perror("");
|
perror(PACKAGE);
|
||||||
close(fd);
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes = read(fd, buf, file_size);
|
bytes = read(fd, buf, file_size);
|
||||||
if (bytes != file_size) {
|
if (bytes != file_size) {
|
||||||
perror("");
|
perror(PACKAGE);
|
||||||
close(fd);
|
close(fd);
|
||||||
free(buf);
|
free(buf);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -676,7 +684,7 @@ void hprint(const char *begin, const char *end)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void process(const char *begin, const char *end, int newblock)
|
int process(const char *begin, const char *end, int newblock)
|
||||||
{
|
{
|
||||||
const char *q;
|
const char *q;
|
||||||
const char *p;
|
const char *p;
|
||||||
|
@ -687,11 +695,13 @@ void process(const char *begin, const char *end, int newblock)
|
||||||
if (newblock)
|
if (newblock)
|
||||||
while (*p == '\n')
|
while (*p == '\n')
|
||||||
if (++p == end)
|
if (++p == end)
|
||||||
return;
|
return 1;
|
||||||
affected = 0;
|
affected = 0;
|
||||||
for (i = 0; i < LENGTH(parsers) && !affected; i++)
|
for (i = 0; i < LENGTH(parsers) && !affected; i++)
|
||||||
affected = parsers[i](p, end, newblock);
|
affected = parsers[i](p, end, newblock);
|
||||||
p += abs(affected);
|
p += abs(affected);
|
||||||
|
if (affected == -1)
|
||||||
|
return 0;
|
||||||
if (!affected) {
|
if (!affected) {
|
||||||
if (nohtml)
|
if (nohtml)
|
||||||
hprint(p, p + 1);
|
hprint(p, p + 1);
|
||||||
|
@ -702,12 +712,13 @@ void process(const char *begin, const char *end, int newblock)
|
||||||
for (q = p; q != end && *q == '\n'; q++)
|
for (q = p; q != end && *q == '\n'; q++)
|
||||||
;
|
;
|
||||||
if (q == end)
|
if (q == end)
|
||||||
return;
|
return 1;
|
||||||
else if (p[0] == '\n' && p + 1 != end && p[1] == '\n')
|
else if (p[0] == '\n' && p + 1 != end && p[1] == '\n')
|
||||||
newblock = 1;
|
newblock = 1;
|
||||||
else
|
else
|
||||||
newblock = affected < 0;
|
newblock = affected < 0;
|
||||||
}
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
|
@ -743,7 +754,7 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
buffer = read_file(path, len);
|
buffer = read_file(path, len);
|
||||||
if (!buffer) {
|
if (!buffer) {
|
||||||
perror("");
|
perror(PACKAGE);
|
||||||
ret = EXIT_FAILURE;
|
ret = EXIT_FAILURE;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
@ -754,7 +765,7 @@ int main(int argc, char *argv[])
|
||||||
size_t buffer_size = 1024 * CHARWIDTH;
|
size_t buffer_size = 1024 * CHARWIDTH;
|
||||||
buffer = calloc(buffer_size + CHARWIDTH, sizeof(char));
|
buffer = calloc(buffer_size + CHARWIDTH, sizeof(char));
|
||||||
if (!buffer) {
|
if (!buffer) {
|
||||||
perror("");
|
perror(PACKAGE);
|
||||||
ret = EXIT_FAILURE;
|
ret = EXIT_FAILURE;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
@ -764,7 +775,7 @@ int main(int argc, char *argv[])
|
||||||
read_bytes = read(STDIN_FILENO, buffer, buffer_size);
|
read_bytes = read(STDIN_FILENO, buffer, buffer_size);
|
||||||
if (read_bytes <= 0) {
|
if (read_bytes <= 0) {
|
||||||
if (errno) {
|
if (errno) {
|
||||||
perror("");
|
perror(PACKAGE);
|
||||||
ret = EXIT_FAILURE;
|
ret = EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
@ -772,7 +783,11 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer[read_bytes] = '\0';
|
buffer[read_bytes] = '\0';
|
||||||
process(buffer, buffer + read_bytes, 1);
|
if (!process(buffer, buffer + read_bytes, 1)) {
|
||||||
|
ret = EXIT_FAILURE;
|
||||||
|
free(buffer);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exit:
|
exit:
|
||||||
|
|
Loading…
Add table
Reference in a new issue