modules/admin-full: simplify and fix progname change
This commit is contained in:
parent
8bbf59dcc6
commit
de9048ff8c
1 changed files with 26 additions and 29 deletions
|
@ -142,6 +142,10 @@ static void reset_countdown(int sig)
|
|||
}
|
||||
|
||||
|
||||
static char *progname;
|
||||
static int prognamelen;
|
||||
|
||||
|
||||
static int init_directory(char *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));
|
||||
}
|
||||
|
||||
static int run_daemon(char *progname)
|
||||
static int run_daemon(void)
|
||||
{
|
||||
FILE *info;
|
||||
uint64_t rxb, txb, rxp, txp;
|
||||
|
@ -390,7 +394,8 @@ static int run_daemon(char *progname)
|
|||
for (reset_countdown(0); countdown >= 0; countdown--)
|
||||
{
|
||||
/* 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)
|
||||
{
|
||||
|
@ -456,45 +461,39 @@ static int run_daemon(char *progname)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int check_daemon(char *progname)
|
||||
static void check_daemon(void)
|
||||
{
|
||||
int pid;
|
||||
|
||||
if ((pid = readpid()) < 0 || kill(pid, 0) < 0)
|
||||
{
|
||||
/* daemon ping failed, try to start it up */
|
||||
if (run_daemon(progname))
|
||||
if (run_daemon())
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Failed to ping daemon and unable to start it up: %s\n",
|
||||
strerror(errno));
|
||||
|
||||
return 1;
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
else if (kill(pid, SIGUSR1))
|
||||
{
|
||||
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;
|
||||
char path[1024];
|
||||
struct file_map m;
|
||||
struct traffic_entry *e;
|
||||
|
||||
check_daemon();
|
||||
snprintf(path, sizeof(path), DB_IF_FILE, ifname);
|
||||
|
||||
if (check_daemon(progname))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (mmap_file(path, sizeof(struct traffic_entry), &m))
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
static int run_dump_conns(char *progname)
|
||||
static int run_dump_conns(void)
|
||||
{
|
||||
int i;
|
||||
char path[1024];
|
||||
struct file_map m;
|
||||
struct conn_entry *e;
|
||||
|
||||
check_daemon();
|
||||
snprintf(path, sizeof(path), DB_CN_FILE);
|
||||
|
||||
if (check_daemon(progname))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (mmap_file(path, sizeof(struct conn_entry), &m))
|
||||
{
|
||||
fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno));
|
||||
|
@ -559,20 +554,16 @@ static int run_dump_conns(char *progname)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int run_dump_load(char *progname)
|
||||
static int run_dump_load(void)
|
||||
{
|
||||
int i;
|
||||
char path[1024];
|
||||
struct file_map m;
|
||||
struct load_entry *e;
|
||||
|
||||
check_daemon();
|
||||
snprintf(path, sizeof(path), DB_LD_FILE);
|
||||
|
||||
if (check_daemon(progname))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (mmap_file(path, sizeof(struct load_entry), &m))
|
||||
{
|
||||
fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno));
|
||||
|
@ -602,6 +593,12 @@ int main(int argc, char *argv[])
|
|||
{
|
||||
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)
|
||||
{
|
||||
switch (opt)
|
||||
|
@ -612,14 +609,14 @@ int main(int argc, char *argv[])
|
|||
|
||||
case 'i':
|
||||
if (optarg)
|
||||
return run_dump_ifname(argv[0], optarg);
|
||||
return run_dump_ifname(optarg);
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
return run_dump_conns(argv[0]);
|
||||
return run_dump_conns();
|
||||
|
||||
case 'l':
|
||||
return run_dump_load(argv[0]);
|
||||
return run_dump_load();
|
||||
|
||||
default:
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue