소스 검색

Windows has _popen, _pclose

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@34749 15284696-431f-4ddb-bdfa-cd5b030d7da7
Glynn Clements 16 년 전
부모
커밋
f3f9b42884
1개의 변경된 파일3개의 추가작업 그리고 64개의 파일을 삭제
  1. 3 64
      lib/gis/popen.c

+ 3 - 64
lib/gis/popen.c

@@ -3,80 +3,19 @@
 #include <signal.h>
 #include <stdlib.h>
 #include <sys/types.h>
+#include <grass/gis.h>
 
 #ifdef __MINGW32__
-#  include <io.h>
-#  include <fcntl.h>
-#  include <process.h>
-static int popen_pid[1024];
+#define popen(cmd,mode) _popen(cmd,mode)
+#define pclose(fp) _pclose(fp)
 #endif
 
-#include <grass/gis.h>
-
 FILE *G_popen(const char *cmd, const char *mode)
 {
-#ifndef __MINGW32__
     return popen(cmd, mode);
-#else
-    RETSIGTYPE(*sigint)(int);
-    int pipe_fd[2];
-    FILE *rv;
-    int pid;
-    int dir, odir;
-    int oldfd;
-
-    fflush(stdout);
-    fflush(stderr);
-
-    switch (mode[0]) {
-    case 'r':	dir = 0;	break;
-    case 'w':	dir = 1;	break;
-    default:	return NULL;
-    }
-    odir = 1-dir;
-
-    if (_pipe(pipe_fd, 256, O_BINARY) < 0)
-	return NULL;
-
-    sigint = signal(SIGINT, SIG_IGN);
-
-    oldfd = _dup(odir);
-    _dup2(pipe_fd[odir], odir);
-    pid = spawnlp(_P_NOWAIT, "cmd", "cmd", "/c", cmd, (char *)NULL);
-    _dup2(oldfd, odir);
-    close(oldfd);
-
-    signal(SIGINT, sigint);
-
-    close(pipe_fd[odir]);
-    popen_pid[pipe_fd[dir]] = pid;
-    rv = fdopen(pipe_fd[dir], mode);
-
-    return rv;
-#endif
 }
 
 int G_pclose(FILE *ptr)
 {
-#ifndef __MINGW32__
     return pclose(ptr);
-#else
-    RETSIGTYPE(*sigint)(int);
-    int status;
-    int f;
-
-    f = fileno(ptr);
-    fclose(ptr);
-
-    sigint = signal(SIGINT, SIG_IGN);
-
-    _cwait(&status, popen_pid[f], WAIT_CHILD);
-    if (0 & status) {
-	status = -1;
-    }
-
-    signal(SIGINT, sigint);
-
-    return status;
-#endif
 }