/* Includes
*****************************************************************************/
+static void cleanup(void);
+#define CLEANUP_HOOK cleanup
#include <util.h>
#include <ncurses.h>
/* Declarations
*****************************************************************************/
static void setup(void);
-static void cleanup(void);
static void load(char* fname);
static void edit(void);
*****************************************************************************/
int main(int argc, char** argv)
{
+ atexit(cleanup);
setup();
if (argc > 1) {
load(argv[1]);
} else {
die("no filename provided");
}
- cleanup();
return EXIT_SUCCESS;
}
#include <stdbool.h>
#include <errno.h>
-/* Usefule Standard Functions */
+/* Useful Standard Functions */
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
/* Generic Death Function */
static void die(const char* msgfmt, ...)
{
- va_list args;
- va_start(args, msgfmt);
- fprintf(stderr, "Error: ");
- vfprintf(stderr, msgfmt, args);
- fprintf(stderr, "\n");
- va_end(args);
- exit(EXIT_FAILURE);
+ va_list args;
+ va_start(args, msgfmt);
+ #ifdef CLEANUP_HOOK
+ CLEANUP_HOOK();
+ #endif
+ fprintf(stderr, "Error: ");
+ vfprintf(stderr, msgfmt, args);
+ fprintf(stderr, "\n");
+ va_end(args);
+ exit(EXIT_FAILURE);
}
/* Signal Handling */
free(str);
return NULL;
}
- while(true) {
+ while (true) {
char ch = fgetc(input);
if (ch == EOF) break;
str[index++] = ch;