Commit d4640967905a3774281c0ae74dfd83b9512200c6
1 parent
4bc8f938
Exists in
master
and in
5 other branches
Testando no MinGW64
Showing
1 changed file
with
58 additions
and
0 deletions
Show diff stats
src/lib3270/mkfb.c
@@ -38,6 +38,14 @@ | @@ -38,6 +38,14 @@ | ||
38 | 38 | ||
39 | #include "../include/lib3270/config.h" | 39 | #include "../include/lib3270/config.h" |
40 | 40 | ||
41 | + | ||
42 | +#ifdef _WIN32 | ||
43 | + #include <windows.h> | ||
44 | + #include <sys/stat.h> | ||
45 | + #include <fcntl.h> | ||
46 | + #define tmpfile w32_tmpfile | ||
47 | +#endif // _WIN32 | ||
48 | + | ||
41 | #include <stdio.h> | 49 | #include <stdio.h> |
42 | #include <string.h> | 50 | #include <string.h> |
43 | #include <ctype.h> | 51 | #include <ctype.h> |
@@ -575,3 +583,53 @@ emit(FILE *t, int ix, char c) | @@ -575,3 +583,53 @@ emit(FILE *t, int ix, char c) | ||
575 | fprintf(t, "%3d,", (unsigned char)c); | 583 | fprintf(t, "%3d,", (unsigned char)c); |
576 | n_out[ix]++; | 584 | n_out[ix]++; |
577 | } | 585 | } |
586 | + | ||
587 | +#if defined(_WIN32) | ||
588 | +FILE * w32_tmpfile( void ) | ||
589 | +{ | ||
590 | + char *dir; | ||
591 | + char *xtemplate; | ||
592 | + DWORD retval; | ||
593 | + size_t len; | ||
594 | + int fd; | ||
595 | + FILE *file = NULL; | ||
596 | + | ||
597 | + dir = (char *) malloc(PATH_MAX); | ||
598 | + xtemplate = (char *) malloc(PATH_MAX); | ||
599 | + | ||
600 | + /* Find Windows temporary file directory. | ||
601 | + We provide this as the directory argument to path_search | ||
602 | + because Windows defines P_tmpdir to "\\" and will therefore | ||
603 | + try to put all temporary files in the root (unless $TMPDIR | ||
604 | + is set). */ | ||
605 | + retval = GetTempPath (PATH_MAX, dir); | ||
606 | + if (retval == 0 || retval >= PATH_MAX - 1) | ||
607 | + goto done; | ||
608 | + | ||
609 | + do | ||
610 | + { | ||
611 | + char *tempname = tempnam(dir,"XXXXXX"); | ||
612 | + if(!tempname) | ||
613 | + goto done; | ||
614 | + | ||
615 | + fd = _open (tempname,_O_BINARY | _O_CREAT | _O_TEMPORARY | _O_EXCL | _O_RDWR,_S_IREAD | _S_IWRITE); | ||
616 | + } | ||
617 | + while (fd < 0 && errno == EEXIST); | ||
618 | + | ||
619 | + if (fd < 0) | ||
620 | + goto done; | ||
621 | + | ||
622 | + file = _fdopen (fd, "w+b"); | ||
623 | + if (file == NULL) | ||
624 | + { | ||
625 | + int save_errno = errno; | ||
626 | + _close (fd); | ||
627 | + errno = save_errno; | ||
628 | + } | ||
629 | + | ||
630 | + done: | ||
631 | + free(xtemplate); | ||
632 | + free(dir); | ||
633 | + return file; | ||
634 | +} | ||
635 | +#endif // _WIN32 |