Exemplo n.º 1
0
static inline void print_entry(const wagon_t *id, const attr_set_t * attrs)
{
    char ostbuf[24576] = "";

#ifdef ATTR_INDEX_status
    if (prog_options.match_status)
    {
        if (ATTR_MASK_TEST(attrs, status) && (ATTR(attrs, status) != prog_options.status))
        {
            /* no match -> no display */
            return;
        }
    }
#endif

#ifdef _LUSTRE
    /* prepare OST display buffer */
    if (prog_options.lsost && ATTR_MASK_TEST(attrs, stripe_items)
        && (ATTR(attrs, stripe_items).count > 0))
    {
        /* leave a space as first char */
        ostbuf[0] = ' ';
        FormatStripeList(ostbuf+1, sizeof(ostbuf)-2, &ATTR(attrs, stripe_items), TRUE);
    }
#endif

    if (prog_options.ls)
    {
        const char * type;
        char date_str[128];
        char mode_str[128];
#ifdef ATTR_INDEX_status
        const char * status_str = "";

        /* add status after type */
        if (ATTR_MASK_TEST(attrs, status) && (ATTR(attrs, status) != STATUS_UNKNOWN))
            status_str = db_status2str(ATTR(attrs, status), 1); /* 1 for brief */

        #define STATUS_FORMAT   "%-10s"
        #define STATUS_VAL ,status_str
#else
        #define STATUS_FORMAT   ""
        #define STATUS_VAL
#endif
        /* type2char */
        if (!ATTR_MASK_TEST(attrs, type))
            type = "?";
        else
            type = type2char(ATTR(attrs, type));

        memset(mode_str, 0, sizeof(mode_str));
        mode_string(ATTR(attrs, mode), mode_str);

        if (!ATTR_MASK_TEST(attrs, last_mod))
            strcpy(date_str, "");
        else
        {
            time_t tt;
            struct tm stm;
            tt = ATTR(attrs, last_mod);
            strftime(date_str, 128, "%Y/%m/%d %T", localtime_r(&tt, &stm));
        }

        if (ATTR_MASK_TEST(attrs, type) && !strcmp(ATTR(attrs, type), STR_TYPE_LINK)
            && ATTR_MASK_TEST(attrs, link))
            /* display: id, type, mode, nlink, (status,) owner, group, size, mtime, path -> link */
            printf(DFID" %-4s %s %3u  "STATUS_FORMAT"%-10s %-10s %15"PRIu64" %20s %s -> %s\n",
                   PFID(&id->id), type, mode_str, ATTR(attrs, nlink) STATUS_VAL,
                   ATTR(attrs, owner), ATTR(attrs, gr_name),
                   ATTR(attrs, size), date_str, id->fullname, ATTR(attrs,link));
        else
            /* display all: id, type, mode, nlink, (status,) owner, group, size, mtime, path */
            printf(DFID" %-4s %s %3u  "STATUS_FORMAT"%-10s %-10s %15"PRIu64" %20s %s%s\n",
                   PFID(&id->id), type, mode_str, ATTR(attrs, nlink) STATUS_VAL,
                   ATTR(attrs, owner), ATTR(attrs, gr_name),
                   ATTR(attrs, size), date_str, id->fullname, ostbuf);
    }
    else if (prog_options.lsost) /* lsost without -ls */
    {
        const char * type;

        /* type2char */
        if (!ATTR_MASK_TEST(attrs, type))
            type = "?";
        else
            type = type2char(ATTR(attrs, type));

        /* display: id, type, size, path */
        printf(DFID" %-4s %15"PRIu64" %s%s\n",
               PFID(&id->id), type, ATTR(attrs, size), id->fullname, ostbuf);

    }
    else if (prog_options.print)
    {
        /* just display name */
        if (id->fullname)
            printf("%s%s\n", id->fullname, ostbuf);
        else
            printf(DFID"%s\n", PFID(&id->id), ostbuf);
    }

    if (prog_options.exec)
    {
        const char *vars[] = {
            "", id->fullname,
            NULL, NULL
        };
        char * cmd = replace_cmd_parameters(prog_options.exec_cmd, vars);
        if (cmd)
        {
            execute_shell_command(FALSE, cmd, 0);
            free(cmd);
        }
    }

}
Exemplo n.º 2
0
static inline void print_entry(const wagon_t *id, const attr_set_t * attrs)
{
#ifdef ATTR_INDEX_status
    if (prog_options.match_status)
    {
        if (ATTR_MASK_TEST(attrs, status) && (ATTR(attrs, status) != prog_options.status))
        {
            /* no match -> no display */
            return;
        }
    }
#endif

    if (prog_options.ls)
    {
        const char * type;
        char date_str[128];
        char mode_str[128];
        char uname[LOGIN_NAME_MAX];
        char gname[LOGIN_NAME_MAX];
        struct passwd *passwd;
        struct group *group;
#ifdef ATTR_INDEX_status
        const char * status_str = "";

        /* add status after type */
        if (ATTR_MASK_TEST(attrs, status) && (ATTR(attrs, status) != STATUS_UNKNOWN))
            status_str = db_status2str(ATTR(attrs, status), 1); /* 1 for brief */

        #define STATUS_FORMAT   "%-10s"
        #define STATUS_VAL ,status_str
#else
        #define STATUS_FORMAT   ""
        #define STATUS_VAL
#endif
        /* type2char */
        if (!ATTR_MASK_TEST(attrs, type))
            type = "?";
        else
            type = type2char(ATTR(attrs, type));

        memset(mode_str, 0, sizeof(mode_str));
        mode_string(ATTR(attrs, mode), mode_str);

        if (!ATTR_MASK_TEST(attrs, last_mod))
            strcpy(date_str, "");
        else
        {
            time_t tt;
            struct tm stm;
            tt = ATTR(attrs, last_mod);
            strftime(date_str, 128, "%Y/%m/%d %T", localtime_r(&tt, &stm));
        }

        /* UID/GID to username/group. */
        passwd = GetPwUid(ATTR(attrs, uid));
        if (passwd)
            sprintf(uname, "%-10s", passwd->pw_name);
        else
            sprintf(uname, "%10u", ATTR(attrs, uid));

        group = GetGrGid(ATTR(attrs, gid));
        if (group)
            sprintf(gname, "%-10s", group->gr_name);
        else
            sprintf(gname, "%10u", ATTR(attrs, gid));

        if (ATTR_MASK_TEST(attrs, type) && !strcmp(ATTR(attrs, type), STR_TYPE_LINK)
            && ATTR_MASK_TEST(attrs, link))
            /* display: id, type, mode, nlink, (status,) owner, group, size, mtime, path -> link */
            printf(DFID" %-4s %s %3u  "STATUS_FORMAT"%-10s %-10s %15"PRIu64" %20s %s -> %s\n",
                   PFID(&id->id), type, mode_str, ATTR(attrs, nlink) STATUS_VAL,
                   uname, gname,
                   ATTR(attrs, size), date_str, id->fullname, ATTR(attrs,link));
        else
            /* display all: id, type, mode, nlink, (status,) owner, group, size, mtime, path */
            printf(DFID" %-4s %s %3u  "STATUS_FORMAT"%-10s %-10s %15"PRIu64" %20s %s\n",
                   PFID(&id->id), type, mode_str, ATTR(attrs, nlink) STATUS_VAL,
                   uname, gname,
                   ATTR(attrs, size), date_str, id->fullname);
    }
    else if (prog_options.lsstat)
    {
        /* In the worst case scenario, each character will be escaped
         * to '\xXX'; so the string can be up to 4 time the name
         * length. */
        char escaped_name[4*RBH_NAME_MAX+1];

        /* Exclude any file with an uncomplete attributes. */
        if ((attrs->attr_mask & LSSTAT_MASK) == LSSTAT_MASK) {
            printf("[%s,%u,%u,%zu,%lu,%lu,%lu]=%s\n",
                   ATTR(attrs, type),
                   ATTR(attrs, uid),
                   ATTR(attrs, gid),
                   ATTR(attrs, size),
                   ATTR(attrs, ctime),
                   ATTR(attrs, mtime),
                   ATTR(attrs, atime),
                   escape_name(id->fullname, escaped_name));
        } else {
            printf("SKIPPED(%x,%x)=%s\n", attrs->attr_mask, LSSTAT_MASK, id->fullname);
        }
    }
#ifdef _LUSTRE
    else if (prog_options.lsost) {
        char tmpbuf[24576];

        FormatStripeList( tmpbuf, sizeof(tmpbuf)-1, &ATTR( attrs, stripe_items), FALSE);
        printf("%s\t%s\n", id->fullname, tmpbuf);
    }
#endif
    else
    {
        /* just display name */
        if (id->fullname)
            printf("%s\n", id->fullname);
        else
            printf(DFID"\n", PFID(&id->id));
    }

}