Reverted 2a733a0. Fixes binary printing

This commit is contained in:
rexy712 2019-07-22 14:13:16 -07:00
parent 72891834c2
commit e3586a9e93

View File

@ -173,47 +173,52 @@ template<class Printer>
int real_print_files(const cmd_args& args){
int ret = 0;
Printer p(args);
if(args.treatbinary){ //binary files
for(size_t i = 0;i < args.filenames.size();++i){
if(!strcmp(args.filenames[i], "-")){ //stdin
do_stdin<char>(p, fgetc);
}else{ //everything besides stdin
FILE* fp = open_file(args.filenames[i], "rb");
if(!fp){
ret = 2;
continue;
}
if(args.nonprinting){
for(char in;(in = fgetc(fp)) != EOF;){
char tmp[5];
nonprinting_notation(in, tmp);
p.print(tmp);
}
}else{
for(char in;(in = fgetc(fp)) != EOF;)
p.print(in);
}
if(args.treatbinary){
//Don't check if buf is empty because that's not how GNU cat handles Ctrl+D in middle of line
for(int in;(in = fgetc(stdin)) != WEOF;){
p.print(static_cast<char>(in));
if(in == L'\n') //Only reset on newline to save print overhead
p.reset();
fclose(fp);
}
}
}else{ //non binary files
for(size_t i = 0;i < args.filenames.size();++i){
if(!strcmp(args.filenames[i], "-")){
do_stdin<wchar_t>(p, fgetwc);
}else{
for(wint_t in;(in = fgetwc(stdin)) != WEOF;){
p.print(static_cast<wchar_t>(in));
if(in == L'\n')
p.reset();
}
}
clearerr(stdin);
}else{ //everything besides stdin
FILE* fp = open_file(args.filenames[i], "r");
if(!fp){
ret = 2;
continue;
}
for(wchar_t in;(in = fgetwc(fp)) != WEOF;){
p.print(in);
if(args.treatbinary){
if(args.nonprinting){
for(int in;(in = fgetc(fp)) != WEOF;){
char tmp[5];
nonprinting_notation(in, tmp);
p.print(tmp);
}
}else{
for(int in;(in = fgetc(fp)) != WEOF;)
p.print(static_cast<char>(in));
}
}else{
//set to wide character mode before anything
fwide(fp, 1);
for(wint_t in;(in = fgetwc(fp)) != WEOF;)
p.print(static_cast<wchar_t>(in));
}
p.reset();
fclose(fp);
}
}
}
p.reset();