added Vector_zeroEnd() function
[util-vserver.git] / util-vserver / src / vps.c
index 50bfed0..48bfaa8 100644 (file)
@@ -27,6 +27,7 @@
 #include <lib/fmt.h>
 #include <assert.h>
 #include <fcntl.h>
+#include <signal.h>
 
 #define ENSC_WRAPPERS_VSERVER  1
 #define ENSC_WRAPPERS_STDLIB   1
@@ -76,14 +77,21 @@ showVersion()
 static size_t
 writeContextInfo(xid_t ctx, char const *name)
 {
-  char         buf[sizeof(ctx)*3+1];
-  size_t       l   = utilvserver_fmt_ulong(buf, ctx);
   size_t       l1  = name==0 ? 0 : strlen(name);
   size_t       res = CTXNR_WIDTH + 1;
+  
+  if (ctx==VC_NOCTX) {
+    if (3<CTXNR_WIDTH) write(1, CONTEXT_PLACE, CTXNR_WIDTH-3);
+    write(1, "ERR ", 4);
+  }
+  else {
+    char       buf[sizeof(ctx)*3+1];
+    size_t     l = utilvserver_fmt_ulong(buf, ctx);
 
-  if (l<CTXNR_WIDTH) write(1, CONTEXT_PLACE, CTXNR_WIDTH-l);
-  write(1, buf, l);
-  write(1, " ", 1);
+    if (l<CTXNR_WIDTH) write(1, CONTEXT_PLACE, CTXNR_WIDTH-l);
+    write(1, buf, l);
+    write(1, " ", 1);
+  }
 
   if (l1!=0) {
     assert(name!=0);
@@ -217,14 +225,19 @@ int main(int argc, char *argv[])
   pid_t                pid;
   char *       data;
   size_t       len;
+  char const * errptr;
 
   if (argc>1) {
     if (strcmp(argv[1], "--help")   ==0) showHelp(1, argv[0], 0);
     if (strcmp(argv[1], "--version")==0) showVersion();
   }
-    
-  if (vc_get_task_xid(0)!=1)
-    Evc_new_s_context(1, vc_get_insecurecaps(), 0);
+
+  signal(SIGCHLD, SIG_DFL);
+
+  if (!switchToWatchXid(&errptr)) {
+    perror(errptr);
+    exit(wrapper_exit_code);
+  }
 
   Epipe(p);
   pid = Efork();
@@ -247,8 +260,5 @@ int main(int argc, char *argv[])
   Eclose(p[0]);
   
   processOutput(data, len);
-
-  exitLikeProcess(pid);
-  perror("exitLikeProcess()");
-  return wrapper_exit_code;
+  exitLikeProcess(pid, "ps", wrapper_exit_code);
 }