]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
tools: only create log file when requested 2344/head
authorChristian Brauner <christian.brauner@ubuntu.com>
Wed, 23 May 2018 11:49:42 +0000 (13:49 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Wed, 23 May 2018 11:49:42 +0000 (13:49 +0200)
We used to initialize a log unconditionally before. This has led to scenarios
where users where left with container directories and an empty log file even
though they didn't request a log be created at all.
Switch all tools to only create a log file when the user explicitly requests
this.

Closes #1779.
Closes #2032.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
19 files changed:
src/lxc/tools/lxc_attach.c
src/lxc/tools/lxc_autostart.c
src/lxc/tools/lxc_cgroup.c
src/lxc/tools/lxc_checkpoint.c
src/lxc/tools/lxc_console.c
src/lxc/tools/lxc_copy.c
src/lxc/tools/lxc_create.c
src/lxc/tools/lxc_destroy.c
src/lxc/tools/lxc_device.c
src/lxc/tools/lxc_execute.c
src/lxc/tools/lxc_freeze.c
src/lxc/tools/lxc_info.c
src/lxc/tools/lxc_ls.c
src/lxc/tools/lxc_monitor.c
src/lxc/tools/lxc_snapshot.c
src/lxc/tools/lxc_start.c
src/lxc/tools/lxc_stop.c
src/lxc/tools/lxc_unfreeze.c
src/lxc/tools/lxc_wait.c

index 74b2829d6224901a9745bc82f623483d6a66a3ea..afd9a57f6a95546db1805b41ad4535f38d2ba7d7 100644 (file)
@@ -270,18 +270,18 @@ int main(int argc, char *argv[])
        if (r)
                exit(EXIT_FAILURE);
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-       r = lxc_log_init(&log);
-       if (r)
-               exit(EXIT_FAILURE);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(EXIT_FAILURE);
+       }
 
        if (geteuid()) {
                if (access(my_args.lxcpath[0], O_RDONLY) < 0) {
index 21f9e0b392c55b24d53cd4ffb8bbd8edc2500df7..a78b7d894b6a8a39b28dec694a65b700f1b0a4b3 100644 (file)
@@ -347,15 +347,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(EXIT_FAILURE);
 
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(EXIT_FAILURE);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(EXIT_FAILURE);
+       }
 
        count = list_defined_containers(my_args.lxcpath[0], NULL, &containers);
 
index 14c6fa1e38b38420046b3b6c5899f2d36256d7ea..f97c440816cdc277b1686628f22120035cf39cff 100644 (file)
@@ -73,18 +73,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(EXIT_FAILURE);
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(EXIT_FAILURE);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(EXIT_FAILURE);
+       }
 
        state_object = my_args.argv[0];
 
index 0d0746e55e28f29675e103a6094951fca6feec9b..25a8f7aa6f139afb7459d5602b23d1aa160d3813 100644 (file)
@@ -257,18 +257,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(EXIT_FAILURE);
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(EXIT_FAILURE);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(EXIT_FAILURE);
+       }
 
        c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
        if (!c) {
index e55646225e680c42750505c44fc14e803111e9e6..7c22a7a404aad05602c24a9e6797e0d54e5366f6 100644 (file)
@@ -97,19 +97,18 @@ int main(int argc, char *argv[])
        if (ret)
                return EXIT_FAILURE;
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       ret = lxc_log_init(&log);
-       if (ret)
-               return EXIT_FAILURE;
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(EXIT_FAILURE);
+       }
 
        c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
        if (!c) {
index 08ef41fc8896b60777364a3a9e2befaf8ba390aa..58f3b01dd061ca96129aed2e2197134bc6d73053 100644 (file)
@@ -163,18 +163,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(ret);
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(ret);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(ret);
+       }
 
        if (geteuid()) {
                if (access(my_args.lxcpath[0], O_RDONLY) < 0) {
index 51dae1054d592a9bb83570a4aae6a3fa8722a2d1..78c15ee05ac373132e13d1a1ed693bd4287c83c2 100644 (file)
@@ -227,18 +227,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(EXIT_FAILURE);
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(EXIT_FAILURE);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(EXIT_FAILURE);
+       }
 
        if (!my_args.template) {
                fprintf(stderr, "A template must be specified.\n");
index 7de369ac85fb9d144183d9f72052ac4d4104e087..9fceba8894ce906bb4a6f333ee2ea09994d8ac08 100644 (file)
@@ -70,18 +70,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(EXIT_FAILURE);
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(EXIT_FAILURE);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(EXIT_FAILURE);
+       }
 
        if (my_args.quiet)
                quiet = true;
index c139e96c8d577e98bb9b66e2b267dde3904ec4c2..6295b89d7c1f170f0d75a0c10dcfde56c69106c2 100644 (file)
@@ -110,18 +110,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                goto err;
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               goto err;
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(EXIT_FAILURE);
+       }
 
        c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
        if (!c) {
index 5c03b498b0e5b71bce2b9e30f1d6a3a7768ec18f..ecabb785b59d3179aef13c4247c0514dccb0c4a3 100644 (file)
@@ -151,15 +151,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(err);
 
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(err);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(err);
+       }
 
        c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
        if (!c) {
index 66180a07b776eeee351eed58bec34defacfd6310..122564cca047f31c3d2f7158ea68ff6a211f12da 100644 (file)
@@ -60,18 +60,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(EXIT_FAILURE);
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(EXIT_FAILURE);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(EXIT_FAILURE);
+       }
 
        c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
        if (!c) {
index 6105b36eb800ad1c11a198ba8b5177f48bf093c1..56af0e4fefad381ccbb7d1b9418a9e6bcd57ca8c 100644 (file)
@@ -396,18 +396,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(ret);
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(ret);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(ret);
+       }
 
        if (print_info(my_args.name, my_args.lxcpath[0]) == 0)
                ret = EXIT_SUCCESS;
index 4b9623919f4b453ba4e8a5a94eea63321c90e5db..4089b9361bcbc0c30ea6e029114561c1dbe48b8a 100644 (file)
@@ -211,22 +211,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(EXIT_FAILURE);
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       /*
-        * We set the first argument that usually takes my_args.name to NULL so
-        * that the log is only used when the user specifies a file.
-        */
-       log.name = NULL;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(EXIT_FAILURE);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = NULL;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(EXIT_FAILURE);
+       }
 
        struct lengths max_len = {
                /* default header length */
index abc8a233a036031583c3365c283be6671e9b3ce2..036e43df5588acad0da83df4d99b1979b54a9f90 100644 (file)
@@ -503,18 +503,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(rc_main);
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(rc_main);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(rc_main);
+       }
 
        if (quit_monitord) {
                int ret = EXIT_SUCCESS;
index 52ddd8fe9f9ebf0e5be5568df9b708e608b1c135..535941f52c716ae21ad4d3b2cc20be19f6fe7250 100644 (file)
@@ -84,18 +84,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(EXIT_FAILURE);
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(EXIT_FAILURE);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(EXIT_FAILURE);
+       }
 
        if (geteuid()) {
                if (access(my_args.lxcpath[0], O_RDONLY) < 0) {
index aa754247d4da200a68e414f503ef97c02efb567b..1a68453f85eaaeb4a28dc2de297579f295181ddb 100644 (file)
@@ -189,15 +189,18 @@ int main(int argc, char *argv[])
        else
                args = my_args.argv;
 
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(err);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(err);
+       }
 
        lxcpath = my_args.lxcpath[0];
        if (access(lxcpath, O_RDONLY) < 0) {
index 787a6bdb66f075651702a9c3cc2ea85e4891d13d..fad7064e105138129017c9b491cce9c9cef06a81 100644 (file)
@@ -104,15 +104,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(ret);
 
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(ret);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(ret);
+       }
 
        /* Set default timeout */
        if (my_args.timeout == -2) {
index 482e0e7f418c495cc4d6abecc48e0116c4d91925..5105d8703afc87520d676240d91a2a2084c92853 100644 (file)
@@ -60,19 +60,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(EXIT_FAILURE);
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-
-       if (lxc_log_init(&log))
-               exit(EXIT_FAILURE);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(EXIT_FAILURE);
+       }
 
        c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
        if (!c) {
index e4541e415a35737c716c55159c66a52229800eee..f768149e826c75197e34612c7a7add986e6b30d3 100644 (file)
@@ -87,18 +87,18 @@ int main(int argc, char *argv[])
        if (lxc_arguments_parse(&my_args, argc, argv))
                exit(EXIT_FAILURE);
 
-       if (!my_args.log_file)
-               my_args.log_file = "none";
-
-       log.name = my_args.name;
-       log.file = my_args.log_file;
-       log.level = my_args.log_priority;
-       log.prefix = my_args.progname;
-       log.quiet = my_args.quiet;
-       log.lxcpath = my_args.lxcpath[0];
-
-       if (lxc_log_init(&log))
-               exit(EXIT_FAILURE);
+       /* Only create log if explicitly instructed */
+       if (my_args.log_file || my_args.log_priority) {
+               log.name = my_args.name;
+               log.file = my_args.log_file;
+               log.level = my_args.log_priority;
+               log.prefix = my_args.progname;
+               log.quiet = my_args.quiet;
+               log.lxcpath = my_args.lxcpath[0];
+
+               if (lxc_log_init(&log))
+                       exit(EXIT_FAILURE);
+       }
 
        c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
        if (!c)