summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Gediminas Jakutis <gediminas@varciai.lt> 2020-03-02 21:42:46 +0200
committerGravatar Gediminas Jakutis <gediminas@varciai.lt> 2020-03-02 21:42:46 +0200
commit9eb76eda865dc4f82fd53223e5c557f707b569b9 (patch)
tree6afe8364dd57c0f00a550c6ab7ef80383748b8c8
parentb6fe7f8d9ade5e1b665bcf2cddb145fd2e0fde57 (diff)
downloadalgos-ld1-9eb76eda865dc4f82fd53223e5c557f707b569b9.tar.gz
algos-ld1-9eb76eda865dc4f82fd53223e5c557f707b569b9.tar.bz2
algos-ld1-9eb76eda865dc4f82fd53223e5c557f707b569b9.zip
begin macrofy error testing.
Signed-off-by: Gediminas Jakutis <gediminas@varciai.lt>
-rw-r--r--src/defs.h11
-rw-r--r--src/io.c85
-rw-r--r--src/main.c12
3 files changed, 29 insertions, 79 deletions
diff --git a/src/defs.h b/src/defs.h
index e6f1823..1ad2d72 100644
--- a/src/defs.h
+++ b/src/defs.h
@@ -5,6 +5,17 @@
#include <stdint.h>
#include <sys/types.h>
+#define try_s(a,l) do {\
+ if(a) {\
+ goto l;\
+ }} while (0);
+
+#define try(a,l,e) do {\
+ if(a) {\
+ ret = e;\
+ goto l;\
+ }} while (0);
+
/* for array implementation */
struct entry {
uint64_t val;
diff --git a/src/io.c b/src/io.c
index a67c230..04f53b1 100644
--- a/src/io.c
+++ b/src/io.c
@@ -20,10 +20,7 @@ int stream_open(struct stream * const in, const struct settings * const s)
{
int ret = 0;
- if (!in || in->fd > 0 || !in->name || !s) {
- ret = EINVAL;
- goto err;
- }
+ try(!in || in->fd > 0 || !in->name || !s, err, EINVAL);
if (in->out == 1) {
ret = stream_open_out(in, s);
@@ -41,10 +38,7 @@ int stream_close(struct stream * const in)
{
int ret = 0;
- if (!in || in->fd < 0) {
- ret = EINVAL;
- goto early_err;
- }
+ try(!in || in->fd < 0, early_err, EINVAL);
if (!in->out) {
goto out;
@@ -66,11 +60,7 @@ int stream_close(struct stream * const in)
}
}
- if (linkat(AT_FDCWD, path, AT_FDCWD, in->name, AT_SYMLINK_FOLLOW)) {
- ret = errno;
- /* TODO: error message */
- goto err;
- }
+ try(linkat(AT_FDCWD, path, AT_FDCWD, in->name, AT_SYMLINK_FOLLOW), err, errno);
} else {
ret = EINVAL;
goto err;
@@ -116,40 +106,17 @@ static int stream_open_out(struct stream * const in, const struct settings * con
dname = strdup(tmp[1]);
free(tmp[0]);
- if (stat(dname, &st)) {
- ret = errno;
- /* TODO: error message */
- goto err;
- }
-
- if(!(st.st_mode & S_IFDIR)) {
- ret = EINVAL;
- /* TODO: error message */
- goto err;
- }
+ try(stat(dname, &st), err, errno);
+ try(!(st.st_mode & S_IFDIR), err, EINVAL); /* TODO: err msg */
if (!stat(in->name, &st)) {
- if (!(st.st_mode & S_IFREG)) {
- ret = EINVAL;
- /* TODO: error message */
- goto err;
- }
+ try(!(st.st_mode & S_IFREG), err, EINVAL); /* TODO: err msg */
mode = st.st_mode;
}
in->fd = open(dname, O_TMPFILE | O_WRONLY, mode);
-
- if (in->fd < 0) {
- ret = errno;
- /* TODO: error message */
- goto err;
- }
-
- if (ftruncate(in->fd, s->stride * in->n)) {
- ret = errno;
- /* TODO: error message */
- goto err;
- }
+ try(in->fd < 0, err, errno); /* TODO: err msg */
+ try(ftruncate(in->fd, s->stride * in->n), err, errno); /* TODO: err msg */
err:
free(dname);
@@ -161,25 +128,11 @@ static int stream_open_in(struct stream * const in, const struct settings * cons
struct stat st;
int ret = 0;
- if (stat(in->name, &st)) {
- ret = errno;
- /* TODO: error message */
- goto err;
- } else if (!(st.st_mode & S_IFREG) || !st.st_size || (st.st_size % s->stride)) {
- ret = EINVAL;
- /* TODO: error message */
- goto err;
- } else {
- in->n = st.st_size / s->stride;
- }
-
+ try(stat(in->name, &st), err, errno); /* TODO: err msg */
+ try(!(st.st_mode & S_IFREG) || !st.st_size || (st.st_size % s->stride), err, EINVAL); /* TODO: err msg */
+ in->n = st.st_size / s->stride;
in->fd = open(in->name, O_RDONLY | O_NOATIME);
-
- if (in->fd < 0) {
- ret = errno;
- /* TODO: error message */
- goto err;
- }
+ try(in->fd < 0, err, errno); /* TODO: err msg */
err:
return ret;
@@ -190,19 +143,9 @@ static int stream_open_special(struct stream * const in)
struct stat st;
int ret = 0;
- if (stat(in->name, &st)) {
- ret = errno;
- /* TODO: error message */
- goto err;
- }
-
+ try(stat(in->name, &st), err, errno); /* TODO: err msg */
in->fd = open(in->name, O_RDONLY | O_NOATIME);
-
- if (in->fd < 0) {
- ret = errno;
- /* TODO: error message */
- goto err;
- }
+ try(in->fd < 0, err, errno); /* TODO: err msg */
err:
return ret;
diff --git a/src/main.c b/src/main.c
index 56c7791..0d9109f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -4,6 +4,7 @@
#include <stdio.h>
#include <string.h>
#include "io.h"
+#include "defs.h"
static const unsigned int FLAG_DATA_FORMAT = (1 << 0);
static const unsigned int FLAG_DATA_ACCESS = (1 << 1);
@@ -22,9 +23,7 @@ int main(int argc, char **argv)
{
int ret = 0;
- if ((ret = parseargs(argc, argv, &settings))) {
- goto out;
- }
+ try_s((ret = parseargs(argc, argv, &settings)), out);
if (settings.opmode == mode_generate) {
file_in.name = randfile;
@@ -36,11 +35,8 @@ int main(int argc, char **argv)
}
file_out.name = settings.fileout ? settings.fileout : settings.filein;
-
- if ((ret = stream_open(&file_in, &settings)) ||
- (ret = stream_open(&file_out, &settings))) {
- goto out;
- }
+ try_s(( ret = stream_open(&file_in, &settings)) ||
+ (ret = stream_open(&file_out, &settings)), out);
out:
stream_close(&file_in);