dj(1): remove Io_fdopen

This commit is contained in:
dtb 2024-07-03 19:22:34 -06:00
parent 2b593559af
commit 5b1d4fef88
Signed by: trinity
GPG Key ID: 34C0543BBB6AF81B

View File

@ -62,26 +62,6 @@ static int write_flags = O_WRONLY | O_CREAT;
/* Macro to check if fd is stdin or stdout */
#define fdisstd(fd) ((fd) == STDIN_FILENO || (fd) == STDOUT_FILENO)
/* Opens io->fn and saves the file descriptor into io->fd. Returns io->fd,
* which will be -1 if an error occured. */
static int
Io_fdopen(struct Io *io, char *fn){
int fd;
assert(io != NULL);
if((fd = open(fn, io->fl,
/* these are the flags used by touch(1p) */
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH))
!= -1
&& (fdisstd(io->fd) || close(io->fd) == 0)){
io->fd = fd;
io->fn = fn;
}
return fd;
}
/* Reads io->bs bytes from *io's file descriptor into io->buf, storing the
* number of read bytes in io->bufuse and updating io->bytes. If io->bufuse is
* 0, errno will probably be set. Returns io. */
@ -155,12 +135,12 @@ usage(char *s){
}
int main(int argc, char *argv[]){
int align; /* low 8b used, negative if no alignment is being done */
int count; /* 0 if dj(1) runs until no more reads are possible */
char *fmt; /* == fmt_asv (default) or fmt_human (-H) */
size_t i; /* side of io being modified */
struct Io io[2];
int align; /* low 8b used, negative if no alignment is being done */
int count; /* 0 if dj(1) runs until no more reads are possible */
char *fmt; /* == fmt_asv (default) or fmt_human (-H) */
size_t i; /* side of io being modified */
char noerror; /* 0=exits (default) 1=retries on partial reads or writes */
struct Io io[2];
/* Set defaults. */
align = -1;
@ -190,10 +170,21 @@ int main(int argc, char *argv[]){
io[i].fd = i == 0 ? STDIN_FILENO : STDOUT_FILENO;
io[i].fn = i == 0 ? stdin_name : stdout_name;
break;
}else if(Io_fdopen(&io[i], optarg) != -1)
break;
}else{
int fd;
if((fd = open(optarg, io[i].fl, /* touch(1p) flags */
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP
| S_IROTH | S_IWOTH))
!= -1
&& (fdisstd(io[i].fd) || close(io[i].fd) == 0)){
io[i].fd = fd;
io[i].fn = optarg;
break;
}
}
return oserr(optarg);
case 'n': noerror = 1; break;
case 'n': noerror = 1; break;
case 'H': fmt = fmt_human; break;
case 'a':
if(optarg[0] == '\0' || optarg[1] == '\0'){