wrapper: Move 'wrap_env_path' to a new 'utils' module.

* src/wrapper.c: Move 'wrap_env_path' to ...
* src/utils.h: ... here.  New module.
* src/utils.c: New file.
* configure.ac: Use AC_PROG_RANLIB and AM_PROG_AR.
* Makefile.am (noinst_LIBRARIES, src_libmcron_a_SOURCES): New variables.
(LDADD): Add 'src/libmcron.a'.
This commit is contained in:
Mathieu Lirzin 2017-04-24 21:28:09 +02:00
commit 9b52c0d454
No known key found for this signature in database
GPG key ID: 0ADEE10094604D37
6 changed files with 83 additions and 26 deletions

3
.gitignore vendored
View file

@ -1,6 +1,6 @@
*.[oa]
*.go
*.log
*.o
*.trs
*~
.deps
@ -8,6 +8,7 @@
/bin/cron
/bin/crontab
/bin/mcron
/build-aux/ar-lib
/build-aux/compile
/build-aux/config.guess
/build-aux/config.sub

View file

@ -36,7 +36,7 @@ AM_CPPFLAGS = \
-D_GNU_SOURCE
AM_CFLAGS = @GUILE_CFLAGS@
LDADD = @GUILE_LIBS@
LDADD = @GUILE_LIBS@ src/libmcron.a
bin_mcron_SOURCES = src/wrapper.c
bin_mcron_CPPFLAGS = $(AM_CPPFLAGS) -DPROGRAM="\"mcron\""
@ -53,6 +53,12 @@ bin_crontab_DEPENDENCIES = $(compiled_modules)
# wrapper to be used in the build environment and for running tests.
noinst_SCRIPTS = pre-inst-env
# local library.
noinst_LIBRARIES = src/libmcron.a
src_libmcron_a_SOURCES = \
src/utils.c \
src/utils.h
## --------------- ##
## Guile modules. ##
## --------------- ##

View file

@ -33,6 +33,8 @@ AC_CANONICAL_HOST
AC_PROG_AWK
AC_PROG_EGREP
AM_PROG_CC_C_O
AC_PROG_RANLIB
AM_PROG_AR
# Check for Guile 2.x. development files
GUILE_PKG([2.2 2.0])

44
src/utils.c Normal file
View file

@ -0,0 +1,44 @@
/* utils.c -- Utility functions.
Copyright © 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 <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void
wrap_env_path (const char *envar, const char *dir)
{
const char *path = getenv (envar);
if (path == NULL)
setenv (envar, dir, true);
else
{
char *new_path;
int ret = asprintf (&new_path, "%s:%s", dir, path);
if (ret >= 0)
setenv (envar, new_path, true);
else
{
perror (envar);
exit (EXIT_FAILURE);
}
free (new_path);
}
}

27
src/utils.h Normal file
View file

@ -0,0 +1,27 @@
/* utils.h -- Utility functions.
Copyright © 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/>. */
#ifndef MCRON_UTILS_H
#define MCRON_UTILS_H
/**
Append DIR in front of ENVAR environment variable value. If ENVAR is not
defined, then define it with DIR. Bail out if something went wrong. */
extern void wrap_env_path (const char *envar, const char *dir);
#endif /* MCRON_UTILS_H */

View file

@ -21,6 +21,7 @@
is needed because the crontab personality requires SUID which is not
permitted for executable scripts. */
#include "utils.h"
#include <libguile.h>
#include <signal.h>
#include <stdbool.h>
@ -29,7 +30,6 @@
#include <string.h>
/* Forward declarations. */
static void wrap_env_path (const char *envar, const char *dir);
static void inner_main (void *closure, int argc, char **argv);
static void react_to_terminal_signal (int sig);
static SCM set_cron_signals (void);
@ -51,29 +51,6 @@ main (int argc, char **argv)
return EXIT_SUCCESS;
}
/* Append DIR in front of ENVAR environment variable value. If ENVAR is not
defined, then define it with DIR. Bail out if something went wrong. */
static void
wrap_env_path (const char *envar, const char *dir)
{
const char *path = getenv (envar);
if (path == NULL)
setenv (envar, dir, true);
else
{
char *new_path;
int ret = asprintf (&new_path, "%s:%s", dir, path);
if (ret >= 0)
setenv (envar, new_path, true);
else
{
perror (envar);
exit (EXIT_FAILURE);
}
free (new_path);
}
}
/* Launch the Mcron Guile main program. */
static void
inner_main (void *closure, int argc, char **argv)