diff --git a/Libraries/libbom/Tools/lsbom.cpp b/Libraries/libbom/Tools/lsbom.cpp index 718aefef7..01c1ba870 100644 --- a/Libraries/libbom/Tools/lsbom.cpp +++ b/Libraries/libbom/Tools/lsbom.cpp @@ -294,6 +294,58 @@ extern "C" { } __attribute__((packed)); } +/** + * Todo: + * Group Name + * PermissionsText + * FileSizeFormatted + * ModificationTimeFormatted + * Username + * UserGroupName +*/ +static std::string +PrintItemToString(Options::PrintItem item, std::string path, struct bom_path_info_2 *info) +{ + switch (item) { + case Options::PrintItem::Checksum: + if (info->type == bom_path_type_directory) { + return ""; + } + return std::to_string(ntohl(info->checksum)); + case Options::PrintItem::FileName: + return path; + case Options::PrintItem::FileNameQuoted: + return "\"" + path + "\""; + case Options::PrintItem::GroupID: + return std::to_string(ntohl(info->group)); + case Options::PrintItem::GroupName: + return std::string(); // TODO: implement + case Options::PrintItem::Permissions: { + std::stringstream stream; + stream << std::oct << ntohs(info->mode); + return stream.str(); + } + case Options::PrintItem::PermissionsText: + return std::string(); // TODO: implement + case Options::PrintItem::FileSize: + return std::to_string(ntohl(info->size)); + case Options::PrintItem::FileSizeFormatted: + return std::string(); // TODO: implement + case Options::PrintItem::ModificationTime: + return std::to_string(ntohl(info->modtime)); + case Options::PrintItem::ModificationTimeFormatted: + return std::string(); // TODO: implement + case Options::PrintItem::UserID: + return std::to_string(ntohl(info->user)); + case Options::PrintItem::UserName: + return std::string(); // TODO: implement + case Options::PrintItem::UserGroupID: + return std::to_string(ntohl(info->user)) + "/" + std::to_string(ntohl(info->group)); + case Options::PrintItem::UserGroupName: + return std::string(); // TODO: implement + } +} + int main(int argc, char **argv) { @@ -451,8 +503,18 @@ main(int argc, char **argv) */ if (options->onlyPath()) { printf("%s\n", path.c_str()); + } else if (options->printFormat()) { + bool first = true; + std::string toPrint; + + for (Options::PrintItem item : *options->printFormat()) { + toPrint += first ? "" : "\t"; + toPrint += PrintItemToString(item, path, path_info_2_value); + first = false; + } + + printf("%s\n", toPrint.c_str()); } else { - // TODO: Respect options about what to print. std::stringstream stream; stream << std::oct << ntohs(path_info_2_value->mode); std::string mode = stream.str();