C tmpfile() vs. MS

Sokat szívtam a libjpeg-gel, mire megtaláltam hogy win platformon mingw-vel fordítva miért nem tud betölteni meg kiírni file-okat csökkentett jogosultságú felhasználóval.

Az ok a tmpfile() C függvényhívás. Röviden ez annyit csinál, hogy létrehoz egy fájlt átmeneti tárolásra a TEMP elérési útvonalon, és vissza adja a fájl leíró értékét.

Na most windows-on ezt kicsit másképp implementálták (minden win verzióra vonatkozik ismereteim szerint, xp-n, vista-n és win 7-en teszteltem).

http://www.mega-nerd.com/erikd/Blog/Windiots/tmpfile.html

From microsoft's own documentation

The tmpfile function creates a temporary file and returns a pointer to that stream. The temporary file is created in the root directory. To create a temporary file in a directory other than the root, use tmpnam or tempnam in conjunction with fopen.

Tehát win-en úgy oldották meg, hogy mindig az aktuális elérési úton lévő kötet gyökerébe akar temp fájlt létrehozni. Csak hát ugye ide nincs írás joga a nem rendszergazda jogokkal rendelkező felhasználóknak.

Most erre mit lehet mondani ilyenkor? Azt nem hogy "deprecated" és hogy tmpfile_s, mert ott is gyökérbe hoz létre. :)

Maradt a tmpnam és fopen patch, + getenv-vel kiolvasom a TEMP környezeti változó értékét, és azt használom elérési útnak.