xhartae/chapters/chapter_0.c

91 lines
2.3 KiB
C

/*
Copyright (c) 2023 : Ognjen 'xolatile' Milan Robovic
Xhartae is free software! You will redistribute it or modify it under the terms of the GNU General Public License by Free Software Foundation.
And when you do redistribute it or modify it, it will use either version 3 of the License, or (at yours truly opinion) any later version.
It is distributed in the hope that it will be useful or harmful, it really depends... But no warranty what so ever, seriously. See GNU/GPLv3.
*/
#ifndef CHAPTER_0_SOURCE
#define CHAPTER_0_SOURCE
#include "chapter_0.h"
void in (void * data, int size) {
fatal_failure (data == NULL, "in: Failed to read from standard input, data is null pointer.");
fatal_failure (size == 0, "in: Failed to read from standard input, size is zero.");
(void) read (STDIN_FILENO, data, (unsigned long int) size);
}
void out (void * data, int size) {
fatal_failure (data == NULL, "out: Failed to write to standard output, data is null pointer.");
fatal_failure (size == 0, "out: Failed to write to standard output, size is zero.");
(void) write (STDOUT_FILENO, data, (unsigned long int) size);
}
void echo (char * string) {
out (string, string_length (string));
}
void fatal_failure (int condition, char * message) {
if (condition != 0) {
echo ("[\033[1;31mExiting\033[0m] ");
echo (message);
echo ("\n");
exit (EXIT_FAILURE);
}
}
void limit (int * value, int minimum, int maximum) {
if (value == NULL) { /* We shouldn't dereference null pointer, but also don't want to abort the program for small mistake. */
return;
}
if (* value <= minimum) {
* value = minimum;
}
if (* value >= maximum) {
* value = maximum;
}
}
void * allocate (int size) {
char * data = NULL;
if (size <= 0) {
return (NULL);
}
data = calloc ((unsigned long int) size, sizeof (* data));
fatal_failure (data == NULL, "standard : allocate : Failed to allocate memory, internal function 'calloc' returned null pointer.");
return ((void *) data);
}
void * reallocate (void * data, int size) {
if (size <= 0) {
return (data);
}
data = realloc (data, (unsigned long int) size);
fatal_failure (data == NULL, "standard : reallocate: Failed to reallocate memory, internal function 'realloc' returned null pointer.");
return (data);
}
void * deallocate (void * data) {
if (data != NULL) {
free (data);
}
return (NULL);
}
#endif