summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2017-05-04 12:07:54 +0200
committerUlf Hermann <ulf.hermann@qt.io>2017-05-08 09:36:02 +0000
commit0cfab8d6e47c165ee02d027c11b9a11c726516fa (patch)
tree07868d226de62c4f9fd80ddb7882fe19151445b0
parent8ac52d75d47da355c4ace3224161de097db3e8d9 (diff)
Open files in O_BINARY
If O_BINARY is not defined, define it to 0, so that the change has no effect then. Some systems have separate binary and text modes for files, and we don't want the text mode to be used. Change-Id: If7efb5bd448c2a1c7d1eb5dab276849b1b15a3ce Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--lib/ChangeLog4
-rw-r--r--lib/eu-config.h4
-rw-r--r--libdwfl/ChangeLog15
-rw-r--r--libdwfl/argp-std.c2
-rw-r--r--libdwfl/dwfl_build_id_find_elf.c4
-rw-r--r--libdwfl/dwfl_module_getdwarf.c2
-rw-r--r--libdwfl/dwfl_report_elf.c2
-rw-r--r--libdwfl/dwfl_segment_report_module.c2
-rw-r--r--libdwfl/find-debuginfo.c2
-rw-r--r--libdwfl/link_map.c4
-rw-r--r--libdwfl/linux-kernel-modules.c20
-rw-r--r--libdwfl/linux-pid-attach.c6
-rw-r--r--libdwfl/linux-proc-maps.c10
-rw-r--r--libdwfl/offline.c2
-rw-r--r--libelf/ChangeLog4
-rw-r--r--libelf/nlist.c2
-rw-r--r--src/ChangeLog17
-rw-r--r--src/ar.c16
-rw-r--r--src/elfcmp.c2
-rw-r--r--src/elfcompress.c4
-rw-r--r--src/elflint.c2
-rw-r--r--src/findtextrel.c4
-rw-r--r--src/nm.c2
-rw-r--r--src/objdump.c2
-rw-r--r--src/ranlib.c2
-rw-r--r--src/readelf.c2
-rw-r--r--src/size.c2
-rw-r--r--src/stack.c2
-rw-r--r--src/strings.c2
-rw-r--r--src/strip.c4
-rw-r--r--src/unstrip.c4
-rw-r--r--tests/ChangeLog57
-rw-r--r--tests/alldts.c2
-rw-r--r--tests/allfcts.c4
-rw-r--r--tests/arextract.c4
-rw-r--r--tests/arls.c2
-rw-r--r--tests/arsymtest.c4
-rw-r--r--tests/asm-tst1.c2
-rw-r--r--tests/asm-tst2.c2
-rw-r--r--tests/asm-tst3.c2
-rw-r--r--tests/asm-tst7.c2
-rw-r--r--tests/asm-tst8.c2
-rw-r--r--tests/asm-tst9.c2
-rw-r--r--tests/backtrace-data.c2
-rw-r--r--tests/buildid.c2
-rw-r--r--tests/debugaltlink.c2
-rw-r--r--tests/debuglink.c2
-rw-r--r--tests/dwarf-getmacros.c2
-rw-r--r--tests/dwarf-getstring.c2
-rw-r--r--tests/dwarf-ranges.c2
-rw-r--r--tests/dwelfgnucompressed.c2
-rw-r--r--tests/early-offscn.c2
-rw-r--r--tests/ecp.c5
-rw-r--r--tests/elfgetchdr.c2
-rw-r--r--tests/elfgetzdata.c2
-rw-r--r--tests/elfputzdata.c2
-rw-r--r--tests/elfshphehdr.c2
-rw-r--r--tests/elfstrmerge.c4
-rw-r--r--tests/elfstrtab.c6
-rw-r--r--tests/emptyfile.c6
-rw-r--r--tests/fillfile.c6
-rw-r--r--tests/get-aranges.c2
-rw-r--r--tests/get-files.c2
-rw-r--r--tests/get-lines.c2
-rw-r--r--tests/get-pubnames.c2
-rw-r--r--tests/getsrc_die.c2
-rw-r--r--tests/newdata.c8
-rw-r--r--tests/rdwrmmap.c2
-rw-r--r--tests/rerequest_tag.c2
-rw-r--r--tests/saridx.c2
-rw-r--r--tests/scnnames.c2
-rw-r--r--tests/sectiondump.c2
-rw-r--r--tests/show-abbrev.c2
-rw-r--r--tests/show-die-info.c2
-rw-r--r--tests/showptable.c2
-rw-r--r--tests/strptr.c2
-rw-r--r--tests/test-elf_cntl_gelf_getshdr.c2
-rw-r--r--tests/test-flag-nobits.c2
-rw-r--r--tests/typeiter.c2
-rw-r--r--tests/typeiter2.c2
-rw-r--r--tests/update1.c2
-rw-r--r--tests/update2.c2
-rw-r--r--tests/update3.c2
-rw-r--r--tests/update4.c2
-rw-r--r--tests/vendorelf.c4
-rw-r--r--tests/zstrptr.c2
86 files changed, 226 insertions, 122 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 321513ca..9fa8ff0f 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,5 +1,9 @@
2017-05-04 Ulf Hermann <ulf.hermann@qt.io>
+ * eu-config.h: Define O_BINARY to 0 if it doesn't exist.
+
+2017-05-04 Ulf Hermann <ulf.hermann@qt.io>
+
* eu-config.h: Define unlocked I/O functions to locked ones if they
are unavailable.
diff --git a/lib/eu-config.h b/lib/eu-config.h
index 65300442..f2d91753 100644
--- a/lib/eu-config.h
+++ b/lib/eu-config.h
@@ -234,4 +234,8 @@ asm (".section predict_data, \"aw\"; .previous\n"
#define putchar_unlocked(x) putchar (x)
#endif
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
#endif /* eu-config.h */
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index 26a3599b..6f3a5611 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -1,3 +1,18 @@
+2017-05-04 Ulf Hermann <ulf.hermann@qt.io>
+
+ * argp-std.c: Open files in O_BINARY.
+ * dwfl_build_id_find_elf.c: Likewise.
+ * dwfl_build_id_find_elf.c: Likewise.
+ * dwfl_module_getdwarf.c: Likewise.
+ * dwfl_report_elf.c: Likewise.
+ * dwfl_segment_report_module.c: Likewise.
+ * find-debuginfo.c: Likewise.
+ * link_map.c: Likewise.
+ * linux-kernel-modules.c: Likewise.
+ * linux-pid-attach.c: Likewise.
+ * linux-proc-maps.c: Likewise.
+ * offline.c: Likewise.
+
2017-04-27 Ulf Hermann <ulf.hermann@qt.io>
* linux-kernel-modules.c: Don't include system.h.
diff --git a/libdwfl/argp-std.c b/libdwfl/argp-std.c
index 347a05b4..012eb0c7 100644
--- a/libdwfl/argp-std.c
+++ b/libdwfl/argp-std.c
@@ -277,7 +277,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
if (opt->core)
{
- int fd = open (opt->core, O_RDONLY);
+ int fd = open (opt->core, O_RDONLY | O_BINARY);
if (fd < 0)
{
int code = errno;
diff --git a/libdwfl/dwfl_build_id_find_elf.c b/libdwfl/dwfl_build_id_find_elf.c
index ee0c1646..6ce2c1cc 100644
--- a/libdwfl/dwfl_build_id_find_elf.c
+++ b/libdwfl/dwfl_build_id_find_elf.c
@@ -94,7 +94,7 @@ __libdwfl_open_by_build_id (Dwfl_Module *mod, bool debug, char **file_name,
break;
memcpy (mempcpy (name, dir, dirlen), id_name, sizeof id_name);
- fd = TEMP_FAILURE_RETRY (open (name, O_RDONLY));
+ fd = TEMP_FAILURE_RETRY (open (name, O_RDONLY | O_BINARY));
if (fd >= 0)
{
if (*file_name != NULL)
@@ -154,7 +154,7 @@ dwfl_build_id_find_elf (Dwfl_Module *mod,
recorded executable file when MOD was identified as main executable
(which then triggers opening and reporting of the executable). */
const char *executable = mod->dwfl->user_core->executable_for_core;
- int fd = open (executable, O_RDONLY);
+ int fd = open (executable, O_RDONLY | O_BINARY);
if (fd >= 0)
{
*file_name = strdup (executable);
diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c
index 9775aced..f6380934 100644
--- a/libdwfl/dwfl_module_getdwarf.c
+++ b/libdwfl/dwfl_module_getdwarf.c
@@ -51,7 +51,7 @@ open_elf_file (Elf **elf, int *fd, char **name)
/* If there was a pre-primed file name left that the callback left
behind, try to open that file name. */
if (*fd < 0 && *name != NULL)
- *fd = TEMP_FAILURE_RETRY (open (*name, O_RDONLY));
+ *fd = TEMP_FAILURE_RETRY (open (*name, O_RDONLY | O_BINARY));
if (*fd < 0)
return CBFAIL;
diff --git a/libdwfl/dwfl_report_elf.c b/libdwfl/dwfl_report_elf.c
index 6950a37b..d4d3feb9 100644
--- a/libdwfl/dwfl_report_elf.c
+++ b/libdwfl/dwfl_report_elf.c
@@ -295,7 +295,7 @@ dwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd,
if (fd < 0)
{
closefd = true;
- fd = open (file_name, O_RDONLY);
+ fd = open (file_name, O_RDONLY | O_BINARY);
if (fd < 0)
{
__libdwfl_seterrno (DWFL_E_ERRNO);
diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c
index 207a2573..cd8f6135 100644
--- a/libdwfl/dwfl_segment_report_module.c
+++ b/libdwfl/dwfl_segment_report_module.c
@@ -688,7 +688,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
name = file_note_name;
name_is_final = true;
bool invalid = false;
- fd = open (name, O_RDONLY);
+ fd = open (name, O_RDONLY | O_BINARY);
if (fd >= 0)
{
Dwfl_Error error = __libdw_open_file (&fd, &elf, true, false);
diff --git a/libdwfl/find-debuginfo.c b/libdwfl/find-debuginfo.c
index 6d5a42a6..7f7e1081 100644
--- a/libdwfl/find-debuginfo.c
+++ b/libdwfl/find-debuginfo.c
@@ -58,7 +58,7 @@ try_open (const struct stat *main_stat,
return -1;
struct stat st;
- int fd = TEMP_FAILURE_RETRY (open (fname, O_RDONLY));
+ int fd = TEMP_FAILURE_RETRY (open (fname, O_RDONLY | O_BINARY));
if (fd < 0)
free (fname);
else if (fstat (fd, &st) == 0
diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c
index 794668fc..4a50c441 100644
--- a/libdwfl/link_map.c
+++ b/libdwfl/link_map.c
@@ -393,7 +393,7 @@ report_r_debug (uint_fast8_t elfclass, uint_fast8_t elfdata,
{
/* This code is mostly inlined dwfl_report_elf. */
// XXX hook for sysroot
- int fd = open (name, O_RDONLY);
+ int fd = open (name, O_RDONLY | O_BINARY);
if (fd >= 0)
{
Elf *elf;
@@ -808,7 +808,7 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size,
EXECUTABLE_FOR_CORE to find where DYNAMIC is located in the
core file. */
- int fd = open (dwfl->user_core->executable_for_core, O_RDONLY);
+ int fd = open (dwfl->user_core->executable_for_core, O_RDONLY | O_BINARY);
Elf *elf;
Dwfl_Error error = DWFL_E_ERRNO;
if (fd != -1)
diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c
index 5f132b46..139a4774 100644
--- a/libdwfl/linux-kernel-modules.c
+++ b/libdwfl/linux-kernel-modules.c
@@ -97,7 +97,7 @@ try_kernel_name (Dwfl *dwfl, char **fname, bool try_debug)
int fd = ((((dwfl->callbacks->debuginfo_path
? *dwfl->callbacks->debuginfo_path : NULL)
?: DEFAULT_DEBUGINFO_PATH)[0] == ':') ? -1
- : TEMP_FAILURE_RETRY (open (*fname, O_RDONLY)));
+ : TEMP_FAILURE_RETRY (open (*fname, O_RDONLY | O_BINARY)));
if (fd < 0)
{
@@ -132,7 +132,7 @@ try_kernel_name (Dwfl *dwfl, char **fname, bool try_debug)
char *zname;
if (asprintf (&zname, "%s%s", *fname, vmlinux_suffixes[i]) > 0)
{
- fd = TEMP_FAILURE_RETRY (open (zname, O_RDONLY));
+ fd = TEMP_FAILURE_RETRY (open (zname, O_RDONLY | O_BINARY));
if (fd < 0)
free (zname);
else
@@ -488,7 +488,7 @@ intuit_kernel_bounds (Dwarf_Addr *start, Dwarf_Addr *end, Dwarf_Addr *notes)
{
struct read_address_state state = { NULL, NULL, 0, 0, NULL, NULL };
- state.f = fopen (KSYMSFILE, "r");
+ state.f = fopen (KSYMSFILE, "rb");
if (state.f == NULL)
return errno;
@@ -531,7 +531,7 @@ static int
check_notes (Dwfl_Module *mod, const char *notesfile,
Dwarf_Addr vaddr, const char *secname)
{
- int fd = open (notesfile, O_RDONLY);
+ int fd = open (notesfile, O_RDONLY | O_BINARY);
if (fd < 0)
return 1;
@@ -789,7 +789,7 @@ dwfl_linux_kernel_find_elf (Dwfl_Module *mod,
&& (!memcmp (f->fts_name, module_name, namelen)
|| !memcmp (f->fts_name, alternate_name, namelen)))
{
- int fd = open (f->fts_accpath, O_RDONLY);
+ int fd = open (f->fts_accpath, O_RDONLY | O_BINARY);
*file_name = strdup (f->fts_path);
fts_close (fts);
free (modulesdir[0]);
@@ -842,7 +842,7 @@ dwfl_linux_kernel_module_section_address
if (asprintf (&sysfile, SECADDRDIRFMT "%s", modname, secname) < 0)
return DWARF_CB_ABORT;
- FILE *f = fopen (sysfile, "r");
+ FILE *f = fopen (sysfile, "rb");
free (sysfile);
if (f == NULL)
@@ -876,7 +876,7 @@ dwfl_linux_kernel_module_section_address
if (asprintf (&sysfile, SECADDRDIRFMT "_%s",
modname, &secname[1]) < 0)
return ENOMEM;
- f = fopen (sysfile, "r");
+ f = fopen (sysfile, "rb");
free (sysfile);
if (f != NULL)
goto ok;
@@ -896,11 +896,11 @@ dwfl_linux_kernel_module_section_address
do
{
*--end = '\0';
- f = fopen (sysfile, "r");
+ f = fopen (sysfile, "rb");
if (is_init && f == NULL && errno == ENOENT)
{
sysfile[len - namelen] = '_';
- f = fopen (sysfile, "r");
+ f = fopen (sysfile, "rb");
sysfile[len - namelen] = '.';
}
}
@@ -934,7 +934,7 @@ INTDEF (dwfl_linux_kernel_module_section_address)
int
dwfl_linux_kernel_report_modules (Dwfl *dwfl)
{
- FILE *f = fopen (MODULELIST, "r");
+ FILE *f = fopen (MODULELIST, "rb");
if (f == NULL)
return errno;
diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c
index e6a5c419..1def7f16 100644
--- a/libdwfl/linux-pid-attach.c
+++ b/libdwfl/linux-pid-attach.c
@@ -52,7 +52,7 @@ linux_proc_pid_is_stopped (pid_t pid)
bool retval, have_state;
snprintf (buffer, sizeof (buffer), "/proc/%ld/status", (long) pid);
- procfile = fopen (buffer, "r");
+ procfile = fopen (buffer, "rb");
if (procfile == NULL)
return false;
@@ -302,7 +302,7 @@ dwfl_linux_proc_attach (Dwfl *dwfl, pid_t pid, bool assume_ptrace_stopped)
/* Make sure to report the actual PID (thread group leader) to
dwfl_attach_state. */
snprintf (buffer, sizeof (buffer), "/proc/%ld/status", (long) pid);
- procfile = fopen (buffer, "r");
+ procfile = fopen (buffer, "rb");
if (procfile == NULL)
{
err = errno;
@@ -352,7 +352,7 @@ dwfl_linux_proc_attach (Dwfl *dwfl, pid_t pid, bool assume_ptrace_stopped)
Elf *elf;
i = snprintf (name, sizeof (name), "/proc/%ld/exe", (long) pid);
assert (i > 0 && i < (ssize_t) sizeof (name) - 1);
- int elf_fd = open (name, O_RDONLY);
+ int elf_fd = open (name, O_RDONLY | O_BINARY);
if (elf_fd >= 0)
{
elf = elf_begin (elf_fd, ELF_C_READ_MMAP, NULL);
diff --git a/libdwfl/linux-proc-maps.c b/libdwfl/linux-proc-maps.c
index c4438c0f..78f472a8 100644
--- a/libdwfl/linux-proc-maps.c
+++ b/libdwfl/linux-proc-maps.c
@@ -63,7 +63,7 @@ get_pid_class (pid_t pid)
if (asprintf (&fname, PROCEXEFMT, pid) < 0)
return ELFCLASSNONE;
- int fd = open (fname, O_RDONLY);
+ int fd = open (fname, O_RDONLY | O_BINARY);
free (fname);
if (fd < 0)
return ELFCLASSNONE;
@@ -99,7 +99,7 @@ grovel_auxv (pid_t pid, Dwfl *dwfl, GElf_Addr *sysinfo_ehdr)
if (asprintf (&fname, PROCAUXVFMT, pid) < 0)
return ENOMEM;
- int fd = open (fname, O_RDONLY);
+ int fd = open (fname, O_RDONLY | O_BINARY);
free (fname);
if (fd < 0)
return errno == ENOENT ? 0 : errno;
@@ -306,7 +306,7 @@ dwfl_linux_proc_report (Dwfl *dwfl, pid_t pid)
if (asprintf (&fname, PROCMAPSFMT, pid) < 0)
return ENOMEM;
- FILE *f = fopen (fname, "r");
+ FILE *f = fopen (fname, "rb");
free (fname);
if (f == NULL)
return errno;
@@ -380,7 +380,7 @@ dwfl_linux_proc_find_elf (Dwfl_Module *mod __attribute__ ((unused)),
if (pid == -1)
{
- int fd = open (module_name, O_RDONLY);
+ int fd = open (module_name, O_RDONLY | O_BINARY);
if (fd >= 0)
{
*file_name = strdup (module_name);
@@ -417,7 +417,7 @@ dwfl_linux_proc_find_elf (Dwfl_Module *mod __attribute__ ((unused)),
if (asprintf (&fname, PROCMEMFMT, pid) < 0)
goto detach;
- int fd = open (fname, O_RDONLY);
+ int fd = open (fname, O_RDONLY | O_BINARY);
free (fname);
if (fd < 0)
goto detach;
diff --git a/libdwfl/offline.c b/libdwfl/offline.c
index 80c80a16..7666358f 100644
--- a/libdwfl/offline.c
+++ b/libdwfl/offline.c
@@ -302,7 +302,7 @@ dwfl_report_offline (Dwfl *dwfl, const char *name,
if (fd < 0)
{
closefd = true;
- fd = open (file_name, O_RDONLY);
+ fd = open (file_name, O_RDONLY | O_BINARY);
if (fd < 0)
{
__libdwfl_seterrno (DWFL_E_ERRNO);
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
index fd20ebb7..0f17347b 100644
--- a/libelf/ChangeLog
+++ b/libelf/ChangeLog
@@ -1,5 +1,9 @@
2017-05-04 Ulf Hermann <ulf.hermann@qt.io>
+ * nlist.c: Open files in O_BINARY.
+
+2017-05-04 Ulf Hermann <ulf.hermann@qt.io>
+
* elf_update.c: Don't try to posix_fallocate on systems where it isn't
available. Don't fchmod the output file if there is no fchmod.
diff --git a/libelf/nlist.c b/libelf/nlist.c
index c7b32fdb..f8488c14 100644
--- a/libelf/nlist.c
+++ b/libelf/nlist.c
@@ -71,7 +71,7 @@ nlist (const char *filename, struct nlist *nl)
size_t cnt;
/* Open the file. */
- fd = open (filename, O_RDONLY);
+ fd = open (filename, O_RDONLY | O_BINARY);
if (fd == -1)
{
__libelf_seterrno (ELF_E_NOFILE);
diff --git a/src/ChangeLog b/src/ChangeLog
index e0df2e13..7103770c 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,22 @@
2017-05-04 Ulf Hermann <ulf.hermann@qt.io>
+ * ar.c: Open files in O_BINARY.
+ * elfcmp.c: Likewise.
+ * elfcompress.c: Likewise.
+ * elflint.c: Likewise.
+ * findtextrel.c: Likewise.
+ * nm.c: Likewise.
+ * objdump.c: Likewise.
+ * ranlib.c: Likewise.
+ * readelf.c: Likewise.
+ * size.c: Likewise.
+ * stack.c: Likewise.
+ * strings.c: Likewise.
+ * strip.c: Likewise.
+ * unstrip.c: Likewise.
+
+2017-05-04 Ulf Hermann <ulf.hermann@qt.io>
+
* ar.c: Don't fchmod or fchown the output file if fchmod or fchown
don't exist.
* elfcompress.c: Likewise.
diff --git a/src/ar.c b/src/ar.c
index 45b219ac..91391b19 100644
--- a/src/ar.c
+++ b/src/ar.c
@@ -393,14 +393,14 @@ open_archive (const char *arfname, int flags, int mode, Elf **elf,
if (elf != NULL)
{
- Elf_Cmd cmd = flags == O_RDONLY ? ELF_C_READ_MMAP : ELF_C_RDWR_MMAP;
+ Elf_Cmd cmd = flags == (O_RDONLY | O_BINARY) ? ELF_C_READ_MMAP : ELF_C_RDWR_MMAP;
*elf = elf_begin (fd, cmd, NULL);
if (*elf == NULL)
error (EXIT_FAILURE, 0, gettext ("cannot open archive '%s': %s"),
arfname, elf_errmsg (-1));
- if (flags == O_RDONLY && elf_kind (*elf) != ELF_K_AR)
+ if (flags == (O_RDONLY | O_BINARY) && elf_kind (*elf) != ELF_K_AR)
error (EXIT_FAILURE, 0, gettext ("%s: not an archive file"), arfname);
}
@@ -467,7 +467,7 @@ do_oper_extract (int oper, const char *arfname, char **argv, int argc,
int status = 0;
Elf *elf;
- int fd = open_archive (arfname, O_RDONLY, 0, &elf, NULL, false);
+ int fd = open_archive (arfname, O_RDONLY | O_BINARY, 0, &elf, NULL, false);
if (hcreate (2 * argc) == 0)
error (EXIT_FAILURE, errno, gettext ("cannot create hash table"));
@@ -600,7 +600,7 @@ do_oper_extract (int oper, const char *arfname, char **argv, int argc,
{
/* We cannot create a temporary file. Try to overwrite
the file or create it if it does not exist. */
- int flags = O_WRONLY | O_CREAT;
+ int flags = O_WRONLY | O_BINARY | O_CREAT;
if (dont_replace_existing)
flags |= O_EXCL;
else
@@ -919,7 +919,7 @@ do_oper_delete (const char *arfname, char **argv, int argc,
int status = 0;
Elf *elf;
struct stat st;
- int fd = open_archive (arfname, O_RDONLY, 0, &elf, &st, false);
+ int fd = open_archive (arfname, O_RDONLY | O_BINARY, 0, &elf, &st, false);
if (hcreate (2 * argc) == 0)
error (EXIT_FAILURE, errno, gettext ("cannot create hash table"));
@@ -1099,7 +1099,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc,
int status = 0;
Elf *elf;
struct stat st;
- int fd = open_archive (arfname, O_RDONLY, 0, &elf, &st, oper != oper_move);
+ int fd = open_archive (arfname, O_RDONLY | O_BINARY, 0, &elf, &st, oper != oper_move);
/* List of the files we keep. */
struct armem *all = NULL;
@@ -1255,7 +1255,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc,
struct stat newst;
Elf *newelf;
- int newfd = open (argv[cnt], O_RDONLY);
+ int newfd = open (argv[cnt], O_RDONLY | O_BINARY);
if (newfd == -1)
{
error (0, errno, gettext ("cannot open %s"), argv[cnt]);
@@ -1399,7 +1399,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc,
newfd = mkstemp (tmpfname);
else
{
- newfd = open (arfname, O_RDWR | O_CREAT | O_EXCL, DEFFILEMODE);
+ newfd = open (arfname, O_RDWR | O_BINARY | O_CREAT | O_EXCL, DEFFILEMODE);
if (newfd == -1 && errno == EEXIST)
/* Bah, first the file did not exist, now it does. Restart. */
return do_oper_insert (oper, arfname, argv, argc, member);
diff --git a/src/elfcmp.c b/src/elfcmp.c
index 50464207..7ca7efa3 100644
--- a/src/elfcmp.c
+++ b/src/elfcmp.c
@@ -714,7 +714,7 @@ parse_opt (int key, char *arg,
static Elf *
open_file (const char *fname, int *fdp, Ebl **eblp)
{
- int fd = open (fname, O_RDONLY);
+ int fd = open (fname, O_RDONLY | O_BINARY);
if (unlikely (fd == -1))
error (2, errno, gettext ("cannot open '%s'"), fname);
Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL);
diff --git a/src/elfcompress.c b/src/elfcompress.c
index e092e136..5dbeb576 100644
--- a/src/elfcompress.c
+++ b/src/elfcompress.c
@@ -321,7 +321,7 @@ process_file (const char *fname)
return res;
}
- fd = open (fname, O_RDONLY);
+ fd = open (fname, O_RDONLY | O_BINARY);
if (fd < 0)
{
error (0, errno, "Couldn't open %s\n", fname);
@@ -542,7 +542,7 @@ process_file (const char *fname)
else
{
fnew = xstrdup (foutput);
- fdnew = open (fnew, O_WRONLY | O_CREAT, st.st_mode & ALLPERMS);
+ fdnew = open (fnew, O_WRONLY | O_BINARY | O_CREAT, st.st_mode & ALLPERMS);
}
if (fdnew < 0)
diff --git a/src/elflint.c b/src/elflint.c
index 51e53c23..18b5a4be 100644
--- a/src/elflint.c
+++ b/src/elflint.c
@@ -149,7 +149,7 @@ main (int argc, char *argv[])
do
{
/* Open the file. */
- int fd = open (argv[remaining], O_RDONLY);
+ int fd = open (argv[remaining], O_RDONLY | O_BINARY);
if (fd == -1)
{
error (0, errno, gettext ("cannot open input file"));
diff --git a/src/findtextrel.c b/src/findtextrel.c
index 8f1e239a..642c0237 100644
--- a/src/findtextrel.c
+++ b/src/findtextrel.c
@@ -200,7 +200,7 @@ process_file (const char *fname, bool more_than_one)
real_fname = new_fname;
}
- int fd = open (real_fname, O_RDONLY);
+ int fd = open (real_fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
error (0, errno, gettext ("cannot open '%s'"), fname);
@@ -373,7 +373,7 @@ cannot get program header index at offset %zd: %s"),
fname, fname_len),
".debug");
- fd2 = open (difname, O_RDONLY);
+ fd2 = open (difname, O_RDONLY | O_BINARY);
if (fd2 != -1
&& (elf2 = elf_begin (fd2, ELF_C_READ_MMAP, NULL)) != NULL)
dw = dwarf_begin_elf (elf2, DWARF_C_READ, NULL);
diff --git a/src/nm.c b/src/nm.c
index 969c6d35..6ab22b25 100644
--- a/src/nm.c
+++ b/src/nm.c
@@ -359,7 +359,7 @@ static int
process_file (const char *fname, bool more_than_one)
{
/* Open the file. */
- int fd = open (fname, O_RDONLY);
+ int fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
error (0, errno, gettext ("cannot open '%s'"), fname);
diff --git a/src/objdump.c b/src/objdump.c
index 860cfac6..13d3e0b8 100644
--- a/src/objdump.c
+++ b/src/objdump.c
@@ -236,7 +236,7 @@ static int
process_file (const char *fname, bool more_than_one)
{
/* Open the file. */
- int fd = open (fname, O_RDONLY);
+ int fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
error (0, errno, gettext ("cannot open %s"), fname);
diff --git a/src/ranlib.c b/src/ranlib.c
index ecaeb55a..41057de2 100644
--- a/src/ranlib.c
+++ b/src/ranlib.c
@@ -136,7 +136,7 @@ copy_content (Elf *elf, int newfd, off_t off, size_t n)
static int
handle_file (const char *fname)
{
- int fd = open (fname, O_RDONLY);
+ int fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
error (0, errno, gettext ("cannot open '%s'"), fname);
diff --git a/src/readelf.c b/src/readelf.c
index 40d49139..6811aced 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -297,7 +297,7 @@ main (int argc, char *argv[])
do
{
/* Open the file. */
- int fd = open (argv[remaining], O_RDONLY);
+ int fd = open (argv[remaining], O_RDONLY | O_BINARY);
if (fd == -1)
{
error (0, errno, gettext ("cannot open input file"));
diff --git a/src/size.c b/src/size.c
index ad8dbcbb..47748004 100644
--- a/src/size.c
+++ b/src/size.c
@@ -267,7 +267,7 @@ parse_opt (int key, char *arg,
static int
process_file (const char *fname)
{
- int fd = open (fname, O_RDONLY);
+ int fd = open (fname, O_RDONLY | O_BINARY);
if (unlikely (fd == -1))
{
error (0, errno, gettext ("cannot open '%s'"), fname);
diff --git a/src/stack.c b/src/stack.c
index 6f2ff69f..1f5a1c60 100644
--- a/src/stack.c
+++ b/src/stack.c
@@ -483,7 +483,7 @@ parse_opt (int key, char *arg __attribute__ ((unused)),
break;
case OPT_COREFILE:
- core_fd = open (arg, O_RDONLY);
+ core_fd = open (arg, O_RDONLY | O_BINARY);
if (core_fd < 0)
error (EXIT_BAD, errno, N_("Cannot open core file '%s'"), arg);
elf_version (EV_CURRENT);
diff --git a/src/strings.c b/src/strings.c
index 46b23560..8e2d098c 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -180,7 +180,7 @@ main (int argc, char *argv[])
do
{
int fd = (strcmp (argv[remaining], "-") == 0
- ? STDIN_FILENO : open (argv[remaining], O_RDONLY));
+ ? STDIN_FILENO : open (argv[remaining], O_RDONLY | O_BINARY));
if (unlikely (fd == -1))
{
error (0, errno, gettext ("cannot open '%s'"), argv[remaining]);
diff --git a/src/strip.c b/src/strip.c
index f5920812..db8ff2f5 100644
--- a/src/strip.c
+++ b/src/strip.c
@@ -315,7 +315,7 @@ process_file (const char *fname)
}
/* Open the file. */
- int fd = open (fname, output_fname == NULL ? O_RDWR : O_RDONLY);
+ int fd = open (fname, output_fname == NULL ? (O_RDWR | O_BINARY) : (O_RDONLY | O_BINARY));
if (fd == -1)
{
error (0, errno, gettext ("while opening '%s'"), fname);
@@ -447,7 +447,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
/* If we are not replacing the input file open a new file here. */
if (output_fname != NULL)
{
- fd = open (output_fname, O_RDWR | O_CREAT, mode);
+ fd = open (output_fname, O_RDWR | O_BINARY | O_CREAT, mode);
if (unlikely (fd == -1))
{
error (0, errno, gettext ("cannot open '%s'"), output_fname);
diff --git a/src/unstrip.c b/src/unstrip.c
index 50749093..8d5414fa 100644
--- a/src/unstrip.c
+++ b/src/unstrip.c
@@ -2017,7 +2017,7 @@ DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u"),
make_directories (output_file);
/* Copy the unstripped file and then modify it. */
- int outfd = open (output_file, O_RDWR | O_CREAT,
+ int outfd = open (output_file, O_RDWR | O_BINARY | O_CREAT,
stripped_ehdr->e_type == ET_REL ? 0666 : 0777);
if (outfd < 0)
error (EXIT_FAILURE, errno, _("cannot open '%s'"), output_file);
@@ -2047,7 +2047,7 @@ DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u"),
static int
open_file (const char *file, bool writable)
{
- int fd = open (file, writable ? O_RDWR : O_RDONLY);
+ int fd = open (file, writable ? (O_RDWR | O_BINARY) : (O_RDONLY | O_BINARY));
if (fd < 0)
error (EXIT_FAILURE, errno, _("cannot open '%s'"), file);
return fd;
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 611b88a7..b091ae07 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,5 +1,62 @@
2017-05-04 Ulf Hermann <ulf.hermann@qt.io>
+ * alldts.c: Open files in O_BINARY.
+ * allfcts.c: Likewise.
+ * arextract.c: Likewise.
+ * arls.c: Likewise.
+ * arsymtest.c: Likewise.
+ * asm-tst1.c: Likewise.
+ * asm-tst2.c: Likewise.
+ * asm-tst3.c: Likewise.
+ * asm-tst7.c: Likewise.
+ * asm-tst8.c: Likewise.
+ * asm-tst9.c: Likewise.
+ * backtrace-data.c: Likewise.
+ * buildid.c: Likewise.
+ * debugaltlink.c: Likewise.
+ * debuglink.c: Likewise.
+ * dwarf-getmacros.c: Likewise.
+ * dwarf-getstring.c: Likewise.
+ * dwarf-ranges.c: Likewise.
+ * dwelfgnucompressed.c: Likewise.
+ * early-offscn.c: Likewise.
+ * ecp.c: Likewise.
+ * elfgetchdr.c: Likewise.
+ * elfgetzdata.c: Likewise.
+ * elfputzdata.c: Likewise.
+ * elfshphehdr.c: Likewise.
+ * elfstrmerge.c: Likewise.
+ * elfstrtab.c: Likewise.
+ * emptyfile.c: Likewise.
+ * fillfile.c: Likewise.
+ * get-aranges.c: Likewise.
+ * get-files.c: Likewise.
+ * get-lines.c: Likewise.
+ * get-pubnames.c: Likewise.
+ * getsrc_die.c: Likewise.
+ * newdata.c: Likewise.
+ * rdwrmmap.c: Likewise.
+ * rerequest_tag.c: Likewise.
+ * saridx.c: Likewise.
+ * scnnames.c: Likewise.
+ * sectiondump.c: Likewise.
+ * show-abbrev.c: Likewise.
+ * show-die-info.c: Likewise.
+ * showptable.c: Likewise.
+ * strptr.c: Likewise.
+ * test-elf_cntl_gelf_getshdr.c: Likewise.
+ * test-flag-nobits.c: Likewise.
+ * typeiter.c: Likewise.
+ * typeiter2.c: Likewise.
+ * update1.c: Likewise.
+ * update2.c: Likewise.
+ * update3.c: Likewise.
+ * update4.c: Likewise.
+ * vendorelf.c: Likewise.
+ * zstrptr.c: Likewise.
+
+2017-05-04 Ulf Hermann <ulf.hermann@qt.io>
+
* deleted.c: If fork() is unavailable, skip the test.
2017-05-04 Ulf Hermann <ulf.hermann@qt.io>
diff --git a/tests/alldts.c b/tests/alldts.c
index 28b3063c..abddf084 100644
--- a/tests/alldts.c
+++ b/tests/alldts.c
@@ -68,7 +68,7 @@ main (void)
(void) __fsetlocking (stdout, FSETLOCKING_BYCALLER);
/* Open the file. */
- int fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ int fd = open (fname, O_RDWR | O_BINARY | O_CREAT | O_TRUNC, 0666);
if (fd == -1)
{
printf ("cannot open `%s': %m\n", fname);
diff --git a/tests/allfcts.c b/tests/allfcts.c
index 84ac53df..30609efb 100644
--- a/tests/allfcts.c
+++ b/tests/allfcts.c
@@ -53,7 +53,7 @@ setup_alt (Dwarf *main)
fprintf (stderr, "allfcts: dwelf_dwarf_gnu_debugaltlink: %s\n", dwarf_errmsg (-1));
exit(1);
}
- int fd = open (alt_name, O_RDONLY);
+ int fd = open (alt_name, O_RDONLY | O_BINARY);
if (fd < 0) {
fprintf (stderr, "allfcts: open (%s): %s\n", alt_name, strerror(errno));
exit(1);
@@ -77,7 +77,7 @@ main (int argc, char *argv[])
{
for (int i = 1; i < argc; ++i)
{
- int fd = open (argv[i], O_RDONLY);
+ int fd = open (argv[i], O_RDONLY | O_BINARY);
if (fd < 0) {
fprintf (stderr, "open (%s): %s\n", argv[i], strerror(errno));
exit(1);
diff --git a/tests/arextract.c b/tests/arextract.c
index 2c4dc758..f3623b9e 100644
--- a/tests/arextract.c
+++ b/tests/arextract.c
@@ -42,7 +42,7 @@ main (int argc, char *argv[])
exit (1);
/* Open the archive. */
- fd = open (argv[1], O_RDONLY);
+ fd = open (argv[1], O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("Cannot open input file: %m");
@@ -95,7 +95,7 @@ Failed to get base address for the archive element: %s\n",
}
/* Open the output file. */
- outfd = open (argv[3], O_CREAT | O_TRUNC | O_RDWR, 0666);
+ outfd = open (argv[3], O_CREAT | O_TRUNC | O_RDWR | O_BINARY, 0666);
if (outfd == -1)
{
printf ("cannot open output file: %m");
diff --git a/tests/arls.c b/tests/arls.c
index ca0d3e6e..244b0fb6 100644
--- a/tests/arls.c
+++ b/tests/arls.c
@@ -47,7 +47,7 @@ main (int argc, char *argv[])
static int
handle (const char *fname)
{
- int fd = open (fname, O_RDONLY);
+ int fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open '%s': %m\n", fname);
diff --git a/tests/arsymtest.c b/tests/arsymtest.c
index c724863f..ca216eb1 100644
--- a/tests/arsymtest.c
+++ b/tests/arsymtest.c
@@ -37,7 +37,7 @@ main (int argc, char *argv[])
exit (1);
/* Open the archive. */
- fd = open (argv[1], O_RDONLY);
+ fd = open (argv[1], O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("Cannot open input file: %m");
@@ -45,7 +45,7 @@ main (int argc, char *argv[])
}
/* Open the output file. */
- fp = fopen (argv[2], "w");
+ fp = fopen (argv[2], "wb");
if (fp == NULL)
{
printf ("Cannot open output file: %m");
diff --git a/tests/asm-tst1.c b/tests/asm-tst1.c
index 9afc676b..085ec3e0 100644
--- a/tests/asm-tst1.c
+++ b/tests/asm-tst1.c
@@ -114,7 +114,7 @@ main (void)
}
/* Check the file. */
- fd = open (fname, O_RDONLY);
+ fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open generated file: %m\n");
diff --git a/tests/asm-tst2.c b/tests/asm-tst2.c
index 2556d0c4..f7b36786 100644
--- a/tests/asm-tst2.c
+++ b/tests/asm-tst2.c
@@ -130,7 +130,7 @@ main (void)
}
/* Check the file. */
- fd = open (fname, O_RDONLY);
+ fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open generated file: %m\n");
diff --git a/tests/asm-tst3.c b/tests/asm-tst3.c
index e52cfbe1..a8f145d4 100644
--- a/tests/asm-tst3.c
+++ b/tests/asm-tst3.c
@@ -137,7 +137,7 @@ main (void)
}
/* Check the file. */
- fd = open (fname, O_RDONLY);
+ fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open generated file: %m\n");
diff --git a/tests/asm-tst7.c b/tests/asm-tst7.c
index 00cb2bfe..aca91c7c 100644
--- a/tests/asm-tst7.c
+++ b/tests/asm-tst7.c
@@ -71,7 +71,7 @@ main (void)
}
/* Check the file. */
- fd = open (fname, O_RDONLY);
+ fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open generated file: %m\n");
diff --git a/tests/asm-tst8.c b/tests/asm-tst8.c
index 4fb0d998..d1c64d24 100644
--- a/tests/asm-tst8.c
+++ b/tests/asm-tst8.c
@@ -72,7 +72,7 @@ main (void)
}
/* Check the file. */
- fd = open (fname, O_RDONLY);
+ fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open generated file: %m\n");
diff --git a/tests/asm-tst9.c b/tests/asm-tst9.c
index b6d0e431..368c0751 100644
--- a/tests/asm-tst9.c
+++ b/tests/asm-tst9.c
@@ -164,7 +164,7 @@ main (void)
}
/* Check the file. */
- fd = open (fname, O_RDONLY);
+ fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open generated file: %m\n");
diff --git a/tests/backtrace-data.c b/tests/backtrace-data.c
index a387d8ff..6db98789 100644
--- a/tests/backtrace-data.c
+++ b/tests/backtrace-data.c
@@ -98,7 +98,7 @@ maps_lookup (pid_t pid, Dwarf_Addr addr, GElf_Addr *basep)
int i = asprintf (&fname, "/proc/%ld/maps", (long) pid);
assert (errno == 0);
assert (i > 0);
- FILE *f = fopen (fname, "r");
+ FILE *f = fopen (fname, "rb");
assert (errno == 0);
assert (f);
free (fname);
diff --git a/tests/buildid.c b/tests/buildid.c
index 2d334020..1049860c 100644
--- a/tests/buildid.c
+++ b/tests/buildid.c
@@ -41,7 +41,7 @@ main (int argc, char *argv[])
for (int i = 1; i < argc; i++)
{
const char *file = argv[i];
- int fd = open (file, O_RDONLY);
+ int fd = open (file, O_RDONLY | O_BINARY);
if (fd < 0)
error (EXIT_FAILURE, errno, "couldn't open file '%s'", file);
diff --git a/tests/debugaltlink.c b/tests/debugaltlink.c
index b470e316..4618b615 100644
--- a/tests/debugaltlink.c
+++ b/tests/debugaltlink.c
@@ -41,7 +41,7 @@ main (int argc, char *argv[])
for (int i = 1; i < argc; i++)
{
const char *file = argv[i];
- int fd = open (file, O_RDONLY);
+ int fd = open (file, O_RDONLY | O_BINARY);
if (fd < 0)
error (EXIT_FAILURE, errno, "couldn't open file '%s'", file);
diff --git a/tests/debuglink.c b/tests/debuglink.c
index 935d1029..ea5bd238 100644
--- a/tests/debuglink.c
+++ b/tests/debuglink.c
@@ -40,7 +40,7 @@ main (int argc, char *argv[])
for (int i = 1; i < argc; i++)
{
const char *file = argv[i];
- int fd = open (file, O_RDONLY);
+ int fd = open (file, O_RDONLY | O_BINARY);
if (fd < 0)
error (EXIT_FAILURE, errno, "couldn't open file '%s'", file);
diff --git a/tests/dwarf-getmacros.c b/tests/dwarf-getmacros.c
index 92e093ca..d5d1e2c8 100644
--- a/tests/dwarf-getmacros.c
+++ b/tests/dwarf-getmacros.c
@@ -125,7 +125,7 @@ main (int argc, char *argv[])
ptrdiff_t cuoff = strtol (argv[2], NULL, 0);
bool new_style = argc > 3;
- int fd = open (name, O_RDONLY);
+ int fd = open (name, O_RDONLY | O_BINARY);
Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
Dwarf_Die cudie_mem, *cudie = dwarf_offdie (dbg, cuoff, &cudie_mem);
diff --git a/tests/dwarf-getstring.c b/tests/dwarf-getstring.c
index ffa3e375..a735a804 100644
--- a/tests/dwarf-getstring.c
+++ b/tests/dwarf-getstring.c
@@ -37,7 +37,7 @@ main (int argc, char *argv[])
Dwarf_Off offset = 0;
size_t len;
- int fd = open (argv[cnt], O_RDONLY);
+ int fd = open (argv[cnt], O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open '%s': %m\n", argv[cnt]);
diff --git a/tests/dwarf-ranges.c b/tests/dwarf-ranges.c
index 4bcf96ce..0eec90c3 100644
--- a/tests/dwarf-ranges.c
+++ b/tests/dwarf-ranges.c
@@ -34,7 +34,7 @@ main (int argc, char *argv[])
const char *name = argv[1];
ptrdiff_t cuoff = strtol (argv[2], NULL, 0);
- int fd = open (name, O_RDONLY);
+ int fd = open (name, O_RDONLY | O_BINARY);
Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
Dwarf_Die cudie_mem, *cudie = dwarf_offdie (dbg, cuoff, &cudie_mem);
diff --git a/tests/dwelfgnucompressed.c b/tests/dwelfgnucompressed.c
index 0132271c..e8427427 100644
--- a/tests/dwelfgnucompressed.c
+++ b/tests/dwelfgnucompressed.c
@@ -42,7 +42,7 @@ main (int argc, char *argv[])
for (cnt = 1; cnt < argc; ++cnt)
{
- int fd = open (argv[cnt], O_RDONLY);
+ int fd = open (argv[cnt], O_RDONLY | O_BINARY);
Elf *elf = elf_begin (fd, ELF_C_READ, NULL);
if (elf == NULL)
diff --git a/tests/early-offscn.c b/tests/early-offscn.c
index 924cb9ef..d47abc88 100644
--- a/tests/early-offscn.c
+++ b/tests/early-offscn.c
@@ -35,7 +35,7 @@ main (int argc, char *argv[])
elf_version (EV_CURRENT);
/* Open the archive. */
- int fd = open (argv[1], O_RDONLY);
+ int fd = open (argv[1], O_RDONLY | O_BINARY);
if (fd < 0)
error (1, errno, "cannot open '%s'", argv[1]);
diff --git a/tests/ecp.c b/tests/ecp.c
index 38a6859e..0882c54e 100644
--- a/tests/ecp.c
+++ b/tests/ecp.c
@@ -34,7 +34,7 @@ main (int argc, char *argv[])
elf_version (EV_CURRENT);
- int infd = open (argv[1], O_RDONLY);
+ int infd = open (argv[1], O_RDONLY | O_BINARY);
if (infd == -1)
error (EXIT_FAILURE, errno, "cannot open input file '%s'", argv[1]);
@@ -46,6 +46,9 @@ main (int argc, char *argv[])
int outfd = creat (argv[2], 0666);
if (outfd == -1)
error (EXIT_FAILURE, errno, "cannot open output file '%s'", argv[2]);
+#if (defined _WIN32 || defined __WIN32__)
+ _setmode (outfd, O_BINARY);
+#endif
Elf *outelf = elf_begin (outfd, ELF_C_WRITE, NULL);
if (outelf == NULL)
diff --git a/tests/elfgetchdr.c b/tests/elfgetchdr.c
index 44ba1789..f23b3af3 100644
--- a/tests/elfgetchdr.c
+++ b/tests/elfgetchdr.c
@@ -42,7 +42,7 @@ main (int argc, char *argv[])
for (cnt = 1; cnt < argc; ++cnt)
{
- int fd = open (argv[cnt], O_RDONLY);
+ int fd = open (argv[cnt], O_RDONLY | O_BINARY);
Elf *elf = elf_begin (fd, ELF_C_READ, NULL);
if (elf == NULL)
diff --git a/tests/elfgetzdata.c b/tests/elfgetzdata.c
index 82afbe52..562adafb 100644
--- a/tests/elfgetzdata.c
+++ b/tests/elfgetzdata.c
@@ -50,7 +50,7 @@ main (int argc, char *argv[])
for (cnt = 2; cnt < argc; ++cnt)
{
- int fd = open (argv[cnt], O_RDONLY);
+ int fd = open (argv[cnt], O_RDONLY | O_BINARY);
Elf *elf = elf_begin (fd, mmap ? ELF_C_READ_MMAP : ELF_C_READ, NULL);
if (elf == NULL)
diff --git a/tests/elfputzdata.c b/tests/elfputzdata.c
index 66ab77ba..12b05712 100644
--- a/tests/elfputzdata.c
+++ b/tests/elfputzdata.c
@@ -55,7 +55,7 @@ main (int argc, char *argv[])
for (cnt = 2; cnt < argc; ++cnt)
{
- int fd = open (argv[cnt], O_RDONLY);
+ int fd = open (argv[cnt], O_RDONLY | O_BINARY);
Elf *elf = elf_begin (fd, ELF_C_READ, NULL);
if (elf == NULL)
diff --git a/tests/elfshphehdr.c b/tests/elfshphehdr.c
index 5a297e0d..d1ab633b 100644
--- a/tests/elfshphehdr.c
+++ b/tests/elfshphehdr.c
@@ -152,7 +152,7 @@ main (int argc __attribute__ ((unused)), char **argv __attribute ((unused)))
{
elf_version (EV_CURRENT);
- int fd = fd = open("/dev/zero", O_WRONLY);
+ int fd = fd = open("/dev/zero", O_WRONLY | O_BINARY);
check ("open", fd >= 0);
Elf *elf;
diff --git a/tests/elfstrmerge.c b/tests/elfstrmerge.c
index 17f40c7d..ff15f57d 100644
--- a/tests/elfstrmerge.c
+++ b/tests/elfstrmerge.c
@@ -164,7 +164,7 @@ main (int argc, char **argv)
fname = argv[1];
else
fname = argv[3];
- fd = open (fname, O_RDONLY);
+ fd = open (fname, O_RDONLY | O_BINARY);
if (fd < 0)
fail_errno ("couldn't open", fname);
@@ -367,7 +367,7 @@ main (int argc, char **argv)
else
{
fnew = argv[2];
- fdnew = open (fnew, O_WRONLY | O_CREAT, st.st_mode & ALLPERMS);
+ fdnew = open (fnew, O_WRONLY | O_CREAT | O_BINARY, st.st_mode & ALLPERMS);
}
if (fdnew < 0)
diff --git a/tests/elfstrtab.c b/tests/elfstrtab.c
index c27d6cfb..69ba46b4 100644
--- a/tests/elfstrtab.c
+++ b/tests/elfstrtab.c
@@ -134,7 +134,7 @@ check_elf (const char *fname, int class, int use_mmap)
printf ("\nfname: %s\n", fname);
stridx = 0;
- int fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ int fd = open (fname, O_RDWR | O_BINARY | O_CREAT | O_TRUNC, 0666);
if (fd == -1)
{
printf ("cannot open `%s': %s\n", fname, strerror (errno));
@@ -280,7 +280,7 @@ check_elf (const char *fname, int class, int use_mmap)
close (fd);
/* Read the ELF from disk now. */
- fd = open (fname, O_RDWR, 0666);
+ fd = open (fname, O_RDWR | O_BINARY, 0666);
if (fd == -1)
{
printf ("cannot open `%s' read-only: %s\n", fname, strerror (errno));
@@ -349,7 +349,7 @@ check_elf (const char *fname, int class, int use_mmap)
close (fd);
// And read it in one last time.
- fd = open (fname, O_RDONLY, 0666);
+ fd = open (fname, O_RDONLY | O_BINARY, 0666);
if (fd == -1)
{
printf ("cannot open `%s' read-only: %s\n", fname, strerror (errno));
diff --git a/tests/emptyfile.c b/tests/emptyfile.c
index 6d086246..ad024968 100644
--- a/tests/emptyfile.c
+++ b/tests/emptyfile.c
@@ -67,7 +67,7 @@ check_elf (const char *fname, int class, int use_mmap)
printf ("\nfname: %s\n", fname);
stridx = 0; // Reset strtab strings index
- int fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ int fd = open (fname, O_RDWR | O_BINARY | O_CREAT | O_TRUNC, 0666);
if (fd == -1)
{
printf ("cannot open `%s': %s\n", fname, strerror (errno));
@@ -125,7 +125,7 @@ check_elf (const char *fname, int class, int use_mmap)
close (fd);
/* Reread the ELF from disk now. */
- fd = open (fname, O_RDWR, 0666);
+ fd = open (fname, O_RDWR | O_BINARY, 0666);
if (fd == -1)
{
printf ("cannot (re)open `%s': %s\n", fname, strerror (errno));
@@ -208,7 +208,7 @@ check_elf (const char *fname, int class, int use_mmap)
close (fd);
// And read it in one last time.
- fd = open (fname, O_RDONLY, 0666);
+ fd = open (fname, O_RDONLY | O_BINARY, 0666);
if (fd == -1)
{
printf ("cannot open `%s' read-only: %s\n", fname, strerror (errno));
diff --git a/tests/fillfile.c b/tests/fillfile.c
index 915e249d..4529637b 100644
--- a/tests/fillfile.c
+++ b/tests/fillfile.c
@@ -201,7 +201,7 @@ check_elf (const char *fname, int class, int use_mmap)
printf ("\nfname: %s\n", fname);
stridx = 0; // Reset strtab strings index
- int fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ int fd = open (fname, O_RDWR | O_CREAT | O_TRUNC | O_BINARY, 0666);
if (fd == -1)
{
printf ("cannot open `%s': %s\n", fname, strerror (errno));
@@ -266,7 +266,7 @@ check_elf (const char *fname, int class, int use_mmap)
/* Reread the ELF from disk now. */
printf ("Rereading %s\n", fname);
- fd = open (fname, O_RDWR, 0666);
+ fd = open (fname, O_RDWR | O_BINARY, 0666);
if (fd == -1)
{
printf ("cannot (re)open `%s': %s\n", fname, strerror (errno));
@@ -347,7 +347,7 @@ check_elf (const char *fname, int class, int use_mmap)
// And read it in one last time.
printf ("Rereading %s again\n", fname);
- fd = open (fname, O_RDONLY, 0666);
+ fd = open (fname, O_RDONLY | O_BINARY, 0666);
if (fd == -1)
{
printf ("cannot open `%s' read-only: %s\n", fname, strerror (errno));
diff --git a/tests/get-aranges.c b/tests/get-aranges.c
index 7f85cdad..e41fb12e 100644
--- a/tests/get-aranges.c
+++ b/tests/get-aranges.c
@@ -43,7 +43,7 @@ main (int argc, char *argv[])
for (cnt = 1; cnt < argc; ++cnt)
{
- int fd = open (argv[cnt], O_RDONLY);
+ int fd = open (argv[cnt], O_RDONLY | O_BINARY);
Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
if (dbg == NULL)
diff --git a/tests/get-files.c b/tests/get-files.c
index 04091733..205c10b2 100644
--- a/tests/get-files.c
+++ b/tests/get-files.c
@@ -34,7 +34,7 @@ main (int argc, char *argv[])
for (cnt = 1; cnt < argc; ++cnt)
{
- int fd = open (argv[cnt], O_RDONLY);
+ int fd = open (argv[cnt], O_RDONLY | O_BINARY);
Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
if (dbg == NULL)
diff --git a/tests/get-lines.c b/tests/get-lines.c
index c361a2c3..5934f8c0 100644
--- a/tests/get-lines.c
+++ b/tests/get-lines.c
@@ -35,7 +35,7 @@ main (int argc, char *argv[])
for (cnt = 1; cnt < argc; ++cnt)
{
- int fd = open (argv[cnt], O_RDONLY);
+ int fd = open (argv[cnt], O_RDONLY | O_BINARY);
Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
if (dbg == NULL)
diff --git a/tests/get-pubnames.c b/tests/get-pubnames.c
index 4777f49d..63fe1934 100644
--- a/tests/get-pubnames.c
+++ b/tests/get-pubnames.c
@@ -71,7 +71,7 @@ main (int argc, char *argv[])
for (cnt = 1; cnt < argc; ++cnt)
{
- int fd = open (argv[cnt], O_RDONLY);
+ int fd = open (argv[cnt], O_RDONLY | O_BINARY);
Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
if (dbg == NULL)
{
diff --git a/tests/getsrc_die.c b/tests/getsrc_die.c
index 055aede0..3c5060bf 100644
--- a/tests/getsrc_die.c
+++ b/tests/getsrc_die.c
@@ -33,7 +33,7 @@ int
main (int argc, char *argv[])
{
/* file addr+ */
- int fd = open (argv[1], O_RDONLY);
+ int fd = open (argv[1], O_RDONLY | O_BINARY);
Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
if (dbg == NULL)
error (-1, 0, "dwarf_begin (%s): %s\n", argv[1], dwarf_errmsg (-1));
diff --git a/tests/newdata.c b/tests/newdata.c
index 9af99564..bb9f313e 100644
--- a/tests/newdata.c
+++ b/tests/newdata.c
@@ -243,7 +243,7 @@ check_elf (int class, int use_mmap)
printf ("\ncheck_elf: %s\n", fname);
- int fd = open (fname, O_RDWR|O_CREAT|O_TRUNC, 00666);
+ int fd = open (fname, O_RDWR | O_BINARY|O_CREAT|O_TRUNC, 00666);
if (fd == -1)
{
printf ("cannot create `%s': %s\n", fname, strerror (errno));
@@ -268,7 +268,7 @@ check_elf (int class, int use_mmap)
close (fd);
// Read the ELF from disk now. And add new data directly.
- fd = open (fname, O_RDONLY);
+ fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open `%s' read-only: %s\n", fname, strerror (errno));
@@ -298,7 +298,7 @@ check_elf (int class, int use_mmap)
close (fd);
// Read the ELF from disk now. And add new data after raw reading.
- fd = open (fname, O_RDONLY);
+ fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open `%s' read-only: %s\n", fname, strerror (errno));
@@ -350,7 +350,7 @@ check_elf (int class, int use_mmap)
close (fd);
// Read the ELF from disk now. And add new data after data reading.
- fd = open (fname, O_RDONLY);
+ fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open `%s' read-only: %s\n", fname, strerror (errno));
diff --git a/tests/rdwrmmap.c b/tests/rdwrmmap.c
index 6f027dfe..1a968ebf 100644
--- a/tests/rdwrmmap.c
+++ b/tests/rdwrmmap.c
@@ -28,7 +28,7 @@
int
main (int argc __attribute__ ((unused)), char *argv[])
{
- int fd = open (argv[1], O_RDWR);
+ int fd = open (argv[1], O_RDWR | O_BINARY);
if (fd < 0)
error (2, errno, "open: %s", argv[1]);
diff --git a/tests/rerequest_tag.c b/tests/rerequest_tag.c
index b4d46271..02f3902a 100644
--- a/tests/rerequest_tag.c
+++ b/tests/rerequest_tag.c
@@ -27,7 +27,7 @@ main (int argc, char **argv)
{
assert (argc > 1);
- int i = open (argv[1], O_RDONLY);
+ int i = open (argv[1], O_RDONLY | O_BINARY);
assert (i >= 0);
Dwarf *dw = dwarf_begin (i, DWARF_C_READ);
diff --git a/tests/saridx.c b/tests/saridx.c
index 8a450d82..37c0bbf2 100644
--- a/tests/saridx.c
+++ b/tests/saridx.c
@@ -106,7 +106,7 @@ main (int argc, char *argv[])
error (EXIT_FAILURE, 0, "No input file given");
/* Open the input file. */
- fd = open (argv[arg], O_RDONLY);
+ fd = open (argv[arg], O_RDONLY | O_BINARY);
if (fd == -1)
{
perror ("cannot open input file");
diff --git a/tests/scnnames.c b/tests/scnnames.c
index 7f268258..0c5922f6 100644
--- a/tests/scnnames.c
+++ b/tests/scnnames.c
@@ -39,7 +39,7 @@ main (int argc, char *argv[])
exit (1);
}
- fd = open (argv[1], O_RDONLY);
+ fd = open (argv[1], O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open \"%s\": %s\n", argv[1], strerror (errno));
diff --git a/tests/sectiondump.c b/tests/sectiondump.c
index 3033fedc..edec1a7a 100644
--- a/tests/sectiondump.c
+++ b/tests/sectiondump.c
@@ -45,7 +45,7 @@ main (int argc, char *argv[])
/* Open the test file. This is given as the first parameter to the
program. */
- fd = open (argv[1], O_RDONLY);
+ fd = open (argv[1], O_RDONLY | O_BINARY);
if (fd == -1)
error (EXIT_FAILURE, errno, "cannot open input file `%s'", argv[1]);
diff --git a/tests/show-abbrev.c b/tests/show-abbrev.c
index b0af0297..3a0c91d1 100644
--- a/tests/show-abbrev.c
+++ b/tests/show-abbrev.c
@@ -31,7 +31,7 @@ main (int argc, char *argv[])
for (cnt = 1; cnt < argc; ++cnt)
{
- int fd = open (argv[cnt], O_RDONLY);
+ int fd = open (argv[cnt], O_RDONLY | O_BINARY);
Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
if (dbg == NULL)
{
diff --git a/tests/show-die-info.c b/tests/show-die-info.c
index 34e27a3b..1eb0bfb9 100644
--- a/tests/show-die-info.c
+++ b/tests/show-die-info.c
@@ -315,7 +315,7 @@ main (int argc, char *argv[])
for (cnt = 1; cnt < argc; ++cnt)
{
- int fd = open (argv[cnt], O_RDONLY);
+ int fd = open (argv[cnt], O_RDONLY | O_BINARY);
Dwarf *dbg;
printf ("file: %s\n", basename (argv[cnt]));
diff --git a/tests/showptable.c b/tests/showptable.c
index a794b0e8..5586c5f3 100644
--- a/tests/showptable.c
+++ b/tests/showptable.c
@@ -38,7 +38,7 @@ main (int argc, char *argv[])
exit (1);
}
- fd = open (argv[1], O_RDONLY);
+ fd = open (argv[1], O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open \"%s\": %s\n", argv[1], strerror (errno));
diff --git a/tests/strptr.c b/tests/strptr.c
index 759664aa..98f9c468 100644
--- a/tests/strptr.c
+++ b/tests/strptr.c
@@ -45,7 +45,7 @@ main (int argc, char *argv[])
elf_version (EV_CURRENT);
/* Read the ELF from disk now. */
- int fd = open (fname, O_RDONLY);
+ int fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open `%s' read-only: %s\n", fname, strerror (errno));
diff --git a/tests/test-elf_cntl_gelf_getshdr.c b/tests/test-elf_cntl_gelf_getshdr.c
index 7371110c..2bc822c3 100644
--- a/tests/test-elf_cntl_gelf_getshdr.c
+++ b/tests/test-elf_cntl_gelf_getshdr.c
@@ -67,7 +67,7 @@ main (int argc, char *argv[])
elf_version (EV_CURRENT);
- int fd = open (argv[2], O_RDONLY);
+ int fd = open (argv[2], O_RDONLY | O_BINARY);
if (fd < 0)
{
fprintf (stderr, "Cannot open input file %s: %s\n", argv[2],
diff --git a/tests/test-flag-nobits.c b/tests/test-flag-nobits.c
index 15d44ea8..5472fe05 100644
--- a/tests/test-flag-nobits.c
+++ b/tests/test-flag-nobits.c
@@ -30,7 +30,7 @@ main (int argc, char **argv)
elf_version (EV_CURRENT);
- int fd = open (argv[1], O_RDONLY);
+ int fd = open (argv[1], O_RDONLY | O_BINARY);
Elf *stripped = elf_begin (fd, ELF_C_READ, NULL);
Elf_Scn *scn = NULL;
diff --git a/tests/typeiter.c b/tests/typeiter.c
index dff45260..a3ef823c 100644
--- a/tests/typeiter.c
+++ b/tests/typeiter.c
@@ -29,7 +29,7 @@ main (int argc, char *argv[])
{
for (int i = 1; i < argc; ++i)
{
- int fd = open (argv[i], O_RDONLY);
+ int fd = open (argv[i], O_RDONLY | O_BINARY);
Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
if (dbg != NULL)
diff --git a/tests/typeiter2.c b/tests/typeiter2.c
index 35b6a12e..c1b19f75 100644
--- a/tests/typeiter2.c
+++ b/tests/typeiter2.c
@@ -30,7 +30,7 @@ main (int argc, char *argv[])
{
for (int i = 1; i < argc; ++i)
{
- int fd = open (argv[i], O_RDONLY);
+ int fd = open (argv[i], O_RDONLY | O_BINARY);
Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ);
if (dbg != NULL)
diff --git a/tests/update1.c b/tests/update1.c
index f4c14753..a5716185 100644
--- a/tests/update1.c
+++ b/tests/update1.c
@@ -38,7 +38,7 @@ main (int argc, char *argv[] __attribute__ ((unused)))
Elf32_Ehdr *ehdr;
int i;
- fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ fd = open (fname, O_RDWR | O_BINARY | O_CREAT | O_TRUNC, 0666);
if (fd == -1)
{
printf ("cannot open `%s': %s\n", fname, strerror (errno));
diff --git a/tests/update2.c b/tests/update2.c
index 5805163d..3e228796 100644
--- a/tests/update2.c
+++ b/tests/update2.c
@@ -39,7 +39,7 @@ main (int argc, char *argv[] __attribute__ ((unused)))
Elf32_Phdr *phdr;
int i;
- fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ fd = open (fname, O_RDWR | O_BINARY | O_CREAT | O_TRUNC, 0666);
if (fd == -1)
{
printf ("cannot open `%s': %s\n", fname, strerror (errno));
diff --git a/tests/update3.c b/tests/update3.c
index 7a4224dd..d619bed0 100644
--- a/tests/update3.c
+++ b/tests/update3.c
@@ -46,7 +46,7 @@ main (int argc, char *argv[] __attribute__ ((unused)))
Dwelf_Strent *shstrtabse;
int i;
- fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ fd = open (fname, O_RDWR | O_BINARY | O_CREAT | O_TRUNC, 0666);
if (fd == -1)
{
printf ("cannot open `%s': %s\n", fname, strerror (errno));
diff --git a/tests/update4.c b/tests/update4.c
index a9bd4bf9..8196b8c8 100644
--- a/tests/update4.c
+++ b/tests/update4.c
@@ -50,7 +50,7 @@ main (int argc, char *argv[] __attribute__ ((unused)))
Dwelf_Strent *shstrtabse;
int i;
- fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ fd = open (fname, O_RDWR | O_BINARY | O_CREAT | O_TRUNC, 0666);
if (fd == -1)
{
printf ("cannot open `%s': %s\n", fname, strerror (errno));
diff --git a/tests/vendorelf.c b/tests/vendorelf.c
index bc13cce3..835e941f 100644
--- a/tests/vendorelf.c
+++ b/tests/vendorelf.c
@@ -36,7 +36,7 @@ check_elf (const char *fname, int class, int use_mmap)
{
printf ("\nfname: %s\n", fname);
- int fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ int fd = open (fname, O_RDWR | O_BINARY | O_CREAT | O_TRUNC, 0666);
if (fd == -1)
{
printf ("cannot open `%s': %s\n", fname, strerror (errno));
@@ -124,7 +124,7 @@ check_elf (const char *fname, int class, int use_mmap)
close (fd);
/* Reread the ELF from disk now. */
- fd = open (fname, O_RDONLY, 0666);
+ fd = open (fname, O_RDONLY | O_BINARY, 0666);
if (fd == -1)
{
printf ("cannot open `%s' read-only: %s\n", fname, strerror (errno));
diff --git a/tests/zstrptr.c b/tests/zstrptr.c
index 6d8e19f7..8560dfdb 100644
--- a/tests/zstrptr.c
+++ b/tests/zstrptr.c
@@ -45,7 +45,7 @@ main (int argc, char *argv[])
elf_version (EV_CURRENT);
/* Read the ELF from disk now. */
- int fd = open (fname, O_RDONLY);
+ int fd = open (fname, O_RDONLY | O_BINARY);
if (fd == -1)
{
printf ("cannot open `%s' read-only: %s\n", fname, strerror (errno));