AboutSummaryRefsLogTreeCommitDiffStats
path: root/src/mcron.c
diff options
context:
space:
mode:
authorDale Mellor <mcron-lsfnyl@rdmp.org>2020-04-13 11:42:39 +0100
committerDale Mellor <mcron-lsfnyl@rdmp.org>2020-04-20 17:03:25 +0000
commit1eedf3b6d24f421ccdb8798b053ee718d1051651 (patch)
tree9008b15f214aaa993f67fa4cd92f099b1bdc4a45 /src/mcron.c
parent4a05a2e8612560cd7f3274d2930e86bfc9f1ec93 (diff)
downloadmcron-1eedf3b6d24f421ccdb8798b053ee718d1051651.tar.gz
mcron-1eedf3b6d24f421ccdb8798b053ee718d1051651.tar.bz2
mcron-1eedf3b6d24f421ccdb8798b053ee718d1051651.zip
project: banish need for C compiler
This patch gets rid of the thin veneer that we currently have around the three executables. This was done for historical reasons (circa 2003 Guile couldnʼt deal with process signals and forks). In fact these problems were fixed many moons ago, and there is now no need for it. The project becomes 100% Guile! Many files are affected; interested coders should use the GIT repository to understand the details of all the changes.
Diffstat (limited to 'src/mcron.c')
-rw-r--r--src/mcron.c125
1 files changed, 0 insertions, 125 deletions
diff --git a/src/mcron.c b/src/mcron.c
deleted file mode 100644
index c0b151a..0000000
--- a/src/mcron.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* mcron.c -- run jobs at scheduled times
- Copyright © 2003, 2014 Dale Mellor <dale_mellor@users.sourceforge.net>
- Copyright © 2015, 2016, 2017 Mathieu Lirzin <mthl@gnu.org>
-
- This file is part of GNU Mcron.
-
- GNU Mcron is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- GNU Mcron is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Mcron. If not, see <http://www.gnu.org/licenses/>. */
-
-#include "utils.h"
-#include <argp.h>
-#include <string.h>
-
-/* Forward declarations. */
-static void inner_main (void *closure, int argc, char *argv[]);
-static SCM parse_args (int argc, char *argv[]);
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-
-int
-main (int argc, char *argv[])
-{
- /* Set Guile load paths to ensure that Mcron modules will be found after
- installation. In a build environment let the 'pre-inst-env' script set
- the correct paths. */
- if (getenv ("MCRON_UNINSTALLED") == NULL)
- {
- wrap_env_path ("GUILE_LOAD_PATH", PACKAGE_LOAD_PATH);
- wrap_env_path ("GUILE_LOAD_COMPILED_PATH", PACKAGE_LOAD_COMPILED_PATH);
- }
-
- scm_boot_guile (argc, argv, inner_main, NULL);
-
- return EXIT_SUCCESS;
-}
-
-/* Launch the Mcron Guile main program. */
-static void
-inner_main (void *closure, int argc, char *argv[])
-{
- SCM config = parse_args (argc, argv);
- scm_set_current_module (scm_c_resolve_module ("mcron scripts mcron"));
- scm_call_1 (scm_variable_ref (scm_c_lookup ("main")), config);
-}
-
-/* Handle command line arguments. */
-static SCM
-parse_args (int argc, char *argv[])
-{
- static struct argp_option options[] = {
- {"schedule", 's', "N", 0,
- "Display the next N jobs that will be run"},
- {"daemon", 'd', 0, 0,
- "Run as a daemon process"},
- {"stdin", 'i', "FORMAT", 0,
- "Format of data passed as standard input or file arguments (default guile)"},
- {0, 0, 0, 0, 0}
- };
-
- static struct argp argp = {
- .options = options,
- .parser = parse_opt,
- .args_doc = "[FILE...]",
- .doc = "Run an mcron process according to the specifications in the "
- "FILE... (`-' for standard input), or use all the files in "
- "~/.config/cron (or the deprecated ~/.cron) with .guile or "
- ".vixie extensions."
- };
-
- SCM config = SCM_EOL;
- argp_program_version = PACKAGE_STRING;
- argp_program_bug_address = PACKAGE_BUGREPORT;
- argp_parse (&argp, argc, argv, 0, NULL, &config);
-
- return config;
-}
-
-static error_t
-parse_opt (int key, char *arg, struct argp_state *state)
-{
- SCM *config = state->input;
-
- switch (key)
- {
- case 's':
- assq_symbol_set_x (config, "schedule",
- scm_from_int (atoi (arg)));
- break;
- case 'd':
- assq_symbol_set_x (config, "daemon", SCM_BOOL_T);
- break;
- case 'i':
- if (strncmp (arg, "vixie", 6) == 0)
- assq_symbol_set_x (config, "vixie", SCM_BOOL_T);
- break;
- case ARGP_KEY_NO_ARGS:
- assq_symbol_set_x (config, "files", SCM_EOL);
- break;
- case ARGP_KEY_ARGS:
- {
- SCM lst = SCM_EOL;
- int filec = state->argc - state->next;
- char **filev = state->argv + state->next;
-
- for (int i = filec - 1; i >= 0; i--)
- lst = scm_cons (scm_from_locale_string (filev[i]), lst);
-
- assq_symbol_set_x (config, "files", lst);
- break;
- }
- case ARGP_KEY_ARG:
- default:
- return ARGP_ERR_UNKNOWN;
- }
- return 0;
-}