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); } } }
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)); } }