modules/admin-full: simplify and fix progname change

This commit is contained in:
Jo-Philipp Wich 2011-09-01 23:21:22 +00:00
parent 8bbf59dcc6
commit de9048ff8c

View file

@ -142,6 +142,10 @@ static void reset_countdown(int sig)
} }
static char *progname;
static int prognamelen;
static int init_directory(char *path) static int init_directory(char *path)
{ {
char *p = path; char *p = path;
@ -336,7 +340,7 @@ static int update_ldstat(uint16_t load1, uint16_t load5, uint16_t load15)
return update_file(path, &e, sizeof(struct load_entry)); return update_file(path, &e, sizeof(struct load_entry));
} }
static int run_daemon(char *progname) static int run_daemon(void)
{ {
FILE *info; FILE *info;
uint64_t rxb, txb, rxp, txp; uint64_t rxb, txb, rxp, txp;
@ -390,7 +394,8 @@ static int run_daemon(char *progname)
for (reset_countdown(0); countdown >= 0; countdown--) for (reset_countdown(0); countdown >= 0; countdown--)
{ {
/* alter progname for ps, top */ /* alter progname for ps, top */
sprintf(progname, "luci-bwc %d", countdown); memset(progname, 0, prognamelen);
snprintf(progname, prognamelen, "luci-bwc %d", countdown);
if ((info = fopen("/proc/net/dev", "r")) != NULL) if ((info = fopen("/proc/net/dev", "r")) != NULL)
{ {
@ -456,45 +461,39 @@ static int run_daemon(char *progname)
return 0; return 0;
} }
static int check_daemon(char *progname) static void check_daemon(void)
{ {
int pid; int pid;
if ((pid = readpid()) < 0 || kill(pid, 0) < 0) if ((pid = readpid()) < 0 || kill(pid, 0) < 0)
{ {
/* daemon ping failed, try to start it up */ /* daemon ping failed, try to start it up */
if (run_daemon(progname)) if (run_daemon())
{ {
fprintf(stderr, fprintf(stderr,
"Failed to ping daemon and unable to start it up: %s\n", "Failed to ping daemon and unable to start it up: %s\n",
strerror(errno)); strerror(errno));
return 1; exit(1);
} }
} }
else if (kill(pid, SIGUSR1)) else if (kill(pid, SIGUSR1))
{ {
fprintf(stderr, "Failed to send signal: %s\n", strerror(errno)); fprintf(stderr, "Failed to send signal: %s\n", strerror(errno));
return 1; exit(2);
} }
return 0;
} }
static int run_dump_ifname(char *progname, const char *ifname) static int run_dump_ifname(const char *ifname)
{ {
int i; int i;
char path[1024]; char path[1024];
struct file_map m; struct file_map m;
struct traffic_entry *e; struct traffic_entry *e;
check_daemon();
snprintf(path, sizeof(path), DB_IF_FILE, ifname); snprintf(path, sizeof(path), DB_IF_FILE, ifname);
if (check_daemon(progname))
{
return 1;
}
if (mmap_file(path, sizeof(struct traffic_entry), &m)) if (mmap_file(path, sizeof(struct traffic_entry), &m))
{ {
fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno)); fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno));
@ -521,20 +520,16 @@ static int run_dump_ifname(char *progname, const char *ifname)
return 0; return 0;
} }
static int run_dump_conns(char *progname) static int run_dump_conns(void)
{ {
int i; int i;
char path[1024]; char path[1024];
struct file_map m; struct file_map m;
struct conn_entry *e; struct conn_entry *e;
check_daemon();
snprintf(path, sizeof(path), DB_CN_FILE); snprintf(path, sizeof(path), DB_CN_FILE);
if (check_daemon(progname))
{
return 1;
}
if (mmap_file(path, sizeof(struct conn_entry), &m)) if (mmap_file(path, sizeof(struct conn_entry), &m))
{ {
fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno)); fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno));
@ -559,20 +554,16 @@ static int run_dump_conns(char *progname)
return 0; return 0;
} }
static int run_dump_load(char *progname) static int run_dump_load(void)
{ {
int i; int i;
char path[1024]; char path[1024];
struct file_map m; struct file_map m;
struct load_entry *e; struct load_entry *e;
check_daemon();
snprintf(path, sizeof(path), DB_LD_FILE); snprintf(path, sizeof(path), DB_LD_FILE);
if (check_daemon(progname))
{
return 1;
}
if (mmap_file(path, sizeof(struct load_entry), &m)) if (mmap_file(path, sizeof(struct load_entry), &m))
{ {
fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno)); fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno));
@ -602,6 +593,12 @@ int main(int argc, char *argv[])
{ {
int opt; int opt;
progname = argv[0];
prognamelen = -1;
for (opt = 0; opt < argc; opt++)
prognamelen += 1 + strlen(argv[opt]);
while ((opt = getopt(argc, argv, "t:i:cl")) > -1) while ((opt = getopt(argc, argv, "t:i:cl")) > -1)
{ {
switch (opt) switch (opt)
@ -612,14 +609,14 @@ int main(int argc, char *argv[])
case 'i': case 'i':
if (optarg) if (optarg)
return run_dump_ifname(argv[0], optarg); return run_dump_ifname(optarg);
break; break;
case 'c': case 'c':
return run_dump_conns(argv[0]); return run_dump_conns();
case 'l': case 'l':
return run_dump_load(argv[0]); return run_dump_load();
default: default:
break; break;