vshost-util-vserver

Build script and sources for util-vserver.
git clone https://ccx.te2000.cz/git/vshost-util-vserver
Log | Files | Refs

vshelper-sync.c (2711B)


      1 // $Id$    --*- c -*--
      2 
      3 // Copyright (C) 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
      4 //  
      5 // This program is free software; you can redistribute it and/or modify
      6 // it under the terms of the GNU General Public License as published by
      7 // the Free Software Foundation; version 2 of the License.
      8 //  
      9 // This program is distributed in the hope that it will be useful,
     10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12 // GNU General Public License for more details.
     13 //  
     14 // You should have received a copy of the GNU General Public License
     15 // along with this program; if not, write to the Free Software
     16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     17 
     18 
     19 #ifdef HAVE_CONFIG_H
     20 #  include <config.h>
     21 #endif
     22 
     23 #include "util.h"
     24 
     25 #include <sys/select.h>
     26 #include <stdlib.h>
     27 #include <fcntl.h>
     28 #include <unistd.h>
     29 #include <signal.h>
     30 #include <stdio.h>
     31 #include <assert.h>
     32 
     33 static void
     34 showHelp(int fd, char const *cmd, int res)
     35 {
     36   WRITE_MSG(fd, "Usage:  ");
     37   WRITE_STR(fd, cmd);
     38   WRITE_MSG(fd,
     39 	    " [--] <pipe> <timeout>\n\n"
     40 	    "Please report bugs to " PACKAGE_BUGREPORT "\n");
     41   exit(res);
     42 }
     43 
     44 static void
     45 showVersion()
     46 {
     47   WRITE_MSG(1,
     48 	    "vshelper-sync " VERSION " -- waits for data from a pipe"
     49 	    "This program is part of " PACKAGE_STRING "\n\n"
     50 	    "Copyright (C) 2004 Enrico Scholz\n"
     51 	    VERSION_COPYRIGHT_DISCLAIMER);
     52   exit(0);
     53 }
     54 
     55 int main(int argc, char *argv[])
     56 {
     57   int			fd;
     58   int			idx = 1;
     59   struct timeval	timeout;
     60 
     61   if (argc>=2) {
     62     if (strcmp(argv[1], "--help")   ==0) showHelp(1, argv[0], 0);
     63     if (strcmp(argv[1], "--version")==0) showVersion();
     64     if (strcmp(argv[1], "--")       ==0) ++idx;
     65   }
     66 
     67   if (argc<idx+2) {
     68     WRITE_MSG(2, "Not enough parameters; use '--help' for more information\n");
     69     return EXIT_FAILURE;
     70   }
     71 
     72   fd = open(argv[idx], O_RDONLY|O_NONBLOCK, 0);
     73   if (fd==-1) {
     74     perror("vshelper-sync: open()");
     75     return EXIT_FAILURE;
     76   }
     77 
     78   timeout.tv_sec  = atoi(argv[idx+1]);
     79   timeout.tv_usec = 0;
     80 
     81   for (;;) {
     82     char	buf[512];
     83     ssize_t	len;
     84     fd_set	fds;
     85 
     86     FD_ZERO(&fds);
     87     FD_SET(fd, &fds);
     88 
     89 #ifndef __linux__
     90 #  error vshelper relies on the Linux select() behavior (timeout holds remaining time)
     91 #endif
     92 
     93     switch (select(fd+1, &fds, 0,0, &timeout)) {
     94       case 0	:  return EXIT_FAILURE;	// timeout
     95       case -1	:
     96 	perror("vshelper: select()");
     97 	return EXIT_FAILURE;
     98       default	:  break;
     99     }
    100 
    101     assert(FD_ISSET(fd, &fds));
    102 
    103     len = read(fd,buf,sizeof buf);
    104     if (len==0) break;
    105     if (len==-1) {
    106       perror("vshelper-sync: read()");
    107       return EXIT_FAILURE;
    108     }
    109   }
    110 
    111   return EXIT_SUCCESS;
    112 }