From e0d0c3c5bdcd7fe1db5e7bfa956ad0b365f24d41 Mon Sep 17 00:00:00 2001 From: Enrico Scholz Date: Thu, 22 Jan 2004 13:42:36 +0000 Subject: [PATCH] * provide st_mode at vc_set_iattr_compat() call * do not stop on non-regular files; vc_set_iattr_compat() handles this already git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@690 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- util-vserver/src/lsxid.c | 35 +++++++++++----------------- util-vserver/src/showattr.c | 57 +++++++++++++++++++++------------------------ 2 files changed, 40 insertions(+), 52 deletions(-) diff --git a/util-vserver/src/lsxid.c b/util-vserver/src/lsxid.c index 36cb189..a3064cd 100644 --- a/util-vserver/src/lsxid.c +++ b/util-vserver/src/lsxid.c @@ -84,7 +84,7 @@ getFileContext(char const *name, struct stat const *exp_st) uint32_t mask = VC_IATTR_XID; if (vc_get_iattr_compat(name, exp_st->st_dev, exp_st->st_ino, - &res, 0, &mask)==-1) + &res, 0, &mask, &exp_st->st_mode)==-1) perror("vc_get_iattr_compat()"); return (mask&VC_IATTR_XID) ? res : VC_NOCTX; @@ -100,31 +100,24 @@ handleFile(char const *name, char const *display_name, memset(buf, ' ', sizeof buf); - if (!S_ISREG(exp_st->st_mode)) { - memcpy(buf, "-------", 7); + ctx = getFileContext(name, exp_st); + + if (ctx==VC_NOCTX) { + memcpy(buf, "!!ERR!!", 7); write(1, buf, sizeof buf); need_write = false; } - else { - ctx = getFileContext(name, exp_st); - - if (ctx==VC_NOCTX) { - memcpy(buf, "!!ERR!!", 7); - write(1, buf, sizeof buf); + else if (global_args->do_mapping) { + char const * vname = vc_getVserverByCtx(ctx, 0,0); + if (!vname) buf[0] = '\0'; + else { + size_t l = strlen(vname); + if (ldo_mapping) { - char const * vname = vc_getVserverByCtx(ctx, 0,0); - if (!vname) buf[0] = '\0'; - else { - size_t l = strlen(vname); - if (lst_dev, exp_st->st_ino, - &xid, flags, mask)==-1) { + &xid, flags, mask, &exp_st->st_mode)==-1) { perror("vc_get_iattr_compat()"); return false; } @@ -98,43 +98,38 @@ bool handleFile(char const *name, char const *display_name, struct stat const *exp_st) { - bool res = true; - char buf[40]; - char *ptr = buf; + bool res = true; + char buf[40]; + char *ptr = buf; + uint32_t flags; + uint32_t mask; memset(buf, ' ', sizeof buf); - if (!(S_ISREG(exp_st->st_mode) || S_ISDIR(exp_st->st_mode))) { - memcpy(ptr, "------", 6); - } - else { - uint32_t flags; - uint32_t mask; - - if (getFlags(name, exp_st, &flags, &mask)) { - // 1 1 0 0 - // fedcba9876543210fedcba9876543210 - static char const MARKER[33] = ".......x......ib.............hwa"; - int i; - uint32_t used_flags = (VC_IATTR_XID|VC_IATTR_ADMIN| + + if (getFlags(name, exp_st, &flags, &mask)) { + // 1 1 0 0 + // fedcba9876543210fedcba9876543210 + static char const MARKER[33] = ".......x......ib.............hwa"; + int i; + uint32_t used_flags = (VC_IATTR_XID|VC_IATTR_ADMIN| VC_IATTR_WATCH|VC_IATTR_HIDE| VC_IATTR_BARRIER|VC_IATTR_IUNLINK); - for (i=0; i<32; ++i) { - if (used_flags & 1) { - if (! (mask & 1) ) *ptr++ = '-'; - else if (flags & 1) *ptr++ = toupper(MARKER[31-i]); - else *ptr++ = MARKER[31-i]; - } - - used_flags >>= 1; - flags >>= 1; - mask >>= 1; + for (i=0; i<32; ++i) { + if (used_flags & 1) { + if (! (mask & 1) ) *ptr++ = '-'; + else if (flags & 1) *ptr++ = toupper(MARKER[31-i]); + else *ptr++ = MARKER[31-i]; } - } - else { - memcpy(buf, "ERR ", 6); - res = false; + + used_flags >>= 1; + flags >>= 1; + mask >>= 1; } + } + else { + memcpy(buf, "ERR ", 6); + res = false; } write(1, buf, 8); -- 1.8.1.5