[sane-devel] [Janitorial] Zero(!) compiler warnings

Olaf Meeuwissen paddy-hack at member.fsf.org
Thu Sep 22 14:09:03 UTC 2016


ABC writes:

> Hello,
>
> To what mktemp() should be replaced? Will there be sanei function to
> drop-in replace it?

The mktemp(3) manual page suggests mkstemp (POSIX.1-2001, not in C99).
That is used by the bh and pieusb backends.  You can also use tmpfile
(POSIX.1-2001, POSI.1-2008 and in C99), which is what I used in my patch
for the avision backend (not pushed yet).

I wasn't thinking of providing a sanei function for this.

BTW, both open the temporary file with O_EXCL so they need to be opened
by the process that needs it.  This may be an issue for backends that
use the SANE_Thread API because it uses fork() on some platforms to run
"threads" in child processes.  If the child process needs the file, the
child process needs to call tmpfile() or mkstemp().  Calling it in, say,
sane_init() or sane_open() with such backends will likely break things.

Note that mktemp() only creates a file*name* so the O_EXCL is not an
issue then and calling fopen() or open() isn't subject to this flag
unless passed explicitly.  Child processes inherit non-exclusive open
file descriptors.

> On Wed, Sep 21, 2016 at 10:12:27PM +0900, Olaf Meeuwissen wrote:
>> Looking over the build log (love how clean those compile commands look,
>> BTW), next are four linker warnings about the use of `mktemp`, which, as
>> we all know, is racey and should be avoided.  Like the plague, so I'd
>> like to see these get fixed.
>> 
>> # I have a patch for the avision backend already.  By all means, tackle
>> # any of the canon, canon_dr and dc25 backends' use of mktemp.

Hope this helps,
-- 
Olaf Meeuwissen, LPIC-2            FSF Associate Member since 2004-01-27
 GnuPG key: F84A2DD9/B3C0 2F47 EA19 64F4 9F13  F43E B8A4 A88A F84A 2DD9
 Support Free Software                        https://my.fsf.org/donate
 Join the Free Software Foundation              https://my.fsf.org/join




More information about the sane-devel mailing list