From 34ba5348c8f9df466c44ef00f717e714fd8019ff Mon Sep 17 00:00:00 2001
From: Yorhel <git@yorhel.nl>
Date: Thu, 16 Apr 2009 18:26:39 +0200
Subject: [PATCH] Made stcalc static within calc.c and abstracted access to it
 with calc_init()

This actually makes the struct itself obsolete, as all information is now only
useful within calc.c itself and other files don't have to do anything with it.
---
 src/browser.c |  5 +----
 src/calc.c    | 33 ++++++++++++++++++++++++---------
 src/calc.h    | 16 +---------------
 src/main.c    |  7 +++----
 4 files changed, 29 insertions(+), 32 deletions(-)

diff --git a/src/browser.c b/src/browser.c
index e9ac8ad..5907f08 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -407,10 +407,7 @@ int browse_key(int ch) {
    /* refresh */
     case 'r':
       hideinfo;
-      stcalc.sterr = ST_BROWSE;
-      stcalc.orig = stbrowse.cur->parent;
-      strcpy(stcalc.cur, getpath(stbrowse.cur, tmp));
-      pstate = ST_CALC;
+      calc_init(getpath(stbrowse.cur, tmp), stbrowse.cur->parent);
       break;
 
     /* and other stuff */
diff --git a/src/calc.c b/src/calc.c
index 5aa4063..a8d929a 100644
--- a/src/calc.c
+++ b/src/calc.c
@@ -39,8 +39,18 @@
 #include <sys/time.h>
 #include <dirent.h>
 
-struct state_calc stcalc;
 
+struct {
+  char err;                /* 1/0, error or not */
+  char cur[PATH_MAX];      /* current dir/item */
+  char lasterr[PATH_MAX];  /* last unreadable dir/item */
+  char errmsg[128];        /* error message, when err=1 */
+  struct dir *parent;      /* parent directory for the calculation */
+  struct dir *orig;        /* original directory, when recalculating */
+  dev_t curdev;            /* current device we're calculating on */
+  suseconds_t lastupdate;  /* time of the last screen update */
+  int anpos;               /* position of the animation string */
+} stcalc;
 
 
 /* My own implementation of realpath()
@@ -288,7 +298,7 @@ void calc_draw_progress() {
   char ani[15];
   int i;
 
-  nccreate(10, 60, stcalc.sterr == ST_QUIT ? "Calculating..." : "Recalculating...");
+  nccreate(10, 60, stcalc.orig ? "Calculating..." : "Recalculating...");
 
   ncprint(2, 2, "Total items: %-8d size: %s",
     stcalc.parent->items, formatsize(stcalc.parent->size, sflags & SF_SI));
@@ -368,12 +378,6 @@ void calc_process() {
   struct stat fs;
   struct dir *t;
 
-  /* init/reset global vars */
-  stcalc.err = 0;
-  stcalc.lastupdate = 999;
-  stcalc.lasterr[0] = 0;
-  stcalc.anpos = 0;
-
   /* check root directory */
   if(rpath(stcalc.cur, tmp) == NULL || lstat(tmp, &fs) != 0 || !S_ISDIR(fs.st_mode)) {
     stcalc.err = 1;
@@ -421,7 +425,18 @@ void calc_process() {
 fail:
   while(stcalc.err && !input_handle(0))
     ;
-  pstate = stcalc.sterr;
+  pstate = stcalc.orig ? ST_BROWSE : ST_QUIT;
   return;
 }
 
+
+void calc_init(char *dir, struct dir *orig) {
+  stcalc.err = 0;
+  stcalc.lastupdate = 999;
+  stcalc.lasterr[0] = 0;
+  stcalc.anpos = 0;
+  stcalc.orig = orig;
+  strcpy(stcalc.cur, dir);
+  pstate = ST_CALC;
+}
+
diff --git a/src/calc.h b/src/calc.h
index fa8f0f0..fc28daf 100644
--- a/src/calc.h
+++ b/src/calc.h
@@ -28,24 +28,10 @@
 
 #include "ncdu.h"
 
-struct state_calc {
-  char err;                /* 1/0, error or not */
-  char cur[PATH_MAX];      /* current dir/item */
-  char lasterr[PATH_MAX];  /* last unreadable dir/item */
-  char errmsg[128];        /* error message, when err=1 */
-  struct dir *parent;      /* parent directory for the calculation */
-  struct dir *orig;        /* original directory, when recalculating */
-  dev_t curdev;            /* current device we're calculating on */
-  suseconds_t lastupdate;  /* time of the last screen update */
-  int anpos;               /* position of the animation string */
-  int sterr;               /* state to go to on error (ST_BROWSE/ST_QUIT) */
-};
-extern struct state_calc stcalc;
-
-
 void calc_process(void);
 int  calc_key(int);
 int  calc_draw(void);
+void calc_init(char *, struct dir *);
 
 
 #endif
diff --git a/src/main.c b/src/main.c
index f40dffe..dd6eb99 100644
--- a/src/main.c
+++ b/src/main.c
@@ -137,11 +137,10 @@ void argv_parse(int argc, char **argv, char *dir) {
 
 /* main program */
 int main(int argc, char **argv) {
-  argv_parse(argc, argv, stcalc.cur);
+  char dir[PATH_MAX];
+  argv_parse(argc, argv, dir);
 
-  pstate = ST_CALC;
-  stcalc.sterr = ST_QUIT;
-  stcalc.orig = NULL;
+  calc_init(dir, NULL);
   stbrowse.flags = BF_SIZE | BF_DESC;
   stbrowse.graph = 0;
 
-- 
GitLab