summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKatolaZ <katolaz@freaknet.org>2019-08-05 08:06:19 +0100
committerKatolaZ <katolaz@freaknet.org>2019-08-05 08:06:19 +0100
commit9127db5e322c1b0cd57adf90e8cfefad66020fe2 (patch)
treea654d8c13225cb91a22d34626047a5c9eb24fa4f
parent6bf74b8e63315aeeac6fe4307e9e2679d334aca3 (diff)
remove atexit and replace exit() with cleanup()
-rw-r--r--gramscii.c11
-rw-r--r--gramscii.h2
-rw-r--r--lineset.c8
-rw-r--r--screen.c2
4 files changed, 10 insertions, 13 deletions
diff --git a/gramscii.c b/gramscii.c
index 9a6ef59..6b40009 100644
--- a/gramscii.c
+++ b/gramscii.c
@@ -39,11 +39,7 @@ void cleanup(int s){
dump_lines(screen, stdout);
tcsetattr(0, TCSANOW, &t1);
fflush(stdout);
- exit(0);
-}
-
-void exit_cleanup(void){
- cleanup(0);
+ exit(s);
}
/*** Initialisation ***/
@@ -54,7 +50,6 @@ void init(){
signal(SIGINT, cleanup);
signal(SIGTERM, cleanup);
signal(SIGQUIT, cleanup);
- atexit(exit_cleanup);
tcgetattr(0, &t1);
t2 = t1;
@@ -132,7 +127,7 @@ void commands(FILE *fc){
case 'q':
check_modified(fc);/** FALLTHROUGH **/
case 'Q':
- exit(0);
+ cleanup(0);
break;
}
}
@@ -147,7 +142,7 @@ void commands(FILE *fc){
void usage(){
fprintf(stderr, "Usage: %s [-s] [-h] [file ...]\n", argv0);
- exit(1);
+ cleanup(1);
}
diff --git a/gramscii.h b/gramscii.h
index 6fcbb99..83d2719 100644
--- a/gramscii.h
+++ b/gramscii.h
@@ -193,4 +193,6 @@ void copy_lines_to_ring(int y1, int y2, int which);
void invalidate_undo();
/**/
+void cleanup(int);
+
#endif
diff --git a/lineset.c b/lineset.c
index 349504c..47c3de4 100644
--- a/lineset.c
+++ b/lineset.c
@@ -14,7 +14,7 @@ void ensure_line_length(line_t *l, int len){
tmp = realloc(l->s, (len+1) * 2 * sizeof(char));
if (!tmp){
fprintf(stderr, "Unable to allocate string\n");
- exit(1);
+ cleanup(-1);
}
l->s = tmp;
l->sz = (len + 1) * 2;
@@ -29,7 +29,7 @@ void alloc_line(line_t *l){
tmp = malloc((l->sz) * sizeof(char));
if (tmp == NULL){
fprintf(stderr, "unable to allocate line\n");
- exit(1);
+ cleanup(-1);
}
l->s = tmp;
memset(l->s, BG, l->sz);
@@ -46,7 +46,7 @@ void ensure_num_lines(lineset_t *ls, int n){
tmp = realloc(ls->l, (n + LONG_STEP) * sizeof(line_t));
if (tmp == NULL){
fprintf(stderr, "Unable to allocate memory for more lines");
- exit(1);
+ cleanup(-1);
}
else {
ls->l = tmp;
@@ -147,7 +147,7 @@ void copy_lines_to_ring(int y1, int y2, int which){
tmp = realloc(undo, (undo_sz + 10) * sizeof(lineset_t));
if (tmp == NULL){
fprintf(stderr, "Error allocating undo buffer");
- exit(1);
+ cleanup(-1);
}
undo = tmp;
for (i=0; i<10; i++){
diff --git a/screen.c b/screen.c
index 5729a68..587abd7 100644
--- a/screen.c
+++ b/screen.c
@@ -400,7 +400,7 @@ void init_screen(){
screen.num = HEIGHT;
if (screen.l == NULL){
perror("allocating screen");
- exit(1);
+ cleanup(-1);
}
for (i=0; i<HEIGHT; i++){
alloc_line(&(screen.l[i]));