From 58cfb25971dfce4ff913b3d03a8c996024b53649 Mon Sep 17 00:00:00 2001
From: AnonymusRaccoon
Date: Mon, 9 Dec 2019 17:40:37 +0100
Subject: [PATCH] Adding float suppotr
---
Makefile | 10 +++++++---
include/xml_internal.h | 3 ++-
src/floatutils.c | 20 ++++++++++++++++++++
src/xmlget.c | 13 +++++++++++++
4 files changed, 42 insertions(+), 4 deletions(-)
create mode 100644 src/floatutils.c
diff --git a/Makefile b/Makefile
index cb20025..f336710 100644
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,8 @@ SRC = src/xmlparser.c \
src/xmlproperties.c \
src/rawnode.c \
src/xml_destroy.c \
- src/xmlget.c
+ src/xmlget.c \
+ src/floatutils.c
OBJ = $(SRC:%.c=%.o)
@@ -60,8 +61,11 @@ fclean: clean
re: fclean all
dbg: CFLAGS += -g
-dbg: fclean
-dbg: $(OBJ)
+dbg: re
+
+main-dbg: CFLAGS += -g
+main-dbg: fclean
+main-dbg: $(OBJ)
$(CC) -o $(FT) $(SRC) $(TEST_MAIN) $(CFLAGS) $(LDFLAGS)
.PHONY: all build clean fclean
diff --git a/include/xml_internal.h b/include/xml_internal.h
index 651e7ac..65ace57 100644
--- a/include/xml_internal.h
+++ b/include/xml_internal.h
@@ -16,4 +16,5 @@ char *trimstr(char *str);
int xml_getstringdata(node *n, char **nodestr);
int xml_checkclosing(node *n, char **nodestr);
dictionary *property_add(dictionary *list, dictionary *property);
-node *xml_parsenode(char **nodestr);
\ No newline at end of file
+node *xml_parsenode(char **nodestr);
+int get_int_size(int n);
\ No newline at end of file
diff --git a/src/floatutils.c b/src/floatutils.c
new file mode 100644
index 0000000..e4f59c3
--- /dev/null
+++ b/src/floatutils.c
@@ -0,0 +1,20 @@
+/*
+** EPITECH PROJECT, 2019
+** MUL_my_runner_2019
+** File description:
+** floatutils
+*/
+
+#include "my.h"
+
+int get_int_size(int n)
+{
+ int base_size = my_strlen("0123456789");
+ int i = 1;
+
+ while (n >= base_size) {
+ n /= base_size;
+ i++;
+ }
+ return (i);
+}
\ No newline at end of file
diff --git a/src/xmlget.c b/src/xmlget.c
index 10cb64b..ea13499 100644
--- a/src/xmlget.c
+++ b/src/xmlget.c
@@ -6,6 +6,7 @@
*/
#include "xml.h"
+#include "xml_internal.h"
#include "my.h"
#include
@@ -30,9 +31,21 @@ int xml_getintprop(node *n, const char *key)
float xml_getfloatprop(node *n, const char *key)
{
char *prop = xml_getproperty(n, key);
+ float nbr;
+ int deci;
if (!prop)
return (0);
+ for (int i = 0; prop[i]; i++) {
+ if (!is_num(prop[i]))
+ return (-1);
+ }
+ nbr = (float)my_getnbr(prop);
+ prop += get_int_size(nbr);
+ if (*prop) {
+ deci = my_getnbr(prop + 1);
+ nbr += deci / (float)(get_int_size(deci) + 1);
+ }
return (0);
}