add O_BINARY to all open() calls except tty_fd
cf. http://svn.netlabs.org/libc/wiki/Faq#Whydoesntreadfdbufsize_of_filereturnsize_of_file
This commit is contained in:
parent
7f16464902
commit
f920d94785
6
check.t
6
check.t
@ -1,4 +1,4 @@
|
|||||||
# $MirOS: src/bin/mksh/check.t,v 1.633 2013/09/24 20:19:40 tg Exp $
|
# $MirOS: src/bin/mksh/check.t,v 1.634 2013/10/09 11:59:26 tg Exp $
|
||||||
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
||||||
@ -31,7 +31,7 @@
|
|||||||
# http://www.freebsd.org/cgi/cvsweb.cgi/src/tools/regression/bin/test/regress.sh?rev=HEAD
|
# http://www.freebsd.org/cgi/cvsweb.cgi/src/tools/regression/bin/test/regress.sh?rev=HEAD
|
||||||
|
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
@(#)MIRBSD KSH R48 2013/09/24
|
@(#)MIRBSD KSH R48 2013/10/08
|
||||||
description:
|
description:
|
||||||
Check version of shell.
|
Check version of shell.
|
||||||
stdin:
|
stdin:
|
||||||
@ -40,7 +40,7 @@ name: KSH_VERSION
|
|||||||
category: shell:legacy-no
|
category: shell:legacy-no
|
||||||
---
|
---
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
@(#)LEGACY KSH R48 2013/09/24
|
@(#)LEGACY KSH R48 2013/10/08
|
||||||
description:
|
description:
|
||||||
Check version of legacy shell.
|
Check version of legacy shell.
|
||||||
stdin:
|
stdin:
|
||||||
|
8
exec.c
8
exec.c
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/exec.c,v 1.126 2013/09/10 16:30:49 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/exec.c,v 1.127 2013/10/09 11:59:27 tg Exp $");
|
||||||
|
|
||||||
#ifndef MKSH_DEFAULT_EXECSHELL
|
#ifndef MKSH_DEFAULT_EXECSHELL
|
||||||
#define MKSH_DEFAULT_EXECSHELL "/bin/sh"
|
#define MKSH_DEFAULT_EXECSHELL "/bin/sh"
|
||||||
@ -869,7 +869,7 @@ scriptexec(struct op *tp, const char **ap)
|
|||||||
*tp->args-- = tp->str;
|
*tp->args-- = tp->str;
|
||||||
|
|
||||||
#ifndef MKSH_SMALL
|
#ifndef MKSH_SMALL
|
||||||
if ((fd = open(tp->str, O_RDONLY)) >= 0) {
|
if ((fd = open(tp->str, O_RDONLY | O_BINARY)) >= 0) {
|
||||||
/* read first MAXINTERP octets from file */
|
/* read first MAXINTERP octets from file */
|
||||||
if (read(fd, buf, sizeof(buf)) <= 0)
|
if (read(fd, buf, sizeof(buf)) <= 0)
|
||||||
/* read error -> no good */
|
/* read error -> no good */
|
||||||
@ -1374,7 +1374,7 @@ iosetup(struct ioword *iop, struct tbl *tp)
|
|||||||
warningf(true, "%s: %s", cp, "restricted");
|
warningf(true, "%s: %s", cp, "restricted");
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
u = open(cp, flags, 0666);
|
u = open(cp, flags | O_BINARY, 0666);
|
||||||
}
|
}
|
||||||
if (u < 0) {
|
if (u < 0) {
|
||||||
/* herein() may already have printed message */
|
/* herein() may already have printed message */
|
||||||
@ -1507,7 +1507,7 @@ herein(struct ioword *iop, char **resbuf)
|
|||||||
* so temp doesn't get removed too soon).
|
* so temp doesn't get removed too soon).
|
||||||
*/
|
*/
|
||||||
h = maketemp(ATEMP, TT_HEREDOC_EXP, &e->temps);
|
h = maketemp(ATEMP, TT_HEREDOC_EXP, &e->temps);
|
||||||
if (!(shf = h->shf) || (fd = open(h->tffn, O_RDONLY, 0)) < 0) {
|
if (!(shf = h->shf) || (fd = open(h->tffn, O_RDONLY | O_BINARY, 0)) < 0) {
|
||||||
i = errno;
|
i = errno;
|
||||||
warningf(true, "can't %s temporary file %s: %s",
|
warningf(true, "can't %s temporary file %s: %s",
|
||||||
!shf ? "create" : "open", h->tffn, cstrerror(i));
|
!shf ? "create" : "open", h->tffn, cstrerror(i));
|
||||||
|
4
funcs.c
4
funcs.c
@ -38,7 +38,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.246 2013/09/10 17:33:00 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.247 2013/10/09 11:59:27 tg Exp $");
|
||||||
|
|
||||||
#if HAVE_KILLPG
|
#if HAVE_KILLPG
|
||||||
/*
|
/*
|
||||||
@ -3743,7 +3743,7 @@ c_cat(const char **wp)
|
|||||||
fn = *wp++;
|
fn = *wp++;
|
||||||
if (fn[0] == '-' && fn[1] == '\0')
|
if (fn[0] == '-' && fn[1] == '\0')
|
||||||
fd = STDIN_FILENO;
|
fd = STDIN_FILENO;
|
||||||
else if ((fd = open(fn, O_RDONLY)) < 0) {
|
else if ((fd = open(fn, O_RDONLY | O_BINARY)) < 0) {
|
||||||
eno = errno;
|
eno = errno;
|
||||||
bi_errorf("%s: %s", fn, cstrerror(eno));
|
bi_errorf("%s: %s", fn, cstrerror(eno));
|
||||||
rv = 1;
|
rv = 1;
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
#include <sys/file.h>
|
#include <sys/file.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/histrap.c,v 1.132 2013/09/24 20:19:44 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/histrap.c,v 1.133 2013/10/09 11:59:28 tg Exp $");
|
||||||
|
|
||||||
Trap sigtraps[NSIG + 1];
|
Trap sigtraps[NSIG + 1];
|
||||||
static struct sigaction Sigact_ign;
|
static struct sigaction Sigact_ign;
|
||||||
@ -720,7 +720,8 @@ hist_init(Source *s)
|
|||||||
|
|
||||||
retry:
|
retry:
|
||||||
/* we have a file and are interactive */
|
/* we have a file and are interactive */
|
||||||
if ((fd = open(hname, O_RDWR | O_CREAT | O_APPEND, 0600)) < 0)
|
if ((fd = open(hname, O_RDWR | O_CREAT | O_APPEND | O_BINARY,
|
||||||
|
0600)) < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
histfd = savefd(fd);
|
histfd = savefd(fd);
|
||||||
@ -756,7 +757,7 @@ hist_init(Source *s)
|
|||||||
/* create temporary file */
|
/* create temporary file */
|
||||||
nhname = shf_smprintf("%s.%d", hname, (int)procpid);
|
nhname = shf_smprintf("%s.%d", hname, (int)procpid);
|
||||||
if ((fd = open(nhname, O_RDWR | O_CREAT | O_TRUNC |
|
if ((fd = open(nhname, O_RDWR | O_CREAT | O_TRUNC |
|
||||||
O_EXCL, 0600)) < 0) {
|
O_EXCL | O_BINARY, 0600)) < 0) {
|
||||||
/* just don't truncate then, meh. */
|
/* just don't truncate then, meh. */
|
||||||
goto hist_trunc_dont;
|
goto hist_trunc_dont;
|
||||||
}
|
}
|
||||||
|
5
main.c
5
main.c
@ -34,7 +34,7 @@
|
|||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.270 2013/09/10 17:33:02 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.271 2013/10/09 11:59:29 tg Exp $");
|
||||||
|
|
||||||
extern char **environ;
|
extern char **environ;
|
||||||
|
|
||||||
@ -1658,7 +1658,8 @@ maketemp(Area *ap, Temp_type type, struct temp **tlist)
|
|||||||
} while (len < 5);
|
} while (len < 5);
|
||||||
|
|
||||||
/* cyclically attempt to open a temporary file */
|
/* cyclically attempt to open a temporary file */
|
||||||
while ((i = open(tp->tffn, O_CREAT | O_EXCL | O_RDWR, 0600)) < 0) {
|
while ((i = open(tp->tffn, O_CREAT | O_EXCL | O_RDWR | O_BINARY,
|
||||||
|
0600)) < 0) {
|
||||||
if (errno != EEXIST)
|
if (errno != EEXIST)
|
||||||
goto maketemp_out;
|
goto maketemp_out;
|
||||||
/* count down from z to a then from 9 to 0 */
|
/* count down from z to a then from 9 to 0 */
|
||||||
|
6
misc.c
6
misc.c
@ -30,7 +30,7 @@
|
|||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/misc.c,v 1.215 2013/08/23 14:07:36 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/misc.c,v 1.216 2013/10/09 11:59:29 tg Exp $");
|
||||||
|
|
||||||
#define KSH_CHVT_FLAG
|
#define KSH_CHVT_FLAG
|
||||||
#ifdef MKSH_SMALL
|
#ifdef MKSH_SMALL
|
||||||
@ -2016,9 +2016,9 @@ chvt(const Getopt *go)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((fd = open(dv, O_RDWR)) < 0) {
|
if ((fd = open(dv, O_RDWR | O_BINARY)) < 0) {
|
||||||
sleep(1);
|
sleep(1);
|
||||||
if ((fd = open(dv, O_RDWR)) < 0) {
|
if ((fd = open(dv, O_RDWR | O_BINARY)) < 0) {
|
||||||
errorf("%s: %s %s", "chvt", "can't open", dv);
|
errorf("%s: %s %s", "chvt", "can't open", dv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
9
sh.h
9
sh.h
@ -164,9 +164,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef EXTERN
|
#ifdef EXTERN
|
||||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.671 2013/09/24 20:19:44 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.672 2013/10/09 11:59:29 tg Exp $");
|
||||||
#endif
|
#endif
|
||||||
#define MKSH_VERSION "R48 2013/09/24"
|
#define MKSH_VERSION "R48 2013/10/08"
|
||||||
|
|
||||||
/* arithmetic types: C implementation */
|
/* arithmetic types: C implementation */
|
||||||
#if !HAVE_CAN_INTTYPES
|
#if !HAVE_CAN_INTTYPES
|
||||||
@ -396,6 +396,10 @@ extern int __cdecl setegid(gid_t);
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef O_BINARY
|
||||||
|
#define O_BINARY 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef MKSH__NO_SYMLINK
|
#ifdef MKSH__NO_SYMLINK
|
||||||
#undef S_ISLNK
|
#undef S_ISLNK
|
||||||
#define S_ISLNK(m) (/* CONSTCOND */ 0)
|
#define S_ISLNK(m) (/* CONSTCOND */ 0)
|
||||||
@ -2064,6 +2068,7 @@ Test_op test_isop(Test_meta, const char *);
|
|||||||
int test_eval(Test_env *, Test_op, const char *, const char *, bool);
|
int test_eval(Test_env *, Test_op, const char *, const char *, bool);
|
||||||
int test_parse(Test_env *);
|
int test_parse(Test_env *);
|
||||||
|
|
||||||
|
/* tty_fd is not opened O_BINARY, it's thus never read/written */
|
||||||
EXTERN int tty_fd E_INIT(-1); /* dup'd tty file descriptor */
|
EXTERN int tty_fd E_INIT(-1); /* dup'd tty file descriptor */
|
||||||
EXTERN bool tty_devtty; /* true if tty_fd is from /dev/tty */
|
EXTERN bool tty_devtty; /* true if tty_fd is from /dev/tty */
|
||||||
EXTERN mksh_ttyst tty_state; /* saved tty state */
|
EXTERN mksh_ttyst tty_state; /* saved tty state */
|
||||||
|
4
shf.c
4
shf.c
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/shf.c,v 1.61 2013/07/21 18:36:03 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/shf.c,v 1.62 2013/10/09 11:59:30 tg Exp $");
|
||||||
|
|
||||||
/* flags to shf_emptybuf() */
|
/* flags to shf_emptybuf() */
|
||||||
#define EB_READSW 0x01 /* about to switch to reading */
|
#define EB_READSW 0x01 /* about to switch to reading */
|
||||||
@ -62,7 +62,7 @@ shf_open(const char *name, int oflags, int mode, int sflags)
|
|||||||
shf->flags = SHF_ALLOCS;
|
shf->flags = SHF_ALLOCS;
|
||||||
/* Rest filled in by reopen. */
|
/* Rest filled in by reopen. */
|
||||||
|
|
||||||
fd = open(name, oflags, mode);
|
fd = open(name, oflags | O_BINARY, mode);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
eno = errno;
|
eno = errno;
|
||||||
afree(shf, shf->areap);
|
afree(shf, shf->areap);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user