Changed error value to be `const char *` insted of `size_t`
This commit is contained in:
parent
e64b9dd021
commit
80775164d7
|
@ -0,0 +1 @@
|
||||||
|
main
|
19
ehan.h
19
ehan.h
|
@ -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_
|
||||||
|
|
37
example.c
37
example.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue