Reverted 2a733a0. Fixes binary printing
This commit is contained in:
parent
72891834c2
commit
e3586a9e93
@ -173,47 +173,52 @@ template<class Printer>
|
|||||||
int real_print_files(const cmd_args& args){
|
int real_print_files(const cmd_args& args){
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
Printer p(args);
|
Printer p(args);
|
||||||
if(args.treatbinary){ //binary files
|
for(size_t i = 0;i < args.filenames.size();++i){
|
||||||
for(size_t i = 0;i < args.filenames.size();++i){
|
if(!strcmp(args.filenames[i], "-")){ //stdin
|
||||||
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.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();
|
||||||
|
}
|
||||||
|
}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;
|
||||||
|
}
|
||||||
|
if(args.treatbinary){
|
||||||
if(args.nonprinting){
|
if(args.nonprinting){
|
||||||
for(char in;(in = fgetc(fp)) != EOF;){
|
for(int in;(in = fgetc(fp)) != WEOF;){
|
||||||
char tmp[5];
|
char tmp[5];
|
||||||
nonprinting_notation(in, tmp);
|
nonprinting_notation(in, tmp);
|
||||||
p.print(tmp);
|
p.print(tmp);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
for(char in;(in = fgetc(fp)) != EOF;)
|
for(int in;(in = fgetc(fp)) != WEOF;)
|
||||||
p.print(in);
|
p.print(static_cast<char>(in));
|
||||||
}
|
}
|
||||||
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{
|
}else{
|
||||||
FILE* fp = open_file(args.filenames[i], "r");
|
//set to wide character mode before anything
|
||||||
if(!fp){
|
fwide(fp, 1);
|
||||||
ret = 2;
|
for(wint_t in;(in = fgetwc(fp)) != WEOF;)
|
||||||
continue;
|
p.print(static_cast<wchar_t>(in));
|
||||||
}
|
|
||||||
for(wchar_t in;(in = fgetwc(fp)) != WEOF;){
|
|
||||||
p.print(in);
|
|
||||||
}
|
|
||||||
p.reset();
|
|
||||||
fclose(fp);
|
|
||||||
}
|
}
|
||||||
|
p.reset();
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p.reset();
|
p.reset();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user