diff --git a/include/openmg/util/string.h b/include/openmg/util/string.h new file mode 100644 index 0000000..4fde4e4 --- /dev/null +++ b/include/openmg/util/string.h @@ -0,0 +1,17 @@ +#pragma once +#include + +G_BEGIN_DECLS; + +#define MG_TYPE_UTIL_STRING mg_util_string_get_type() +G_DECLARE_FINAL_TYPE (MgUtilString, mg_util_string, MG, UTIL_STRING, GObject) + +MgUtilString *mg_util_string_new (); +char * +mg_util_string_alloc_string(MgUtilString *self, size_t len); +void +mg_util_string_copy_substring(MgUtilString *self, + const char *origin, char *dest, size_t dest_len, size_t start, + size_t len); + +G_END_DECLS diff --git a/src/util/string.c b/src/util/string.c new file mode 100644 index 0000000..662f3ea --- /dev/null +++ b/src/util/string.c @@ -0,0 +1,48 @@ +#include + +#include + +#include + +struct _MgUtilString { + GObject parent_instance; +}; + +G_DEFINE_TYPE (MgUtilString, mg_util_string, G_TYPE_OBJECT) + +static void +mg_util_string_class_init (MgUtilStringClass *class) { +} + +static void +mg_util_string_init (MgUtilString *class) { +} + +void +mg_util_string_copy_substring(MgUtilString *self, + const char *origin, char *dest, size_t dest_len, size_t start, + size_t len) { + size_t copying_offset = 0; + while (copying_offset < len) { + if (!(start+copying_offset <=dest_len)) { + fprintf(stderr, "Read attempt out of bounds.%ld %ld %ld\n", dest_len, start, len); + break; + } + dest[copying_offset] = origin[start+copying_offset]; + copying_offset++; + } + dest[len] = '\0'; +} + +char * +mg_util_string_alloc_string(MgUtilString *self, size_t len) { + char * return_value = NULL; + return g_malloc (len + 1 * sizeof *return_value); +} + +MgUtilString * +mg_util_string_new () { + MgUtilString *self = NULL; + self = MG_UTIL_STRING ((g_object_new (MG_TYPE_UTIL_STRING, NULL))); + return self; +}