← index
object/object.c
Source: C2x.Examples/src/object/object.c
#include "object.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

bool object_init(MXObject *obj, const char *name) {
    if (obj == nullptr || name == nullptr)
        return false;
    char *temp;
    size_t len = strlen(name);
    temp = malloc(len + 1);
    if (temp == nullptr)
        return false;
    memcpy(temp, name, len + 1);
    free(obj->name);
    obj->name = temp;
    return true;
}

void object_say_hello(MXObject *obj, const char *message) {
    if (obj == nullptr || obj->name == nullptr || message == nullptr)
        return;
    printf("%s: %s\n", obj->name, message);
}

bool init_object(MXObject **obj) {
    if (obj == nullptr)
        return false;

    if (*obj != nullptr) {
        fprintf(stderr, "Error already initalized.\n");
        return false;
    }

    MXObject *o = malloc(sizeof(MXObject));
    if (o == nullptr)
        return false;
    memset(o, 0, sizeof(MXObject));
    o->init = object_init;
    o->say_hello = object_say_hello;
    *obj = o;
    return true;
}

void release_object(MXObject **obj) {
    if (obj != nullptr && *obj != nullptr) {
        free((*obj)->name);
        (*obj)->name = nullptr;
        free(*obj);
        *obj = nullptr;
    }
}