1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 04:27:43 +00:00

Add stdin support to wc program

This commit is contained in:
Tim Morgan 2019-09-11 17:26:48 -05:00 committed by Andreas Kling
parent 8b0d530584
commit bc23db2c71

View file

@ -16,6 +16,8 @@ struct Count {
unsigned long lines = 0;
};
int wc(const String& filename, Vector<Count>& counts);
void report(const Count& count)
{
if (output_lines) {
@ -93,20 +95,37 @@ int main(int argc, char** argv)
}
Vector<String> files = args.get_single_values();
if (files.is_empty()) {
fprintf(stderr, "wc: No files provided\n");
return 1;
}
Vector<Count> counts;
int status;
if (files.is_empty()) {
status = wc("", counts);
if (status != 0)
return status;
} else {
for (const auto& f : files) {
FILE* fp = fopen(f.characters(), "r");
status = wc(f, counts);
if (status != 0)
return status;
}
}
report(counts);
return 0;
}
int wc(const String& filename, Vector<Count>& counts)
{
FILE* fp = nullptr;
if (filename == "" || filename == "-") {
fp = stdin;
} else {
fp = fopen(filename.characters(), "r");
if (fp == nullptr) {
fprintf(stderr, "wc: Could not open file '%s'\n", f.characters());
fprintf(stderr, "wc: Could not open file '%s'\n", filename.characters());
return 1;
}
}
Count count { f };
Count count { filename };
char* line = nullptr;
size_t len = 0;
ssize_t n_read = 0;
@ -121,8 +140,5 @@ int main(int argc, char** argv)
if (line) {
free(line);
}
}
report(counts);
return 0;
}