Changed error value to be `const char *` insted of `size_t`

This commit is contained in:
Maciej Samborski 2024-09-23 18:42:50 +02:00
parent e64b9dd021
commit 80775164d7
3 changed files with 17 additions and 40 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
main

19
ehan.h
View File

@ -4,14 +4,15 @@
#include <stdbool.h> #include <stdbool.h>
#include <stddef.h> #include <stddef.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
typedef struct GenericReturn { typedef struct GenericReturn {
long double fp; long double fp;
void * val; void * val;
size_t err; const char * err;
} GenericReturn; } GenericReturn;
GenericReturn ehanError(size_t error); GenericReturn ehanError(const char * error);
#define ehanValue(v) _ehanValue((void *) v) #define ehanValue(v) _ehanValue((void *) v)
#define ehanValueFP(fp) _ehanValueFP((long double) fp) #define ehanValueFP(fp) _ehanValueFP((long double) fp)
GenericReturn _ehanValue(void * value); GenericReturn _ehanValue(void * value);
@ -19,8 +20,9 @@ GenericReturn _ehanValueFP(long double value);
#define resultGeneric(type, ret) (*(type *) (&ret.val)) #define resultGeneric(type, ret) (*(type *) (&ret.val))
#define resultFP(type, ret) ((type) (ret.fp)) #define resultFP(type, ret) ((type) (ret.fp))
#define resultError(ret) (ret.err)
const char * errorToString(const char * errorList[], size_t err); #define ehanCheck(ret) strlen(ret.err)
#define ILog(format, ...) \ #define ILog(format, ...) \
do { \ do { \
@ -56,7 +58,7 @@ GenericReturn _ehanValue(void * value)
{ {
return (GenericReturn) { return (GenericReturn) {
.val = value, .val = value,
.err = 0, .err = "",
}; };
} }
@ -65,11 +67,11 @@ GenericReturn _ehanValueFP(long double value)
return (GenericReturn) { return (GenericReturn) {
.fp = value, .fp = value,
.val = 0, .val = 0,
.err = 0, .err = "",
}; };
} }
GenericReturn ehanError(size_t error) GenericReturn ehanError(const char * error)
{ {
return (GenericReturn) { return (GenericReturn) {
.val = 0, .val = 0,
@ -77,11 +79,6 @@ GenericReturn ehanError(size_t error)
}; };
} }
const char * errorToString(const char * errorList[], size_t err)
{
return errorList[err - 1];
}
#endif // EHAN_IMPLEMENTATION #endif // EHAN_IMPLEMENTATION
#endif // EHAN_H_ #endif // EHAN_H_

View File

@ -1,27 +1,6 @@
#include <stdio.h>
#include <stdlib.h>
#define EHAN_IMPLEMENTATION #define EHAN_IMPLEMENTATION
#include "ehan.h" #include "ehan.h"
typedef enum errorEnum {
DUMB,
UGLY,
GREEDY,
ABRASIVE,
GRUMPY,
MOROSE,
} errorEnum;
static const char * errorList[] = {
"dumb error",
"ugly error",
"greedy error",
"abrasive error",
"grumpy error",
"morose error",
};
GenericReturn f() GenericReturn f()
{ {
return ehanValueFP(42.42f); return ehanValueFP(42.42f);
@ -34,15 +13,15 @@ GenericReturn g()
GenericReturn h() GenericReturn h()
{ {
return ehanError(ABRASIVE); return ehanError("Something went wrong!");
} }
int main(void) int main(void)
{ {
GenericReturn r = f(); GenericReturn r = f();
if (r.err > 0) if (ehanCheck(r))
{ {
ELog("FAILURE %s\n", errorToString(errorList, r.err)); ELog("FAILURE %s\n", resultError(r));
/* HANDLE ERROR */ /* HANDLE ERROR */
goto exit; goto exit;
} }
@ -50,19 +29,19 @@ int main(void)
ILog("SUCCESS: %.2f\n", resultFP(float, r)); ILog("SUCCESS: %.2f\n", resultFP(float, r));
r = g(); r = g();
if (r.err > 0) if (ehanCheck(r))
{ {
ELog("FAILURE %s\n", errorToString(errorList, r.err)); ELog("FAILURE %s\n", resultError(r));
/* HANDLE ERROR */ /* HANDLE ERROR */
goto exit; goto exit;
} }
ILog("SUCCESS: %s\n", resultGeneric(char *, r)); WLog("SUCCESS: %s\n", resultGeneric(char *, r));
r = h(); r = h();
if (r.err > 0) if (ehanCheck(r))
{ {
ELog("FAILURE %s\n", errorToString(errorList, r.err)); ELog("FAILURE %s\n", resultError(r));
/* HANDLE ERROR */ /* HANDLE ERROR */
goto exit; goto exit;
} }