From 17d96d9d1b9f3ae44bd776e355099783430106d6 Mon Sep 17 00:00:00 2001 From: brtsai Date: Mon, 5 Dec 2016 15:44:51 +0800 Subject: [PATCH 1/3] added partial support for -p flags in lsbom refactored code for printing lsbom details --- Libraries/libbom/Tools/lsbom.cpp | 99 ++++++++++++++++++++++++++------ 1 file changed, 80 insertions(+), 19 deletions(-) diff --git a/Libraries/libbom/Tools/lsbom.cpp b/Libraries/libbom/Tools/lsbom.cpp index 718aefef7..94945dc47 100644 --- a/Libraries/libbom/Tools/lsbom.cpp +++ b/Libraries/libbom/Tools/lsbom.cpp @@ -294,6 +294,82 @@ extern "C" { } __attribute__((packed)); } +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: + if (info->type == bom_path_type_directory) { + return ""; + } + 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 + default: + return ""; + } + return ""; +} + +static std::vector +GetDefaultPrintFormat() +{ + return { + Options::PrintItem::FileName, + Options::PrintItem::Permissions, + Options::PrintItem::UserGroupID, + Options::PrintItem::FileSize, + Options::PrintItem::Checksum, + }; +} + +static std::string +PrintItemsToString(std::vector format, std::string path, struct bom_path_info_2 *info) +{ + std::string toReturn; + bool first = true; + + for (Options::PrintItem item : format) { + toReturn += first ? "" : "\t"; + toReturn += PrintItemToString(item, path, info); + first = false; + } + + return toReturn; +} + int main(int argc, char **argv) { @@ -449,25 +525,10 @@ main(int argc, char **argv) /* * Print out requested details. */ - if (options->onlyPath()) { - printf("%s\n", path.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(); - std::string UID = std::to_string(ntohl(path_info_2_value->user)); - std::string GID = std::to_string(ntohl(path_info_2_value->group)); - printf("%s\t%s\t%s/%s", path.c_str(), mode.c_str(), UID.c_str(), GID.c_str()); - - if (path_info_2_value->type == bom_path_type_file) { - std::string size = std::to_string(ntohl(path_info_2_value->size)); - std::string checksum = std::to_string(ntohl(path_info_2_value->checksum)); - printf("\t%s\t%s", size.c_str(), checksum.c_str()); - } - - printf("\n"); - } + std::string toPrint; + std::vector printFormat = options->onlyPath() ? std::vector({Options::PrintItem::FileName}) : options->printFormat().value_or(GetDefaultPrintFormat()); + toPrint = PrintItemsToString(printFormat, path, path_info_2_value); + printf("%s\n", toPrint.c_str()); }, reinterpret_cast(&context)); return 0; From 3f950276dc0681205c4f9cd4d825851eb0b41ebc Mon Sep 17 00:00:00 2001 From: brtsai Date: Fri, 3 Feb 2017 07:01:00 -0800 Subject: [PATCH 2/3] partial support for -p flags code refactored --- Libraries/libbom/Tools/lsbom.cpp | 98 ++++++++++++++++++++++++++------ 1 file changed, 80 insertions(+), 18 deletions(-) diff --git a/Libraries/libbom/Tools/lsbom.cpp b/Libraries/libbom/Tools/lsbom.cpp index 2f52ad4ef..8fed26e70 100644 --- a/Libraries/libbom/Tools/lsbom.cpp +++ b/Libraries/libbom/Tools/lsbom.cpp @@ -294,6 +294,82 @@ extern "C" { } __attribute__((packed)); } +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: + if (info->type == bom_path_type_directory) { + return ""; + } + 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 + default: + return ""; + } + return ""; +} + +static std::vector +GetDefaultPrintFormat() +{ + return { + Options::PrintItem::FileName, + Options::PrintItem::Permissions, + Options::PrintItem::UserGroupID, + Options::PrintItem::FileSize, + Options::PrintItem::Checksum, + }; +} + +static std::string +PrintItemsToString(std::vector format, std::string path, struct bom_path_info_2 *info) +{ + std::string toReturn; + bool first = true; + + for (Options::PrintItem item : format) { + toReturn += first ? "" : "\t"; + toReturn += PrintItemToString(item, path, info); + first = false; + } + + return toReturn; +} + int main(int argc, char **argv) { @@ -449,25 +525,11 @@ main(int argc, char **argv) /* * Print out requested details. */ - if (options->onlyPath()) { - printf("%s\n", path.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(); - std::string UID = std::to_string(ntohl(path_info_2_value->user)); - std::string GID = std::to_string(ntohl(path_info_2_value->group)); - printf("%s\t%s\t%s/%s", path.c_str(), mode.c_str(), UID.c_str(), GID.c_str()); + std::string toPrint; + std::vector printFormat = options->onlyPath() ? std::vector({Options::PrintItem::FileName}) : options->printFormat().value_or(GetDefaultPrintFormat()); + toPrint = PrintItemsToString(printFormat, path, path_info_2_value); + printf("%s\n", toPrint.c_str()); - if (path_info_2_value->type == bom_path_type_file) { - std::string size = std::to_string(ntohl(path_info_2_value->size)); - std::string checksum = std::to_string(ntohl(path_info_2_value->checksum)); - printf("\t%s\t%s", size.c_str(), checksum.c_str()); - } - - printf("\n"); - } }, reinterpret_cast(&context)); return 0; From fa715417e610e95e4a93571d8be017db869ab3be Mon Sep 17 00:00:00 2001 From: brtsai Date: Fri, 3 Feb 2017 07:09:05 -0800 Subject: [PATCH 3/3] updating xcbuild to match fb version --- Libraries/libbom/Tools/lsbom.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Libraries/libbom/Tools/lsbom.cpp b/Libraries/libbom/Tools/lsbom.cpp index c62cf17bd..94945dc47 100644 --- a/Libraries/libbom/Tools/lsbom.cpp +++ b/Libraries/libbom/Tools/lsbom.cpp @@ -529,10 +529,6 @@ main(int argc, char **argv) std::vector printFormat = options->onlyPath() ? std::vector({Options::PrintItem::FileName}) : options->printFormat().value_or(GetDefaultPrintFormat()); toPrint = PrintItemsToString(printFormat, path, path_info_2_value); printf("%s\n", toPrint.c_str()); -<<<<<<< HEAD -======= - ->>>>>>> master }, reinterpret_cast(&context)); return 0;