mirror of
https://github.com/zeldaret/oot.git
synced 2024-12-19 17:08:09 +00:00
eadc477187
* Update makefiles * git subrepo clone git@github.com:EllipticEllipsis/fado.git tools/fado subrepo: subdir: "tools/fado" merged: "46c4d751a" upstream: origin: "git@github.com:EllipticEllipsis/fado.git" branch: "master" commit: "46c4d751a" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * git subrepo pull tools/fado subrepo: subdir: "tools/fado" merged: "88114ebce" upstream: origin: "git@github.com:EllipticEllipsis/fado.git" branch: "master" commit: "88114ebce" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * A few ideas for computing dependencies * Remove reserved identifiers from spec.h and util.h and add required headers * Fix a couple more headers * Program for reloc prerequisites * git subrepo pull tools/fado subrepo: subdir: "tools/fado" merged: "36a905f72" upstream: origin: "git@github.com:EllipticEllipsis/fado.git" branch: "master" commit: "36a905f72" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * Update makefile to make dependency files and use overlay's name * git subrepo pull tools/fado subrepo: subdir: "tools/fado" merged: "43c339a59" upstream: origin: "git@github.com:EllipticEllipsis/fado.git" branch: "master" commit: "43c339a59" git-subrepo: version: "0.4.3" origin: "https://github.com/ingydotnet/git-subrepo.git" commit: "2f68596" * Change awk to grep, delete ZAPD files, gitignore elf * Delete all the cfg files * Fix memory leaks * Rename and add coloured errors * Makefile tweaks - preprocess spec before grep - split order prerequisites via phony target to reduce dependency edges - remove `resources` target - remove separate overlays targets - use `$(SPEC)` throughout - change to using filenames of relocs for overlay names via `$*` - Rearrange targets to better reflect their categories * Update gitignore * Review * Add a check for the reloc file name * get_segment_by_name * get_stmt_id_by_stmt_name * Cleaning up * algorithm change * function rename * Fix typos Co-authored-by: angie <angheloalf95@gmail.com>
88 lines
2.0 KiB
C
88 lines
2.0 KiB
C
#include <errno.h>
|
|
#include <stdarg.h>
|
|
#include <stdio.h>
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "util.h"
|
|
|
|
// displays an error message and exits
|
|
void util_fatal_error(const char *msgfmt, ...)
|
|
{
|
|
va_list args;
|
|
|
|
fputs(ERRMSG_START, stderr);
|
|
|
|
va_start(args, msgfmt);
|
|
vfprintf(stderr, msgfmt, args);
|
|
va_end(args);
|
|
|
|
fputs(ERRMSG_END "\n", stderr);
|
|
|
|
exit(1);
|
|
}
|
|
|
|
// reads a whole file into memory, and returns a malloc'd pointer to the data.
|
|
void *util_read_whole_file(const char *filename, size_t *pSize)
|
|
{
|
|
FILE *file = fopen(filename, "rb");
|
|
uint8_t *buffer;
|
|
size_t size;
|
|
|
|
if (file == NULL)
|
|
util_fatal_error("failed to open file '%s' for reading: %s", filename, strerror(errno));
|
|
|
|
// get size
|
|
fseek(file, 0, SEEK_END);
|
|
size = ftell(file);
|
|
|
|
// allocate buffer
|
|
buffer = malloc(size + 1);
|
|
|
|
// read file
|
|
fseek(file, 0, SEEK_SET);
|
|
if (fread(buffer, size, 1, file) != 1)
|
|
util_fatal_error("error reading from file '%s': %s", filename, strerror(errno));
|
|
|
|
// null-terminate the buffer (in case of text files)
|
|
buffer[size] = 0;
|
|
|
|
fclose(file);
|
|
|
|
if (pSize != NULL)
|
|
*pSize = size;
|
|
return buffer;
|
|
}
|
|
|
|
// writes data to file
|
|
void util_write_whole_file(const char *filename, const void *data, size_t size)
|
|
{
|
|
FILE *file = fopen(filename, "wb");
|
|
|
|
if (file == NULL)
|
|
util_fatal_error("failed to open file '%s' for writing: %s", filename, strerror(errno));
|
|
|
|
if (fwrite(data, size, 1, file) != 1)
|
|
util_fatal_error("error writing to file '%s': %s", filename, strerror(errno));
|
|
|
|
fclose(file);
|
|
}
|
|
|
|
uint32_t util_read_uint32_be(const uint8_t *data)
|
|
{
|
|
return data[0] << 24
|
|
| data[1] << 16
|
|
| data[2] << 8
|
|
| data[3] << 0;
|
|
}
|
|
|
|
// writes a big-endian 32-bit integer
|
|
void util_write_uint32_be(uint8_t *data, uint32_t val)
|
|
{
|
|
data[0] = val >> 24;
|
|
data[1] = val >> 16;
|
|
data[2] = val >> 8;
|
|
data[3] = val >> 0;
|
|
}
|