On Mon, Jan 30, 2023 at 02:26:12PM -0600, Eric Blake wrote:
> On Sat, Jan 28, 2023 at 10:31:04PM +0100, Juan Manuel Guerrero wrote:
> > I do not know if this issue has already been reported, but for all
> > systems that distinguish between binary and text I/O, the file should
> > be read in the same mode than it has been created or it may rise reading
> > issues. When a "frozen" file is created in produce_frozen_state() this
> > is done using binary mode and that is ok. But when it later is reloaded,
> > the reading is done without specifying the mode and this defaults to
> > text mode breaking/aborting the reading process. The patch below fixes
> > the issue but it is only intended as suggestion. Fix the issue as you
> > like.
>
> Thanks for the report. I'm not sure if calling SET_BINARY() is the
> best fix, or if it is better to teach m4_path_search() which files
> must be opened in binary mode (vs. in default mode, where the default
> mode might be text on platforms where text is distinct from binary).
> I'll give it some more thought, but may end up including your patch as
> written if I can't think of anything more elegant.
The only other option would be adding a bool parameter to
m4_path_search asking for binary, where freeze.c would be the only
client passing true. Still, that feels cleaner to open the file
correctly from the get-go, rather than changing it after the fact.
Patch coming up shortly.
>
> > +++ b/src/freeze.c
> > @@ -268,6 +268,7 @@ reload_frozen_state (const char *name)
> > file = m4_path_search (name, NULL);
> > if (file == NULL)
> > m4_failure (errno, _("cannot open %s"), name);
> > + SET_BINARY (fileno (file));
> > current_file = name;
> >
> > allocated[0] = 100;
> >
>
> --
> Eric Blake, Principal Software Engineer
> Red Hat, Inc. +1-919-301-3266
> Virtualization: qemu.org | libvirt.org
>
>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc.
Virtualization: qemu.org | libguestfs.org