summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <abaumann@yahoo.com>2009-01-12 15:44:13 +0100
committerAndreas Baumann <abaumann@yahoo.com>2009-01-12 15:44:13 +0100
commit71004021851e99a7a431423915b751c02bd10929 (patch)
tree8799d251ea7e2d0a84d93a997fbdf76c2fe03977
parent66d507d906fc51e06b6c134fadf9c4610b9b91c4 (diff)
downloadwolfbones-71004021851e99a7a431423915b751c02bd10929.tar.gz
wolfbones-71004021851e99a7a431423915b751c02bd10929.tar.bz2
fixes for Cygwin (snprintf), started cleaning up namespace prefixes
-rw-r--r--GNUmakefile3
-rwxr-xr-xconfigure5
-rw-r--r--include/wolf/daemon/daemon.h4
-rw-r--r--include/wolf/daemon/signals.h20
-rw-r--r--include/wolf/errors.h23
-rw-r--r--include/wolf/port/sys.h29
-rw-r--r--makefiles/dist.mk38
-rwxr-xr-xmakefiles/guess_env9
-rw-r--r--makefiles/platform.mk3
-rw-r--r--makefiles/top.mk2
-rw-r--r--src/daemon/daemon.c129
-rw-r--r--src/daemon/pidfile.c48
-rw-r--r--src/daemon/pidfile.h8
-rw-r--r--src/daemon/signals.c78
-rw-r--r--src/port/snprintf.c2
-rw-r--r--src/port/snprintf.h15
-rw-r--r--src/port/stdint.h30
-rw-r--r--tests/daemon/testd.c8
18 files changed, 285 insertions, 169 deletions
diff --git a/GNUmakefile b/GNUmakefile
index 9e5cd85..ca6b9c1 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -2,4 +2,7 @@ TOPDIR = .
SUBDIRS = src include tests docs
+PACKAGE_NAME = WolfBones
+PACKAGE_VERSION = 0.0.1
+
-include $(TOPDIR)/makefiles/top.mk
diff --git a/configure b/configure
index a721db0..0a64dcb 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#!/bin/sh
-cat >$$ <<EOF
+cat <<EOF
No way, Jose.
Use 'make help' to see what you can do.
@@ -9,6 +9,3 @@ Use the make of your platform, be it 'make', 'gmake', 'bmake', 'nmake', ...
...whatever...
EOF
-
-cat $$
-rm -f $$
diff --git a/include/wolf/daemon/daemon.h b/include/wolf/daemon/daemon.h
index 1359e6e..ef6e7d2 100644
--- a/include/wolf/daemon/daemon.h
+++ b/include/wolf/daemon/daemon.h
@@ -18,11 +18,11 @@ typedef struct daemon_params_t {
} daemon_params_t;
daemon_p daemon_new( daemon_params_t params,
- error_t *error );
+ wolf_error_t *error );
void daemon_free( daemon_p demon );
-error_t daemon_start( daemon_p demon );
+wolf_error_t daemon_start( daemon_p demon );
void daemon_exit( daemon_p demon );
diff --git a/include/wolf/daemon/signals.h b/include/wolf/daemon/signals.h
index 2422425..4799406 100644
--- a/include/wolf/daemon/signals.h
+++ b/include/wolf/daemon/signals.h
@@ -15,29 +15,29 @@ const char *signal_get_short_name( int sig );
const char *signal_get_long_name( int sig );
-error_t signal_install_ignore( int sig, ... );
+wolf_error_t signal_install_ignore( int sig, ... );
-error_t signal_install_empty( int sig, ... );
+wolf_error_t signal_install_empty( int sig, ... );
typedef void (*signal_func_t)( int );
-error_t signal_install_func( signal_func_t func, int sig, ... );
+wolf_error_t signal_install_func( signal_func_t func, int sig, ... );
-error_t signal_install_fatal( int sig, ... );
+wolf_error_t signal_install_fatal( int sig, ... );
-error_t signal_install_notify( int sig, ... );
+wolf_error_t signal_install_notify( int sig, ... );
-error_t signal_install_notify_parent( int sig, ... );
+wolf_error_t signal_install_notify_parent( int sig, ... );
-error_t signal_initialize( void );
+wolf_error_t signal_initialize( void );
-int signal_suspend( int timeout, error_t *error );
+int signal_suspend( int timeout, wolf_error_t *error );
void signal_terminate( void );
-error_t signal_install_handlers_parent( void );
+wolf_error_t signal_install_handlers_parent( void );
-error_t signal_install_handlers_daemon( void );
+wolf_error_t signal_install_handlers_daemon( void );
#ifdef __cplusplus
}
diff --git a/include/wolf/errors.h b/include/wolf/errors.h
index ed5ef82..282654b 100644
--- a/include/wolf/errors.h
+++ b/include/wolf/errors.h
@@ -5,16 +5,19 @@
extern "C" {
#endif
-typedef signed int error_t;
-
-#define OK 0 /* no error, everything is fine */
-#define ERR_OUT_OF_MEMORY -1 /* out of memory in malloc */
-#define ERR_INVALID_STATE -2 /* the object is called in an illegal moment */
-#define ERR_INVALID_VALUE -3 /* invalid parameter to a function */
-#define ERR_INTERNAL -4 /* internal error of the object, usualy rare */
-#define ERR_PROGRAMMING -5 /* programming mistake, should not happen */
-#define ERR_NOT_IMPLEMENTED -6 /* not implemented yet */
-#define ERR_TIMEOUT -7 /* timeout */
+/**
+ * @brief Possible error codes of the various libwolf functions
+ */
+typedef enum {
+ WOLF_OK = 0, /**< no error, everything is fine */
+ WOLF_ERR_OUT_OF_MEMORY = -1, /**< out of memory in malloc */
+ WOLF_ERR_INVALID_STATE = -2, /**< the object is called in an illegal moment */
+ WOLF_ERR_INVALID_VALUE = -3, /**< invalid parameter to a function */
+ WOLF_ERR_INTERNAL = -4, /**< internal error of the object, usualy rare */
+ WOLF_ERR_PROGRAMMING = -5, /**< programming mistake, should not happen */
+ WOLF_ERR_NOT_IMPLEMENTED= -6, /**< not implemented yet */
+ WOLF_ERR_TIMEOUT = -7 /**< timeout */
+} wolf_error_t;
#ifdef __cplusplus
}
diff --git a/include/wolf/port/sys.h b/include/wolf/port/sys.h
index f13ca19..675e097 100644
--- a/include/wolf/port/sys.h
+++ b/include/wolf/port/sys.h
@@ -82,11 +82,12 @@
#define _XOPEN_SOURCE 600
#define __EXTENSIONS__
#endif
+/* TODO: check this, I don't think Solaris 8 has a working
+ * snprintf! */
#define HAVE_SNPRINTF
#define HAVE_VSNPRINTF
#define HAVE_LOCKF
#define HAVE_ENUM_BOOL
-#define HAVE_LINK_H
#else
#if OS_MINOR_VERSION == 10
#if !defined __cplusplus
@@ -110,12 +111,34 @@
#if defined CYGWIN
#if OS_MAJOR_VERSION == 5
-#if OS_MINOR_VERSION == 0
+#if OS_MINOR_VERSION == 1
#define _XOPEN_SOURCE 600
#define HAVE_ENUM_BOOL
+/* for *printf substitutes */
+#define HAVE_CONFIG_H 0
+#define TEST_SNPRINTF 0
+#define HAVE_STDARG_H 1
+#define HAVE_STDDEF_H 0
+#define HAVE_STDINT_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_INTTYPES_H 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_LOCALE_H 1
+#define HAVE_LOCALECONV 1
+#define HAVE_LCONV_DECIMAL_POINT 1
+#define HAVE_LCONV_THOUSANDS_SEP 1
+#define HAVE_LONG_DOUBLE 1
+#define HAVE_LONG_LONG_INT 1
+#define HAVE_UNSIGNED_LONG_LONG_INT 1
+#define HAVE_INTMAX_T 1
+#define HAVE_UINTMAX_T 1
+#define HAVE_UINTPTR_T 1
+#define HAVE_PTRDIFF_T 1
+#define HAVE_VA_COPY 0
+#define HAVE___VA_COPY 0
#else
#error unknown platform
-#endif /* OS_MINOR_VERSION == 0 */
+#endif /* OS_MINOR_VERSION == 1 */
#else
#error unknown platform
#endif /* OS_MAJOR_VERSION == 5 */
diff --git a/makefiles/dist.mk b/makefiles/dist.mk
new file mode 100644
index 0000000..1fe852a
--- /dev/null
+++ b/makefiles/dist.mk
@@ -0,0 +1,38 @@
+# creates a source tarball ready for distribution
+#
+# requires:
+# - PACKAGE_NAME
+# - PACKAGE_VERSION
+#
+# provides:
+# - target: dist
+# - target: dist-bz2, dist-gz, dist-Z
+
+.PHONY: dist dist-bz2 dist-gz dist-Z
+
+dist:
+ -@rm -rf $(PACKAGE_NAME)-$(PACKAGE_VERSION)
+ -@rm -rf /tmp/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+ mkdir /tmp/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+ cp -r * /tmp/$(PACKAGE_NAME)-$(PACKAGE_VERSION)/.
+ -@cd /tmp/$(PACKAGE_NAME)-$(PACKAGE_VERSION) ; \
+ $(MAKE) distclean ; \
+ find . -name .svn -exec rm -rf {} \; ; \
+ cd .. ; \
+ tar cvf $(PACKAGE_NAME)-$(PACKAGE_VERSION).tar \
+ $(PACKAGE_NAME)-$(PACKAGE_VERSION)
+ -@rm -rf /tmp/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+ @mv /tmp/$(PACKAGE_NAME)-$(PACKAGE_VERSION).tar .
+
+dist-bz2: dist
+ -@rm -rf $(PACKAGE_NAME)-$(PACKAGE_VERSION).bz2
+ @bzip2 -f $(PACKAGE_NAME)-$(PACKAGE_VERSION).tar
+
+dist-gz: dist
+ -@rm -rf $(PACKAGE_NAME)-$(PACKAGE_VERSION).gz
+ @gzip $(PACKAGE_NAME)-$(PACKAGE_VERSION).tar
+
+dist-Z: dist
+ -@rm -rf $(PACKAGE_NAME)-$(PACKAGE_VERSION).Z
+ @compress -f $(PACKAGE_NAME)-$(PACKAGE_VERSION).tar
+
diff --git a/makefiles/guess_env b/makefiles/guess_env
index f11ef5a..ae7728a 100755
--- a/makefiles/guess_env
+++ b/makefiles/guess_env
@@ -10,12 +10,14 @@ case "$UNAME_SYSTEM.$UNAME_RELEASE" in
Linux*) PLATFORM=LINUX
OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1`
OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2`
+ INSTALL='install'
LIBS_DL='-ldl'
;;
FreeBSD*) PLATFORM=FREEBSD
OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1`
OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1`
+ INSTALL='install'
LIBS_DL=
LIBS_SSP=
;;
@@ -23,6 +25,7 @@ case "$UNAME_SYSTEM.$UNAME_RELEASE" in
OpenBSD*) PLATFORM=OPENBSD
OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1`
OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2 | cut -d - -f 1`
+ INSTALL='install'
LIBS_DL=
LIBS_SSP=
;;
@@ -30,6 +33,7 @@ case "$UNAME_SYSTEM.$UNAME_RELEASE" in
SunOS*) PLATFORM=SUNOS
OS_MAJOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 1`
OS_MINOR_VERSION=`echo $UNAME_RELEASE | cut -d . -f 2`
+ INSTALL='/usr/ucb/install'
LIBS_DL='-ldl'
LIBS_SSP=
;;
@@ -38,6 +42,7 @@ case "$UNAME_SYSTEM.$UNAME_RELEASE" in
_tmp=`echo $UNAME_SYSTEM | cut -d - -f 2`
OS_MAJOR_VERSION=`echo $_tmp | cut -d . -f 1`
OS_MINOR_VERSION=`echo $_tmp | cut -d . -f 2`
+ INSTALL='install'
LIBS_SSP=
;;
@@ -90,6 +95,9 @@ case "$1" in
--gcc-minor-version) echo $GCC_MINOR_VERSION
;;
+
+ --install) echo $INSTALL
+ ;;
*)
cat <<EOF
@@ -101,6 +109,7 @@ LIBS_DL = $LIBS_DL
LIBS_SSL = $LIBS_SSL
GCC_MAJOR_VERSION = $GCC_MAJOR_VERSION
GCC_MINOR_VERSION = $GCC_MINOR_VERSION
+INSTALL = $INSTALL
EOF
;;
esac
diff --git a/makefiles/platform.mk b/makefiles/platform.mk
index a837fa2..d77043b 100644
--- a/makefiles/platform.mk
+++ b/makefiles/platform.mk
@@ -30,7 +30,8 @@ LIBS_SSP = $(shell $(TOPDIR)/makefiles/guess_env --libs-ssl)
EXE =
SO = .so
-INSTALL = install
GCC_MAJOR_VERSION = $(shell $(TOPDIR)/makefiles/guess_env --gcc-major-version $(CC))
GCC_MINOR_VERSION = $(shell $(TOPDIR)/makefiles/guess_env --gcc-minor-version $(CC))
+
+INSTALL = $(shell $(TOPDIR)/makefiles/guess_env --install $(CC))
diff --git a/makefiles/top.mk b/makefiles/top.mk
index 79aab0b..8bf2acc 100644
--- a/makefiles/top.mk
+++ b/makefiles/top.mk
@@ -10,6 +10,7 @@
# - target 'distclean'
# - target 'test'
# - target 'doc'
+# - target 'dist'
# - target 'help'
.PHONY: all
@@ -44,3 +45,4 @@ doc:
help:
@cat makefiles/help.mk
+-include $(TOPDIR)/makefiles/dist.mk
diff --git a/src/daemon/daemon.c b/src/daemon/daemon.c
index c79d43a..ad35298 100644
--- a/src/daemon/daemon.c
+++ b/src/daemon/daemon.c
@@ -23,32 +23,38 @@ static int exit_code_pipe[2] = { -1, -1 };
int daemon_parent_pipe[2] = { -1, -1 };
-#define TERMINATE_EXIT_CODE 99
-#define TERMINATE_PARENT 98
+typedef enum {
+ TERMINATE_OK,
+ TERMINATE_ERROR,
+ TERMINATE_EXIT_CODE,
+ TERMINATE_PARENT
+} daemon_state_t;
struct daemon_t {
daemon_params_t params; /**< the parameters for creation */
- error_t error; /**< error of last start */
+ daemon_state_t state; /**< last status of the daemon */
+ wolf_error_t error; /**< error of last start */
struct pidfile_t pidfile; /**< pid/lock file of the daemon */
struct group *groupent; /**< group entry */
struct passwd *userent; /**< password entry */
};
daemon_p daemon_new( daemon_params_t params,
- error_t *error ) {
+ wolf_error_t *error ) {
daemon_p d;
d = (struct daemon_t *)malloc( sizeof ( struct daemon_t ) );
if( d == NULL ) {
- *error = ERR_OUT_OF_MEMORY;
+ *error = WOLF_ERR_OUT_OF_MEMORY;
return NULL;
}
- d->error = -1;
+ d->state = TERMINATE_ERROR;
+ d->error = WOLF_ERR_INTERNAL;
d->params = params;
if( params.daemon_name == NULL ) {
- *error = ERR_INVALID_VALUE;
+ *error = WOLF_ERR_INVALID_VALUE;
return NULL;
}
@@ -58,7 +64,7 @@ daemon_p daemon_new( daemon_params_t params,
pidfile_set_from_filename( &d->pidfile, params.pid_filename );
}
- *error = OK;
+ *error = WOLF_OK;
return d;
}
@@ -67,7 +73,7 @@ void daemon_free( daemon_p d ) {
d = NULL;
}
-static error_t close_fd( int fd ) {
+static wolf_error_t close_fd( int fd ) {
if( close( fd ) < 0 ) {
switch( errno ) {
case EBADF:
@@ -77,34 +83,34 @@ static error_t close_fd( int fd ) {
default:
LOG( log_EMERG, "Error while closing file descriptor %d: %s (%d)",
fd, strerror( errno ), errno );
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
}
- return OK;
+ return WOLF_OK;
}
-static error_t daemon_close_standard_fds( void ) {
- error_t error;
+static wolf_error_t daemon_close_standard_fds( void ) {
+ wolf_error_t error;
- if( ( error = close_fd( STDIN_FILENO ) ) != OK ) return error;
- if( ( error = close_fd( STDOUT_FILENO ) ) != OK ) return error;
- if( ( error = close_fd( STDERR_FILENO ) ) != OK ) return error;
+ if( ( error = close_fd( STDIN_FILENO ) ) != WOLF_OK ) return error;
+ if( ( error = close_fd( STDOUT_FILENO ) ) != WOLF_OK ) return error;
+ if( ( error = close_fd( STDERR_FILENO ) ) != WOLF_OK ) return error;
- return OK;
+ return WOLF_OK;
}
-static error_t daemon_close_all_fds( void ) {
+static wolf_error_t daemon_close_all_fds( void ) {
long nof_files;
int i;
- error_t error;
+ wolf_error_t error;
nof_files = sysconf( _SC_OPEN_MAX );
if( nof_files < 0 ) {
LOG( log_EMERG, "Unable to retrieve maximal number of files: %s (%d)",
strerror( errno ), errno );
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
LOG( log_DEBUG, "Closing all filedescriptors up to %ld", nof_files );
@@ -120,28 +126,28 @@ static error_t daemon_close_all_fds( void ) {
( i == exit_code_pipe[1] ) ) {
continue;
}
- if( ( error = close_fd( i ) ) != OK ) return error;
+ if( ( error = close_fd( i ) ) != WOLF_OK ) return error;
}
- return OK;
+ return WOLF_OK;
}
-static error_t open_null_fd( int must_fd, int flags ) {
+static wolf_error_t open_null_fd( int must_fd, int flags ) {
int fd;
fd = open( "/dev/null", flags );
if( fd < 0 ) {
LOG( log_EMERG, "Unable to open fd %d as /dev/null: %s (%d)",
must_fd, strerror( errno ), errno );
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
if( fd != must_fd ) {
LOG( log_EMERG, "Something is wrong with the file descriptors (expecting %d,got %d)!",
must_fd, fd );
- return ERR_PROGRAMMING;
+ return WOLF_ERR_PROGRAMMING;
}
- return OK;
+ return WOLF_OK;
}
static void atomar_write( int fd, void *data, size_t data_len ) {
@@ -174,10 +180,10 @@ atomar_read_again:
}
}
-error_t daemon_start( daemon_p d ) {
+wolf_error_t daemon_start( daemon_p d ) {
pid_t pid;
mode_t mode;
- error_t error;
+ wolf_error_t error;
int exit_code;
/* Our parent is already the init process (which has pid 1 by
@@ -186,7 +192,7 @@ error_t daemon_start( daemon_p d ) {
*/
if( getppid( ) == 1 ) {
LOG( log_EMERG, "Already running as daemon!" );
- return( d->error = ERR_PROGRAMMING );
+ return( d->error = WOLF_ERR_PROGRAMMING );
}
/* Are we starting as root? If not, bail out, we need root
@@ -197,7 +203,7 @@ error_t daemon_start( daemon_p d ) {
*/
if( geteuid( ) != 0 ) {
LOG( log_EMERG, "Unable to start daemon as not root user!" );
- return( d->error = ERR_INVALID_STATE );
+ return( d->error = WOLF_ERR_INVALID_STATE );
}
/* We fork so SIGCHLD signals get to the parent and grandfather.
@@ -223,7 +229,7 @@ error_t daemon_start( daemon_p d ) {
if( pipe( exit_code_pipe ) < 0 ) {
LOG( log_EMERG, "Unable to create exit code pipe: %s (%d)",
strerror( errno ), errno );
- return ( d->error = ERR_INTERNAL );
+ return ( d->error = WOLF_ERR_INTERNAL );
}
LOG( log_DEBUG, "Created exit code pipe (%d,%d)", exit_code_pipe[0], exit_code_pipe[1] );
@@ -234,7 +240,7 @@ error_t daemon_start( daemon_p d ) {
case -1:
/* error */
LOG( log_EMERG, "Unable to fork the first time: %s", strerror( errno ) );
- return ( d->error = ERR_INTERNAL );
+ return ( d->error = WOLF_ERR_INTERNAL );
case 0:
/* the child becomes the daemon */
@@ -249,7 +255,7 @@ error_t daemon_start( daemon_p d ) {
* code from the error pipe
*/
LOG( log_DEBUG, "Parent after first fork: child is %d", pid );
- return ( d->error = TERMINATE_EXIT_CODE );
+ return ( d->state = TERMINATE_EXIT_CODE );
}
/* second pipe communicates from the daemon back to its parent
@@ -258,7 +264,7 @@ error_t daemon_start( daemon_p d ) {
if( pipe( daemon_parent_pipe ) < 0 ) {
LOG( log_EMERG, "Unable to create parent pipe: %s (%d)",
strerror( errno ), errno );
- return ( d->error = ERR_INTERNAL );
+ return ( d->error = WOLF_ERR_INTERNAL );
}
LOG( log_DEBUG, "Created parent pipe (%d,%d)", daemon_parent_pipe[0], daemon_parent_pipe[1] );
@@ -269,7 +275,7 @@ error_t daemon_start( daemon_p d ) {
if( setsid( ) < 0 ) {
/* should actually never fail */
LOG( log_EMERG, "Starting new process group session for the parent of the daemon failed: %s", strerror( errno ) );
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
/* We fork so SIGCHLD signals get to the parent and grandfather.
@@ -296,7 +302,7 @@ error_t daemon_start( daemon_p d ) {
case -1:
/* error */
LOG( log_EMERG, "Unable to fork the second time: %s", strerror( errno ) );
- return ( d->error = ERR_INTERNAL );
+ return ( d->error = WOLF_ERR_INTERNAL );
case 0:
/* the child becomes the daemon */
@@ -306,13 +312,13 @@ error_t daemon_start( daemon_p d ) {
default:
(void)signal_install_handlers_parent( );
LOG( log_DEBUG, "Parent after second fork: child (and daemon) is %d", pid );
- return ( d->error = TERMINATE_PARENT );
+ return ( d->state = TERMINATE_PARENT );
}
/* Now install signal handlers */
- if( ( error = signal_initialize( ) ) != OK )
+ if( ( error = signal_initialize( ) ) != WOLF_OK )
return ( d->error = error );
- if( ( error = signal_install_handlers_daemon( ) ) != OK )
+ if( ( error = signal_install_handlers_daemon( ) ) != WOLF_OK )
return ( d->error = error );
/* Put the daemon in it's own process group and finally detach it
@@ -322,7 +328,7 @@ error_t daemon_start( daemon_p d ) {
if( setsid( ) < 0 ) {
/* should actually never fail */
LOG( log_EMERG, "Starting new process group for daemon session failed: %s", strerror( errno ) );
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
/* Change to the root directory for several reasons:
@@ -335,7 +341,7 @@ error_t daemon_start( daemon_p d ) {
*/
if( chdir( "/" ) < 0 ) {
LOG( log_EMERG, "Changing to root diretory failed: %s", strerror( errno ) );
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
LOG( log_DEBUG, "Changed to root directory /" );
@@ -348,11 +354,11 @@ error_t daemon_start( daemon_p d ) {
LOG( log_DEBUG, "Switched umask from %04o to %04o", mode, 0133 );
/* check if another daemon is already running, if yes, bail out */
- if( is_daemon_running( &d->pidfile, &pid, &error ) || ( error != OK ) ) {
- if( error == OK ) {
+ if( is_daemon_running( &d->pidfile, &pid, &error ) || ( error != WOLF_OK ) ) {
+ if( error == WOLF_OK ) {
LOG( log_EMERG, "Another daemon is already running with pid '%d', can't start!", pid );
}
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
/* we loose logfile and syslog file descriptors anyway, so close
@@ -362,16 +368,16 @@ error_t daemon_start( daemon_p d ) {
closelogtostderr( );
/* close all filedescriptors */
- if( daemon_close_all_fds( ) != OK )
- return ERR_INTERNAL;
+ if( daemon_close_all_fds( ) != WOLF_OK )
+ return WOLF_ERR_INTERNAL;
/* reopen the logs to the logfile and syslog (not stderr) */
reopenlogtosyslog( );
reopenlogtofile( );
/* create and lock the pidfile now, write pid of daemon into it */
- if( pidfile_create( &d->pidfile ) != OK ) {
- return ERR_INTERNAL;
+ if( pidfile_create( &d->pidfile ) != WOLF_OK ) {
+ return WOLF_ERR_INTERNAL;
}
/* Install the final permissions for new files. The reason is
@@ -399,7 +405,7 @@ error_t daemon_start( daemon_p d ) {
LOG( log_EMERG, "Unable to retrieve group information for group '%s': %s (%d)",
d->params.group_name, strerror( errno ), errno );
}
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
errno = 0;
@@ -411,19 +417,19 @@ error_t daemon_start( daemon_p d ) {
LOG( log_EMERG, "Unable to retrieve user information for user '%s': %s (%d)",
d->params.user_name, strerror( errno ), errno );
}
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
if( setgid( d->userent->pw_gid ) < 0 ) {
LOG( log_EMERG, "Setting unprivileged group failed: %s (%d)",
strerror( errno ), errno );
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
if( setuid( d->userent->pw_uid ) < 0 ) {
LOG( log_EMERG, "Setting unprivileged user failed: %s (%d)",
strerror( errno ), errno );
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
/* TODO: setsid and setting all groups of the user */
@@ -440,10 +446,10 @@ error_t daemon_start( daemon_p d ) {
* starting the daemon by hand still gets error messages
* on stderr.
*/
- if( ( error = daemon_close_standard_fds( ) ) != OK ) return error;
- if( ( error = open_null_fd( STDIN_FILENO, O_RDONLY ) ) != OK ) return error;
- if( ( error = open_null_fd( STDOUT_FILENO, O_WRONLY ) ) != OK ) return error;
- if( ( error = open_null_fd( STDERR_FILENO, O_WRONLY ) ) != OK ) return error;
+ if( ( error = daemon_close_standard_fds( ) ) != WOLF_OK ) return error;
+ if( ( error = open_null_fd( STDIN_FILENO, O_RDONLY ) ) != WOLF_OK ) return error;
+ if( ( error = open_null_fd( STDOUT_FILENO, O_WRONLY ) ) != WOLF_OK ) return error;
+ if( ( error = open_null_fd( STDERR_FILENO, O_WRONLY ) ) != WOLF_OK ) return error;
/* signal the grand-parent process, that he can return 0 to
* the calling shell/script
@@ -451,7 +457,8 @@ error_t daemon_start( daemon_p d ) {
exit_code = EXIT_SUCCESS;
atomar_write( exit_code_pipe[1], &exit_code, sizeof( int ) );
- return ( d->error = OK );
+ d->state = TERMINATE_OK;
+ return ( d->error = WOLF_OK );
}
NORETURN void daemon_exit( daemon_p d ) {
@@ -460,7 +467,7 @@ NORETURN void daemon_exit( daemon_p d ) {
LOG( log_DEBUG, "daemon_exit called with error %d", d->error );
- switch( d->error ) {
+ switch( d->state ) {
case TERMINATE_EXIT_CODE:
/* wait here for exit code in exit_code_pipe
* so we can return the correct exit code to
@@ -504,7 +511,7 @@ NORETURN void daemon_exit( daemon_p d ) {
/* exit code is irrelevant here.. */
exit( EXIT_SUCCESS );
- case OK:
+ case TERMINATE_OK:
/* close and unlock the pidfile here */
(void)pidfile_release( &d->pidfile );
@@ -519,8 +526,8 @@ NORETURN void daemon_exit( daemon_p d ) {
/* exit code is irrelevant here */
_exit( EXIT_SUCCESS );
-
- default:
+
+ case TERMINATE_ERROR:
/* no exit_code_pipe exists yet, we are before the
* first fork, so terminate with proper exit code
*/
diff --git a/src/daemon/pidfile.c b/src/daemon/pidfile.c
index 53f81c9..0456425 100644
--- a/src/daemon/pidfile.c
+++ b/src/daemon/pidfile.c
@@ -39,7 +39,7 @@ void pidfile_set_from_filename( struct pidfile_t *pidfile, const char *filename
snprintf( pidfile->filename, PATH_MAX, "%s", filename );
}
-bool is_daemon_running( struct pidfile_t *pidfile, pid_t *pid, error_t *error ) {
+bool is_daemon_running( struct pidfile_t *pidfile, pid_t *pid, wolf_error_t *error ) {
int res;
ssize_t bytes_read;
char buf[256];
@@ -55,11 +55,11 @@ bool is_daemon_running( struct pidfile_t *pidfile, pid_t *pid, error_t *error )
/* this is good, pid file doesn't exist at all */
LOG( log_DEBUG, "No pidfile '%s' found, daemon is not running", pidfile->filename );
(void)close( pidfile->fd );
- *error = OK;
+ *error = WOLF_OK;
return pidfile->running;
} else {
LOG( log_EMERG, "Unable to open pidfile '%s' for reading: %s", pidfile->filename, strerror( errno ) );
- *error = ERR_INTERNAL;
+ *error = WOLF_ERR_INTERNAL;
return pidfile->running;
}
}
@@ -70,13 +70,13 @@ bool is_daemon_running( struct pidfile_t *pidfile, pid_t *pid, error_t *error )
if( errno == EAGAIN ) {
/* another process locks the file already */
LOG( log_DEBUG, "Another process locks the pidfile, daemon already running" );
- *error = OK;
+ *error = WOLF_OK;
pidfile->locked = true;
pidfile->running = true;
} else {
LOG( log_EMERG, "Unable to lock pidfile '%s': %s", pidfile->filename, strerror( errno ) );
(void)close( pidfile->fd );
- *error = ERR_INTERNAL;
+ *error = WOLF_ERR_INTERNAL;
pidfile->running = false;
return pidfile->running;
}
@@ -89,7 +89,7 @@ bool is_daemon_running( struct pidfile_t *pidfile, pid_t *pid, error_t *error )
if( bytes_read < 0 ) {
LOG( log_EMERG, "Unable to read pid from pidfile '%s': %s", pidfile->filename, strerror( errno ) );
(void)close( pidfile->fd );
- *error = ERR_INTERNAL;
+ *error = WOLF_ERR_INTERNAL;
return pidfile->running;
}
@@ -105,7 +105,7 @@ bool is_daemon_running( struct pidfile_t *pidfile, pid_t *pid, error_t *error )
( *pid < 2 ) /* too small value */ ) {
LOG( log_EMERG, "pidfile '%s' contains invalid data, can't read PID from it!", pidfile->filename );
(void)close( pidfile->fd );
- *error = ERR_INTERNAL;
+ *error = WOLF_ERR_INTERNAL;
return pidfile->running;
}
LOG( log_DEBUG, "Found PID '%lu' in pidfile", *pid );
@@ -119,12 +119,12 @@ bool is_daemon_running( struct pidfile_t *pidfile, pid_t *pid, error_t *error )
/* this is fine, process doesn't exist with this PID */
LOG( log_EMERG, "Found PID '%lu' in pidfile '%s', but no such process is running. Check and manually delete the pidfile!", *pid, pidfile->filename );
(void)close( pidfile->fd );
- *error = ERR_INTERNAL;
+ *error = WOLF_ERR_INTERNAL;
return pidfile->running;
} else {
LOG( log_EMERG, "Can't check if processor with PID '%lu' is alive: %s", *pid, strerror( errno ) );
(void)close( pidfile->fd );
- *error = ERR_INTERNAL;
+ *error = WOLF_ERR_INTERNAL;
return pidfile->running;
}
}
@@ -134,11 +134,11 @@ bool is_daemon_running( struct pidfile_t *pidfile, pid_t *pid, error_t *error )
* (worst case, we assume, it's the daemon)
*/
(void)close( pidfile->fd );
- *error = OK;
+ *error = WOLF_OK;
return pidfile->running;
}
-error_t pidfile_create( struct pidfile_t *pidfile ) {
+wolf_error_t pidfile_create( struct pidfile_t *pidfile ) {
int res;
char pid_string[20];
ssize_t bytes_writen;
@@ -147,7 +147,7 @@ error_t pidfile_create( struct pidfile_t *pidfile ) {
pidfile->fd = open( pidfile->filename, O_CREAT | O_WRONLY | O_EXCL, 0644 );
if( pidfile->fd < 0 ) {
LOG( log_EMERG, "Unable to open pidfile '%s' for writing: %s", pidfile->filename, strerror( errno ) );
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
/* Try to lock the pid file (non-blocking) */
@@ -160,12 +160,12 @@ error_t pidfile_create( struct pidfile_t *pidfile ) {
LOG( log_EMERG, "Unable to lock pidfile '%s' after creation, daemon started in parallel?", pidfile->filename );
(void)close( pidfile->fd );
(void)unlink( pidfile->filename );
- return ERR_INVALID_STATE;
+ return WOLF_ERR_INVALID_STATE;
} else {
LOG( log_EMERG, "Unable to lock pidfile '%s' after creation: %s", pidfile->filename, strerror( errno ) );
(void)close( pidfile->fd );
(void)unlink( pidfile->filename );
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
}
@@ -176,7 +176,7 @@ error_t pidfile_create( struct pidfile_t *pidfile ) {
LOG( log_EMERG, "Unable to truncate the pidfile '%s' before writing to it", pidfile->filename, strerror( errno ) );
(void)close( pidfile->fd );
(void)unlink( pidfile->filename );
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
/* We remember the pid in the file for init scripts which rely on the pid
@@ -188,7 +188,7 @@ error_t pidfile_create( struct pidfile_t *pidfile ) {
LOG( log_EMERG, "Unable to write PID into the pidfile '%s': %s", pidfile->filename, strerror( errno ) );
(void)close( pidfile->fd );
(void)unlink( pidfile->filename );
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
} else if( bytes_writen != (ssize_t)strlen( pid_string ) ) {
/* non-atomic write on files with so little data, strange, should never happen! */
LOG( log_EMERG, "Non-atomic write failed when storing the PID into the pidfile '%s'", pidfile->filename );
@@ -197,11 +197,11 @@ error_t pidfile_create( struct pidfile_t *pidfile ) {
pidfile->locked = true;
- return OK;
+ return WOLF_OK;
}
-error_t pidfile_release( struct pidfile_t *pidfile ) {
- error_t error = OK;
+wolf_error_t pidfile_release( struct pidfile_t *pidfile ) {
+ wolf_error_t error = WOLF_OK;
LOG( log_DEBUG, "Releasing (unlocking/closing) pidfile '%s' (fd: %d, locked: %d)",
pidfile->filename, pidfile->fd, pidfile->locked );
@@ -210,7 +210,7 @@ error_t pidfile_release( struct pidfile_t *pidfile ) {
if( lockf( pidfile->fd, F_ULOCK, (off_t)0 ) < 0 ) {
LOG( log_ALERT, "Unable to unlock the pidfile '%s': %s (%d)",
pidfile->filename, strerror( errno ), errno );
- error = ERR_INTERNAL;
+ error = WOLF_ERR_INTERNAL;
}
}
@@ -218,7 +218,7 @@ error_t pidfile_release( struct pidfile_t *pidfile ) {
if( close( pidfile->fd ) < 0 ) {
LOG( log_ALERT, "Unable to close the pidfile '%s': %s (%d)",
pidfile->filename, strerror( errno ), errno );
- error = ERR_INTERNAL;
+ error = WOLF_ERR_INTERNAL;
}
pidfile->fd = -1;
}
@@ -226,8 +226,8 @@ error_t pidfile_release( struct pidfile_t *pidfile ) {
return error;
}
-error_t pidfile_remove( struct pidfile_t *pidfile ) {
- error_t error = OK;
+wolf_error_t pidfile_remove( struct pidfile_t *pidfile ) {
+ wolf_error_t error = WOLF_OK;
LOG( log_DEBUG, "Removing pidfile '%s' (fd: %d, locked: %d, running: %d)",
pidfile->filename, pidfile->fd, pidfile->locked, pidfile->running );
@@ -237,7 +237,7 @@ error_t pidfile_remove( struct pidfile_t *pidfile ) {
if( unlink( pidfile->filename ) < 0 ) {
LOG( log_ALERT, "Unable to remove the pidfile '%s': %s (%d)",
pidfile->filename, strerror( errno ), errno );
- error = ERR_INTERNAL;
+ error = WOLF_ERR_INTERNAL;
}
return error;
diff --git a/src/daemon/pidfile.h b/src/daemon/pidfile.h
index 25ddd48..8b1c40e 100644
--- a/src/daemon/pidfile.h
+++ b/src/daemon/pidfile.h
@@ -21,12 +21,12 @@ void pidfile_set_from_daemon_name( struct pidfile_t *pidfile, const char *daemon
void pidfile_set_from_filename( struct pidfile_t *pidfile, const char *filename );
-bool is_daemon_running( struct pidfile_t *pidfile, pid_t *pid, error_t *error );
+bool is_daemon_running( struct pidfile_t *pidfile, pid_t *pid, wolf_error_t *error );
-error_t pidfile_create( struct pidfile_t *pidfile );
+wolf_error_t pidfile_create( struct pidfile_t *pidfile );
-error_t pidfile_release( struct pidfile_t *pidfile );
+wolf_error_t pidfile_release( struct pidfile_t *pidfile );
-error_t pidfile_remove( struct pidfile_t *pidfile );
+wolf_error_t pidfile_remove( struct pidfile_t *pidfile );
#endif /* ifndef __PIDFILE_H */
diff --git a/src/daemon/signals.c b/src/daemon/signals.c
index b455838..c5b4563 100644
--- a/src/daemon/signals.c
+++ b/src/daemon/signals.c
@@ -150,7 +150,7 @@ const char *signal_get_long_name( int sig ) {
}
}
-static error_t vsignal_install_ignore( int sig, va_list ap ) {
+static wolf_error_t vsignal_install_ignore( int sig, va_list ap ) {
struct sigaction sa;
char errbuf[1024];
@@ -166,7 +166,7 @@ install_ignore_again:
sig,
errbuf,
errno );
- return ERR_PROGRAMMING;
+ return WOLF_ERR_PROGRAMMING;
}
LOG( log_DEBUG, "Ignoring signal handler for signal '%s' (%s)",
signal_get_long_name( sig ),
@@ -174,7 +174,7 @@ install_ignore_again:
sig = va_arg( ap, int );
if( sig > 0 ) goto install_ignore_again;
- return OK;
+ return WOLF_OK;
}
/* some signals we should not ignore, like SIGPIPE or SIGC(H)LD, because
@@ -185,7 +185,7 @@ static void empty_handler( int sig ) {
UNUSED( sig );
}
-static error_t vsignal_install_empty( int sig, va_list ap ) {
+static wolf_error_t vsignal_install_empty( int sig, va_list ap ) {
struct sigaction sa;
char errbuf[1024];
@@ -201,7 +201,7 @@ install_empty_again:
sig,
errbuf,
errno );
- return ERR_PROGRAMMING;
+ return WOLF_ERR_PROGRAMMING;
}
LOG( log_DEBUG, "Installed empty signal handler for signal '%s' (%s)",
signal_get_long_name( sig ),
@@ -209,7 +209,7 @@ install_empty_again:
sig = va_arg( ap, int );
if( sig > 0 ) goto install_empty_again;
- return OK;
+ return WOLF_OK;
}
static void fatal_handler( int sig ) {
@@ -232,7 +232,7 @@ static void fatal_handler( int sig ) {
kill( getpid( ), sig );
}
-static error_t vsignal_install_func( signal_func_t func, int sig, va_list ap ) {
+static wolf_error_t vsignal_install_func( signal_func_t func, int sig, va_list ap ) {
struct sigaction sa;
char errbuf[1024];
@@ -249,7 +249,7 @@ install_func_again:
sig,
errbuf,
errno );
- return ERR_PROGRAMMING;
+ return WOLF_ERR_PROGRAMMING;
}
LOG( log_DEBUG, "Installed signal handler for signal '%s' (%s)",
signal_get_long_name( sig ),
@@ -257,12 +257,12 @@ install_func_again:
sig = va_arg( ap, int );
if( sig > 0 ) goto install_func_again;
- return OK;
+ return WOLF_OK;
}
-error_t signal_install_func( signal_func_t func, int sig, ... ) {
+wolf_error_t signal_install_func( signal_func_t func, int sig, ... ) {
va_list ap;
- error_t error;
+ wolf_error_t error;
va_start( ap, sig );
error = vsignal_install_func( func, sig, ap );
va_end( ap );
@@ -270,9 +270,9 @@ error_t signal_install_func( signal_func_t func, int sig, ... ) {
}
#define INSTALL_SIGNAL( MODE ) \
-error_t signal_install_##MODE( int sig, ... ) { \
+wolf_error_t signal_install_##MODE( int sig, ... ) { \
va_list ap; \
- error_t error; \
+ wolf_error_t error; \
va_start( ap, sig ); \
error = vsignal_install_##MODE( sig, ap ); \
va_end( ap ); \
@@ -283,9 +283,9 @@ INSTALL_SIGNAL( ignore )
INSTALL_SIGNAL( empty )
#define INSTALL_SIGNAL_FUNC( MODE, FUNC ) \
-error_t signal_install_##MODE( int sig, ... ) { \
+wolf_error_t signal_install_##MODE( int sig, ... ) { \
va_list ap; \
- error_t error; \
+ wolf_error_t error; \
va_start( ap, sig ); \
error = vsignal_install_func( FUNC, sig, ap ); \
va_end( ap ); \
@@ -309,13 +309,13 @@ static void notify_handler( int sig ) {
INSTALL_SIGNAL_FUNC( notify, notify_handler )
INSTALL_SIGNAL_FUNC( notify_parent, notify_parent_handler )
-error_t signal_initialize( void ) {
+wolf_error_t signal_initialize( void ) {
int res;
char errbuf[1024];
if( daemon_signal_pipe[0] != -1 ||
daemon_signal_pipe[1] != -1 ) {
- return ERR_INVALID_STATE;
+ return WOLF_ERR_INVALID_STATE;
}
res = pipe( daemon_signal_pipe );
@@ -323,11 +323,11 @@ error_t signal_initialize( void ) {
(void)strerror_r( errno, errbuf, 1024 );
LOG( log_EMERG, "Unable to create signal pipe: %s (%d)",
errbuf, errno );
- return ERR_INTERNAL;
+ return WOLF_ERR_INTERNAL;
}
LOG( log_DEBUG, "Created signal pipe (%d,%d)", daemon_signal_pipe[0], daemon_signal_pipe[1] );
- return OK;
+ return WOLF_OK;
}
void signal_terminate( void ) {
@@ -335,7 +335,7 @@ void signal_terminate( void ) {
(void)close( daemon_signal_pipe[1] );
}
-int signal_suspend( int timeout, error_t *error ) {
+int signal_suspend( int timeout, wolf_error_t *error ) {
struct timeval tv;
fd_set fds;
ssize_t res;
@@ -343,7 +343,7 @@ int signal_suspend( int timeout, error_t *error ) {
char errbuf[1024];
if( daemon_signal_pipe[0] == -1 ) {
- *error = ERR_INVALID_STATE;
+ *error = WOLF_ERR_INVALID_STATE;
return -1;
}
@@ -360,7 +360,7 @@ signal_select_again:
break;
case 0: /* timeout */
- *error = ERR_TIMEOUT;
+ *error = WOLF_ERR_TIMEOUT;
return 0;
case -1: /* error */
@@ -370,7 +370,7 @@ signal_select_again:
(void)strerror_r( errno, errbuf, 1024 );
LOG( log_EMERG, "Error in select when waiting for signal from pipe: %s (%d)",
errbuf, errno );
- *error = ERR_INTERNAL;
+ *error = WOLF_ERR_INTERNAL;
return -1;
}
@@ -383,21 +383,21 @@ signal_select_again:
(void)strerror_r( errno, errbuf, 1024 );
LOG( log_EMERG, "Error while reading a signal from the pipe: %s (%d)",
errbuf, errno );
- *error = ERR_INTERNAL;
+ *error = WOLF_ERR_INTERNAL;
return -1;
default: /* unexpected result on atomic read */
LOG( log_EMERG, "Unexpected error in read: result is %d", res );
- *error = ERR_PROGRAMMING;
+ *error = WOLF_ERR_PROGRAMMING;
return -1;
}
- *error = OK;
+ *error = WOLF_OK;
return sig;
}
-error_t signal_install_handlers_parent( void ) {
- error_t error;
+wolf_error_t signal_install_handlers_parent( void ) {
+ wolf_error_t error;
/* signals to ignore */
if( ( error = signal_install_ignore(
@@ -429,7 +429,7 @@ error_t signal_install_handlers_parent( void ) {
SIGHUP,
SIGUSR1,
SIGUSR2,
- 0 ) ) != OK ) return error;
+ 0 ) ) != WOLF_OK ) return error;
/* signals for empty handlers */
if( ( error = signal_install_empty(
@@ -445,7 +445,7 @@ error_t signal_install_handlers_parent( void ) {
#endif
#endif
#endif
- 0 ) ) != OK ) return error;
+ 0 ) ) != WOLF_OK ) return error;
/* fatal signal handlers, make sure the parent can read the
* signal and clean up
@@ -469,14 +469,14 @@ error_t signal_install_handlers_parent( void ) {
SIGSYS,
#endif
SIGALRM, /* we don't use it, but maybe a plugin */
- 0 ) ) != OK ) return error;
+ 0 ) ) != WOLF_OK ) return error;
- return OK;
+ return WOLF_OK;
}
-error_t signal_install_handlers_daemon( void ) {
- error_t error;
+wolf_error_t signal_install_handlers_daemon( void ) {
+ wolf_error_t error;
/* signals to ignore */
if( ( error = signal_install_ignore(
@@ -503,7 +503,7 @@ error_t signal_install_handlers_daemon( void ) {
#if defined( SIGPWR )
SIGPWR,
#endif
- 0 ) ) != OK ) return error;
+ 0 ) ) != WOLF_OK ) return error;
/* signals for empty handlers */
if( ( error = signal_install_empty(
@@ -519,7 +519,7 @@ error_t signal_install_handlers_daemon( void ) {
#endif
#endif
#endif
- 0 ) ) != OK ) return error;
+ 0 ) ) != WOLF_OK ) return error;
/* fatal signal handlers, log the exception and continue with
* default behaviour of the system
@@ -543,7 +543,7 @@ error_t signal_install_handlers_daemon( void ) {
SIGSYS,
#endif
SIGALRM, /* we don't use it, but maybe a plugin */
- 0 ) ) != OK ) return error;
+ 0 ) ) != WOLF_OK ) return error;
/* notify the following signals to the main loop */
if( ( error = signal_install_notify(
@@ -552,8 +552,8 @@ error_t signal_install_handlers_daemon( void ) {
SIGHUP,
SIGUSR1,
SIGUSR2,
- 0 ) ) != OK ) return error;
+ 0 ) ) != WOLF_OK ) return error;
- return OK;
+ return WOLF_OK;
}
diff --git a/src/port/snprintf.c b/src/port/snprintf.c
index 65d9602..6062154 100644
--- a/src/port/snprintf.c
+++ b/src/port/snprintf.c
@@ -532,7 +532,9 @@ static UINTMAX_T cast(LDOUBLE);
static UINTMAX_T myround(LDOUBLE);
static LDOUBLE mypow10(int);
+/* not really good!
extern int errno;
+*/
int
rpl_vsnprintf(char *str, size_t size, const char *format, va_list args)
diff --git a/src/port/snprintf.h b/src/port/snprintf.h
index c374a15..4e06c8b 100644
--- a/src/port/snprintf.h
+++ b/src/port/snprintf.h
@@ -3,13 +3,28 @@
#include "port/sys.h"
+/* impose some defaults, if we need snprintf and friends on the platform
+ * given, we define the proper values in include/port/sys.h
+ */
+#ifndef HAVE_CONFIG_H
#define HAVE_CONFIG_H 0
+#endif
#define TEST_SNPRINTF 0
+#ifndef HAVE_STDARG_H
#define HAVE_STDARG_H 1
+#endif
+#ifndef HAVE_STDDEF_H
#define HAVE_STDDEF_H 1
+#endif
+#ifndef HAVE_SYS_TYPES_H
#define HAVE_SYS_TYPES_H 1
+#endif
+#ifndef HAVE_STDLIB_H
#define HAVE_STDLIB_H 1
+#endif
+#ifndef HAVE_VA_COPY
#define HAVE_VA_COPY 1
+#endif
#if HAVE_STDARG_H
#include <stdarg.h> /* for va_list */
diff --git a/src/port/stdint.h b/src/port/stdint.h
index 345ec7e..ec4f0ce 100644
--- a/src/port/stdint.h
+++ b/src/port/stdint.h
@@ -3,13 +3,29 @@
#include "port/sys.h"
-#if defined HAVE_STDINT_H
-#include <stdint.h>
-#endif /* defined HAVE_STDINT_H */
+/* for uintptr_t and snprintf placeholder PRIdPTR (FIXME:
+ * needs a lot of improvement!)
+ */
+#if defined SUNOS
+
+#if OS_MAJOR_VERSION == 5
-/* Solaris 8 weirdness */
-#if defined HAVE_LINK_H
-#include <link.h>
-#endif /* defined HAVE_LINK_H */
+#if OS_MINOR_VERSION == 8
+#include <sys/int_types.h>
+/* FIXME: this may depend on 32/64-bit version of Solaris 8! */
+#define PRIdPTR "d"
+typedef unsigned long long uint64_t;
+#else
+#include <inttypes.h>
+#include <stdint.h>
+#endif /* OS_MINOR_VERSION == 8 */
+#else
+#include <inttypes.h>
+#include <stdint.h>
+#endif /* OS_MAJOR_VERSION == 5 */
+#else
+#include <inttypes.h>
+#include <stdint.h>
+#endif /* defined SUNOS */
#endif /* ifndef __STDINT_H */
diff --git a/tests/daemon/testd.c b/tests/daemon/testd.c
index 4b380ef..92dfc35 100644
--- a/tests/daemon/testd.c
+++ b/tests/daemon/testd.c
@@ -46,7 +46,7 @@ static int read_config( const char *filename, struct gengetopt_args_info *args_i
int main( int argc, char *argv[] ) {
struct gengetopt_args_info args_info;
- error_t error;
+ wolf_error_t error;
daemon_params_t daemon_params;
daemon_p demon = NULL;
int sig = 0;
@@ -94,16 +94,16 @@ int main( int argc, char *argv[] ) {
exit( EXIT_FAILURE );
}
- if( ( error = daemon_start( demon ) ) != OK ) {
+ if( ( error = daemon_start( demon ) ) != WOLF_OK ) {
cmdline_parser_free( &args_info );
daemon_exit( demon );
}
} else {
- if( ( error = signal_initialize( ) ) != OK ) {
+ if( ( error = signal_initialize( ) ) != WOLF_OK ) {
cmdline_parser_free( &args_info );
exit( EXIT_FAILURE );
}
- if( ( error = signal_install_handlers_daemon( ) ) != OK ) {
+ if( ( error = signal_install_handlers_daemon( ) ) != WOLF_OK ) {
signal_terminate( );
cmdline_parser_free( &args_info );
exit( EXIT_FAILURE );