From 20f27c7a9ff5700ec6f4bbfdcd31a19ee12b85ed Mon Sep 17 00:00:00 2001 From: twoneis Date: Mon, 28 Apr 2025 12:56:20 +0200 Subject: [PATCH] nicer error handling --- code/leak.c | 65 +++++++++++++++++++++++------------------------------ 1 file changed, 28 insertions(+), 37 deletions(-) diff --git a/code/leak.c b/code/leak.c index 9418192ca..7a2fa8bc0 100644 --- a/code/leak.c +++ b/code/leak.c @@ -19,6 +19,28 @@ int spray[SPRAY][2]; int pipes[PIPES][2]; char buffer[0x100]; +void +error(char *origin) +{ + switch (errno) { + case EFAULT: + printf("%s: EFAULT\n", origin); + break; + case EINVAL: + printf("%s: EINVAL\n", origin); + break; + case EMFILE: + printf("%s: EMFILE\n", origin); + break; + case ENFILE: + printf("%s: ENFILE\n", origin); + break; + default: + printf("%s: unknown\n", origin); + } + exit(-1); +} + extern inline size_t rdtsc_begin(void) { @@ -50,45 +72,14 @@ main(void) printf("main: spray to reduce TLB noise part 1: %u objects\n", SPRAY / 2); for (size_t i = 0; i < SPRAY / 2; i++) { - int ret; - ret = pipe2(spray[i], O_NONBLOCK); - if (ret < 0) { - switch (errno) { - case EFAULT: - printf( - "main: error: object %lu pipe2: EFAULT\n", - i); - break; - case EINVAL: - printf( - "main: error: object %lu pipe2: EINVAL\n", - i); - break; - case EMFILE: - printf( - "main: error: object %lu pipe2: EMFILE\n", - i); - break; - case ENFILE: - printf( - "main: error: object %lu pipe2: ENFILE\n", - i); - break; - default: - printf("main: error: object %lu pipe2: %i\n", i, - errno); - } - exit(-1); + if (pipe2(spray[i], O_NONBLOCK) < 0) { + error("main: spray one: pipe2"); } - ret = fcntl(spray[i][0], F_SETPIPE_SZ, 8192); - if (ret < 0) { - printf("main: error: fcntl: object %lu\n", i); - exit(-1); + if (fcntl(spray[i][0], F_SETPIPE_SZ, 8192) < 0) { + error("main: spray one: fcntl"); } - ret = write(spray[i][1], buffer, 8); - if (ret < 0) { - printf("main: error: write: object %lu\n", i); - exit(-1); + if (write(spray[i][1], buffer, 8) < 0) { + error("main: spray one: write"); } }