Skip to content
This repository has been archived by the owner on Jan 2, 2021. It is now read-only.

Commit

Permalink
added partial support for -p flags in lsbom
Browse files Browse the repository at this point in the history
  • Loading branch information
brtsai committed Dec 5, 2016
1 parent 325247d commit d10956e
Showing 1 changed file with 63 additions and 1 deletion.
64 changes: 63 additions & 1 deletion Libraries/libbom/Tools/lsbom.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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();
Expand Down

0 comments on commit d10956e

Please sign in to comment.