about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2023-09-22 08:14:38 +0000
committerLaurent Bercot <ska@appnovation.com>2023-09-22 08:14:38 +0000
commit8d7cba497938020ee5e8f408e6a52cd37274722b (patch)
tree6b8fefa0a6c059b4a826c16db789677d4423e8a4
parent9107d979ad9bef3bd710efae86102286054136ee (diff)
downloadtipidee-8d7cba497938020ee5e8f408e6a52cd37274722b.tar.gz
tipidee-8d7cba497938020ee5e8f408e6a52cd37274722b.tar.xz
tipidee-8d7cba497938020ee5e8f408e6a52cd37274722b.zip
Make /etc configurable; fix some bugs
Signed-off-by: Laurent Bercot <ska@appnovation.com>
-rwxr-xr-xconfigure8
-rw-r--r--doc/tipidee-config.html4
-rw-r--r--doc/tipideed.html4
-rw-r--r--src/config/tipidee-config.c4
-rw-r--r--src/tipideed/send_file.c35
-rw-r--r--src/tipideed/tipideed.c2
6 files changed, 34 insertions, 23 deletions
diff --git a/configure b/configure
index 60c9c45..bbc68e7 100755
--- a/configure
+++ b/configure
@@ -23,6 +23,7 @@ Fine tuning of the installation directories:
   --libexecdir=DIR              package-scoped executables [EPREFIX/libexec]
   --libdir=DIR                  static library files [PREFIX/lib/$package]
   --includedir=DIR              C header files [PREFIX/include]
+  --sysconfdir=DIR              global configuration files [PREFIX/etc]
 
  If no --prefix option is given, by default libdir (but not dynlibdir) will be
  /usr/lib/$package, and includedir will be /usr/include.
@@ -140,6 +141,7 @@ libexecdir='$exec_prefix/libexec'
 bindir='$exec_prefix/bin'
 libdir='$prefix/lib/$package'
 includedir='$prefix/include'
+sysconfdir='$prefix/etc'
 sysdeps='$prefix/lib/skalibs/sysdeps'
 manualsysdeps=false
 shared=false
@@ -169,6 +171,7 @@ for arg ; do
     --bindir=*) bindir=${arg#*=} ;;
     --libdir=*) libdir=${arg#*=} ;;
     --includedir=*) includedir=${arg#*=} ;;
+    --sysconfdir=*) sysconfdir=${arg#*=} ;;
     --with-sysdeps=*) sysdeps=${arg#*=} manualsysdeps=true ;;
     --with-include=*) var=${arg#*=} ; stripdir var ; addincpath="$addincpath -I$var" ;;
     --with-lib=*) var=${arg#*=} ; stripdir var ; addlibspath="$addlibspath -L$var" ; vpaths="$vpaths $var" ;;
@@ -215,7 +218,7 @@ fi
 
 # Expand installation directories
 stripdir prefix
-for i in exec_prefix dynlibdir libexecdir bindir libdir includedir sysdeps sproot ; do
+for i in exec_prefix dynlibdir libexecdir bindir libdir includedir sysconfdir sysdeps sproot ; do
   eval tmp=\${$i}
   eval $i=$tmp
   stripdir $i
@@ -393,6 +396,7 @@ libexecdir := $libexecdir
 bindir := $bindir
 libdir := $libdir
 includedir := $includedir
+sysconfdir := $sysconfdir
 sysdeps := $sysdeps
 slashpackage := $slashpackage
 sproot := $sproot
@@ -468,6 +472,8 @@ else
   echo "#define ${package_macro_name}_EXTBINPREFIX \"\""
 fi
 echo "#define ${package_macro_name}_LIBEXECPREFIX \"$libexecdir/\""
+echo "#define ${package_macro_name}_SYSCONFPREFIX \"$sysconfdir/\""
+
 echo
 echo "#endif"
 exec 1>&3 3>&-
diff --git a/doc/tipidee-config.html b/doc/tipidee-config.html
index 39ca514..2ade779 100644
--- a/doc/tipidee-config.html
+++ b/doc/tipidee-config.html
@@ -32,7 +32,9 @@ web server.
 
 <ul>
  <li> tipidee-config reads the <a href="tipidee.conf.html">/etc/tipidee.conf</a>
-configuration file, parses it, and outputs a cdb file to <tt>/etc/tipidee.conf.cdb</tt>. </li>
+configuration file, parses it, and outputs a cdb file to <tt>/etc/tipidee.conf.cdb</tt>.
+(The <tt>/etc</tt> default can be changed at build time with the <tt>--sysconfdir</tt>
+option to configure.) </li>
  <li> It then exits 0. </li>
 </ul>
 
diff --git a/doc/tipideed.html b/doc/tipideed.html
index 1b1b17c..955948f 100644
--- a/doc/tipideed.html
+++ b/doc/tipideed.html
@@ -202,7 +202,9 @@ command line option overrides any setting present in the configuration file.</dd
  <dt> -f <em>file</em> </dt>
  <dd> Use <em>file</em> as the compiled configuration database, typically obtained
 by running <tt><a href="tipidee-config.html">tipidee-config</a> -o <em>file</em></tt>.
-The default is <tt>/etc/tipidee.conf.cdb</tt>. </dd>
+The default is <tt>/etc/tipidee.conf.cdb</tt>; <tt>/etc</tt> may be something
+else if the <tt>--sysconfdir</tt> option has been given to configure at
+build time. </dd>
 
  <dt> -d <em>docroot</em> </dt>
  <dd> Change the working directory to <em>docroot</em> before serving. Default
diff --git a/src/config/tipidee-config.c b/src/config/tipidee-config.c
index 235725d..3a8d999 100644
--- a/src/config/tipidee-config.c
+++ b/src/config/tipidee-config.c
@@ -87,8 +87,8 @@ static inline void conf_output (char const *ofile, unsigned int omode)
 
 int main (int argc, char const *const *argv, char const *const *envp)
 {
-  char const *ifile = "/etc/tipidee.conf" ;
-  char const *ofile = "/etc/tipidee.conf.cdb" ;
+  char const *ifile = TIPIDEE_SYSCONFPREFIX "tipidee.conf" ;
+  char const *ofile = TIPIDEE_SYSCONFPREFIX "tipidee.conf.cdb" ;
   unsigned int omode = 0644 ;
 
   PROG = "tipidee-config" ;
diff --git a/src/tipideed/send_file.c b/src/tipideed/send_file.c
index 23a0373..2aeec65 100644
--- a/src/tipideed/send_file.c
+++ b/src/tipideed/send_file.c
@@ -99,25 +99,26 @@ void send_file (int fd, uint64_t n, char const *fn)
 {
   tain deadline ;
   struct iovec v[2] ;
-  while (n)
+  ssize_t r ;
+  if (!n) goto flushit ;  /* I know, I know, but do-while SUCKS */
+ fillit:
+  buffer_wpeek(buffer_1, v) ;
+  r = allreadv(fd, v, 2) ;
+  if (r == -1) strerr_diefu2sys(111, "read from ", fn) ;
+  if (!r) strerr_diefu3x(111, "serve ", fn, ": file was truncated") ;
+  if (r > n)
   {
-    ssize_t r ;
-    buffer_rpeek(buffer_1, v) ;
-    r = allreadv(fd, v, 2) ;
-    if (r == -1) strerr_diefu2sys(111, "read from ", fn) ;
-    if (!r) strerr_diefu3x(111, "serve ", fn, ": file was truncated") ;
-    if (r > n)
-    {
-      r = n ;
-      if (g.verbosity >= 2)
-        strerr_warnw2x("serving elongated file: ", fn) ;
-    }
-    buffer_rseek(buffer_1, r) ;
-    tain_add_g(&deadline, &g.writetto) ;
-    if (!buffer_timed_flush_g(buffer_1, &deadline))
-      strerr_diefu1sys(111, "write to stdout") ;
-    n -= r ;
+    r = n ;
+    if (g.verbosity >= 2)
+      strerr_warnw2x("serving elongated file: ", fn) ;
   }
+  buffer_wseek(buffer_1, r) ;
+  n -= r ;
+ flushit:
+  tain_add_g(&deadline, &g.writetto) ;
+  if (!buffer_timed_flush_g(buffer_1, &deadline))
+    strerr_diefu1sys(111, "write to stdout") ;
+  if (n) goto fillit ;
 }
 
 #endif
diff --git a/src/tipideed/tipideed.c b/src/tipideed/tipideed.c
index 13e5d7b..c41553e 100644
--- a/src/tipideed/tipideed.c
+++ b/src/tipideed/tipideed.c
@@ -335,7 +335,7 @@ int main (int argc, char const *const *argv, char const *const *envp)
   PROG = progstr ;
 
   {
-    char const *conffile = "/etc/tipidee.conf.cdb" ;
+    char const *conffile = TIPIDEE_SYSCONFPREFIX "tipidee.conf.cdb" ;
     char const *newroot = 0 ;
     unsigned int h = 0 ;
     int gotv = 0 ;