X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fsrc%2Fvserver-stat.c;h=17425c1d9f7a02106e9753e00f155e4f76c1f041;hb=2c153db573d5648ba62d29ae6f8eed6a87b8c9c4;hp=765bcf1237173a42b419c2c5e376667b1aa5f549;hpb=0523ed09b01268a8880ff0b0e84a212164536351;p=util-vserver.git diff --git a/util-vserver/src/vserver-stat.c b/util-vserver/src/vserver-stat.c index 765bcf1..17425c1 100644 --- a/util-vserver/src/vserver-stat.c +++ b/util-vserver/src/vserver-stat.c @@ -133,7 +133,7 @@ getUptime() char buffer[64]; char * errptr; size_t len; - time_t secs; + uint64_t secs; uint32_t msecs=0; // open the /proc/uptime file @@ -426,22 +426,41 @@ showContexts(struct Vector *vec) shortenTime(buf+44, uptime - ptr->start_time_oldest); switch (ptr->xid) { - case 0 : strncpy(buf+55, "root server", 20); break; - case 1 : strncpy(buf+55, "monitoring server", 20); break; + case 0 : strcpy(buf+55, "root server" ); break; + case 1 : strcpy(buf+55, "monitoring server"); break; default : { char * name = 0; char * cfgpath = 0; vcCfgStyle cfgstyle = vcCFG_AUTO; - if ((cfgpath = vc_getVserverByCtx(ptr->xid, &cfgstyle, 0))!=0 && - (name = vc_getVserverName(cfgpath, cfgstyle))!=0) - strncpy(buf+55, name, 20); + if ((cfgpath = vc_getVserverByCtx(ptr->xid, &cfgstyle, 0))==0 || + (name = vc_getVserverName(cfgpath, cfgstyle))==0) { + name = strdup(""); + cfgstyle = vcCFG_NONE; + } + + switch (cfgstyle) { + case vcCFG_LEGACY : { + size_t len = MIN(strlen(name), 18); + buf[55] = '['; + memcpy(buf+56, name, len); + memcpy(buf+56+len, "]", 2); + break; + } + default : { + size_t len = MIN(strlen(name), 20); + memcpy(buf+55, name, len); + buf[55+len] = '\0'; + break; + } + } + free(name); free(cfgpath); } } - write(1, buf, 80); + write(1, buf, strlen(buf)); write(1, "\n", 1); } } @@ -452,6 +471,7 @@ int main(int argc, char **argv) struct dirent* dir_entry; pid_t my_pid; struct Vector xid_data; + char const * errptr; if (argc==2) { if (strcmp(argv[1], "--help") ==0) showHelp(1, argv[0], 0); @@ -468,13 +488,16 @@ int main(int argc, char **argv) // do not include own stat my_pid = getpid(); -#if 1 - // try to switch in context 1 - if (vc_get_task_xid(0)!=1) - Evc_new_s_context(1, 0,0); -#else -# warning Compiling in debug-code -#endif + if (!switchToWatchXid(&errptr)) { + perror(errptr); + exit(1); + } + + if (access("/proc/uptime",R_OK)==-1 && errno==ENOENT) + WRITE_MSG(2, + "WARNING: can not access /proc/uptime. Usually, this is caused by\n" + " procfs-security. Please read the FAQ for more details\n" + " http://www.linux-vserver.org/index.php?page=Linux-Vserver+FAQ\n"); Vector_init(&xid_data, sizeof(struct XidData));