Path: blob/a-new-beginning/SharedDependencies/Sources/glib/glib.c
2 views
//1// Created by nhp on 14-05-24.2//34#include <string.h>5#include <stdlib.h>6#include <math.h>7#include <stdio.h>8#include <stdarg.h>910#include "glib.h"1112GString* g_string_new(gchar* initial) {13GString* str = g_new0(GString, 1);1415if (initial != NULL) {16int len = strlen(initial);17gchar* p = malloc(len);18memcpy(p, initial, len);19str->str = p;20str->len = len;21str->allocated_len = len;22} else {23gchar* p = malloc(64);24str->str = p;25str->len = 0;26str->allocated_len = 64;27}28return str;29}3031gchar* g_string_free(GString* str, gboolean free_segment) {32char* seg = str->str;33free(str);34if (free_segment) {35free(str->str);36return NULL;37}38return seg;39}4041void g_string_append_printf(GString* str, const gchar* format, ...) {42va_list args;43va_start(args, format);44int need_len = vsnprintf(NULL, 0, format, args);45va_end(args);4647if (str->len + need_len + 1 < str->allocated_len) {48gsize new_len = str->len + need_len + 1;49gchar* newp = realloc(str->str, new_len);50str->str = newp;51str->allocated_len = new_len;52str->len = new_len - 1;53}5455gchar* temp = malloc(need_len + 1);56va_start(args, format);57vsnprintf(temp, need_len, format, args);58va_end(args);5960strcat(str->str, temp);61free(temp);62}6364gchar* g_strstr_len(const gchar* haystack, int len, const gchar* needle) {65if (len == -1) return strstr(haystack, needle);66size_t needle_len = strlen(needle);67for (int i = 0; i < len; i++) {68size_t found = 0;69for (int j = i; j < len; j++) {70if (haystack[j] == needle[j - i]) found++;71else break;72if (found == needle_len) return (gchar*) haystack + j;73}74}75return NULL;76}7778gchar* g_strdup(const gchar* str) {79if (str == NULL) return NULL;80else return strdup(str);81}8283int g_strv_length(GStrv strings) {84gint count = 0;85while (strings[count])86count++;87return count;88}8990void g_strfreev(GStrv strings) {91for (int i = 0; strings[i] != NULL; i++) {92free(strings[i]);93}94}9596// This is not good but all we're using slirp for is beaming pokemans over the internet so it's probably okay97gint g_rand_int_range(GRand* grand, gint min, gint max) {98double r = (double) rand();99double range = (double) (max - min);100double r2 = (r / (double) RAND_MAX) * range;101return MIN(max, ((int) r2) + min);102}103104GRand* g_rand_new() {105return malloc(sizeof(GRand));106}107108void g_rand_free(GRand* rand) {109free(rand);110}111112void g_error_free(GError* error) {113free(error);114}115116gboolean g_shell_parse_argv(const gchar* command_line, gint* argcp, gchar*** argvp, GError** error) {117const gchar* message = "Unimplemented.";118GError* err = malloc(sizeof(GError));119err->message = message;120*error = err;121return false;122}123124gboolean g_spawn_async_with_fds(const gchar *working_directory, gchar **argv,125gchar **envp, GSpawnFlags flags,126GSpawnChildSetupFunc child_setup,127gpointer user_data, GPid *child_pid, gint stdin_fd,128gint stdout_fd, gint stderr_fd, GError **error)129{130return false;131}132133134