diff options
author | reinelt <> | 2003-08-08 06:58:06 +0000 |
---|---|---|
committer | reinelt <> | 2003-08-08 06:58:06 +0000 |
commit | c5e120b8fe161ad249c4c5b39882d7129cd38761 (patch) | |
tree | 58b0d87ec40dc853e52d4d3d15316ee6d48e8267 | |
parent | 30c378af7cabefb77a3a0017b3d044521d9f74c4 (diff) | |
download | lcd4linux-c5e120b8fe161ad249c4c5b39882d7129cd38761.tar.gz |
[lcd4linux @ 2003-08-08 06:58:06 by reinelt]
improved forking
-rw-r--r-- | ChangeLog | 5 | ||||
-rwxr-xr-x | configure | 20 | ||||
-rw-r--r-- | debug.c | 16 | ||||
-rw-r--r-- | lcd4linux.c | 62 |
4 files changed, 63 insertions, 40 deletions
@@ -1,3 +1,8 @@ +2003-08-08 Michael Reinelt <reinelt@lizard.reinelt> + + * ChangeLog, TODO, config.h.in, configure, configure.in, dvb.c, CREDITS: + uClibc compatibility issue; small glitch in dvb.c + 2003-08-01 Michael Reinelt <reinelt@lizard.reinelt> * Cwlinux.c, Makefile.am, Makefile.in, README, T6963.c: @@ -1135,7 +1135,7 @@ _ASBOX echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 - rm -f core core.* *.core && + rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 @@ -4619,7 +4619,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi -rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi @@ -5273,7 +5273,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi -rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi @@ -6903,7 +6903,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_fork_works=no fi -rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5 @@ -7058,7 +7058,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_vfork_works=no fi -rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5 @@ -7144,7 +7144,7 @@ echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6 fi fi -#removed for ulibc compatibility +#removed for uClibc compatibility #AC_FUNC_MALLOC echo "$as_me:$LINENO: checking for working memcmp" >&5 echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6 @@ -7214,7 +7214,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_memcmp_working=no fi -rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5 @@ -7412,7 +7412,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_realloc_0_nonnull=no fi -rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_func_realloc_0_nonnull" >&5 @@ -7774,7 +7774,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_lstat_dereferences_slashed_symlink=no fi -rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi else # If the `ln -s' command failed, then we probably don't even @@ -7843,7 +7843,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_stat_empty_string_bug=no fi -rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_func_stat_empty_string_bug" >&5 @@ -1,4 +1,4 @@ -/* $Id: debug.c,v 1.3 2001/03/12 12:39:36 reinelt Exp $ +/* $Id: debug.c,v 1.4 2003/08/08 06:58:06 reinelt Exp $ * * debug() and error() functions * @@ -20,6 +20,9 @@ * * * $Log: debug.c,v $ + * Revision 1.4 2003/08/08 06:58:06 reinelt + * improved forking + * * Revision 1.3 2001/03/12 12:39:36 reinelt * * reworked autoconf a lot: drivers may be excluded, #define's went to config.h @@ -62,6 +65,7 @@ void message (int level, const char *format, ...) static int log_open=0; extern int debugging; extern int foreground; + extern int background; if (level>debugging) return; @@ -69,15 +73,17 @@ void message (int level, const char *format, ...) (void) vsnprintf(buffer, sizeof(buffer), format, ap); va_end(ap); - if (foreground) { + if (!background) { #ifdef WITH_TEXT extern int curs_err(char *); if (!curs_err(buffer)) #endif - fprintf (level?stdout:stderr, "%s\n", buffer); - return; + fprintf (level?stdout:stderr, "%s\n", buffer); } - + + if (foreground) + return; + if (!log_open) { openlog ("LCD4Linux", LOG_PID, LOG_USER); log_open=1; diff --git a/lcd4linux.c b/lcd4linux.c index dee44fd..9a1e64b 100644 --- a/lcd4linux.c +++ b/lcd4linux.c @@ -1,4 +1,4 @@ -/* $Id: lcd4linux.c,v 1.39 2003/07/24 04:48:09 reinelt Exp $ +/* $Id: lcd4linux.c,v 1.40 2003/08/08 06:58:06 reinelt Exp $ * * LCD4Linux * @@ -20,6 +20,9 @@ * * * $Log: lcd4linux.c,v $ + * Revision 1.40 2003/08/08 06:58:06 reinelt + * improved forking + * * Revision 1.39 2003/07/24 04:48:09 reinelt * 'soft clear' needed for virtual rows * @@ -224,6 +227,7 @@ char *output=NULL; int got_signal=0; int debugging=0; int foreground=0; +int background=0; int tick, tack; static void usage(void) @@ -363,6 +367,26 @@ int main (int argc, char *argv[]) exit(2); } + info ("Version " VERSION " starting"); + if (!foreground && (my_argv[0]==NULL || my_argv[0][0]!='/')) { + info ("invoked without full path; restart may not work!"); + } + + // set default values + cfg_set ("row1", "*** %o %v ***"); + cfg_set ("row2", "%p CPU %r MB RAM"); + cfg_set ("row3", "Busy %cu%% $r10cu"); + cfg_set ("row4", "Load %l1%L$r10l1"); + + if (cfg_read (cfg)==-1) + exit (1); + + driver=cfg_get("display",NULL); + if (driver==NULL || *driver=='\0') { + error ("missing 'display' entry in %s!", cfg_file()); + exit (1); + } + if (!foreground) { pid_t i; int fd; @@ -377,11 +401,22 @@ int main (int argc, char *argv[]) // ignore nasty signals signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); + + // chdir("/") + if (chdir("/")!=0) { + error ("chdir(\"/\") failed: %s", strerror(errno)); + exit (1); + } + + // we want full control over permissions + umask (0); + // detach stdin if (freopen("/dev/null", "r", stdin)==NULL) { error ("freopen (/dev/null) failed: %s", strerror(errno)); exit (1); } + // detach stdout and stderr fd=open("/dev/null", O_WRONLY, 0666); if (fd==-1) { @@ -393,30 +428,7 @@ int main (int argc, char *argv[]) dup2(fd, STDOUT_FILENO); dup2(fd, STDERR_FILENO); close(fd); - } - - if (foreground) { - info ("Version " VERSION " starting"); - } else { - info ("Version " VERSION " starting"); - if (my_argv[0]==NULL || my_argv[0][0]!='/') { - info ("invoked without full path; restart may not work!"); - } - } - - // set default values - cfg_set ("row1", "*** %o %v ***"); - cfg_set ("row2", "%p CPU %r MB RAM"); - cfg_set ("row3", "Busy %cu%% $r10cu"); - cfg_set ("row4", "Load %l1%L$r10l1"); - - if (cfg_read (cfg)==-1) - exit (1); - - driver=cfg_get("display",NULL); - if (driver==NULL || *driver=='\0') { - error ("missing 'display' entry in %s!", cfg_file()); - exit (1); + background=1; } debug ("initializing driver %s", driver); |