* mainproc.c (list_node): Show sigs with --verbose.
[gnupg.git] / g10 / exec.c
index ea3d9c4..85c3ab4 100644 (file)
@@ -1,5 +1,5 @@
 /* exec.c - generic call-a-program code
- * Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+ * Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
@@ -59,7 +59,7 @@ int set_exec_path(const char *path,int method) { return G10ERR_GENERAL; }
 char *mkdtemp(char *template);
 #endif
 
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
+#if defined (_WIN32)
 /* This is a nicer system() for windows that waits for programs to
    return before returning control to the caller.  I hate helpful
    computers. */
@@ -112,6 +112,9 @@ int set_exec_path(const char *path,int method)
 
   strcat(p,path);
 
+  if(DBG_EXTPROG)
+    log_debug("set_exec_path method %d: %s\n",method,p);
+
   /* Notice that path is never freed.  That is intentional due to the
      way putenv() works.  This leaks a few bytes if we call
      set_exec_path multiple times. */
@@ -136,7 +139,7 @@ static int make_tempdir(struct exec_info *info)
 
   if(tmp==NULL)
     {
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
+#if defined (_WIN32)
       tmp=m_alloc(256);
       if(GetTempPath(256,tmp)==0)
        strcpy(tmp,"c:\\windows\\temp");
@@ -173,7 +176,7 @@ static int make_tempdir(struct exec_info *info)
 
   sprintf(info->tempdir,"%s" DIRSEP_S "gpg-XXXXXX",tmp);
 
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
+#if defined (_WIN32)
   m_free(tmp);
 #endif
 
@@ -262,10 +265,14 @@ static int expand_args(struct exec_info *info,const char *args_in)
 
          if(append)
            {
-              /* FIXME: Why do we need a loop? -wk */
-             while(strlen(append)+len>size-1)
+             size_t applen=strlen(append);
+
+             if(applen+len>size-1)
                {
-                 size+=100;
+                 if(applen<100)
+                   applen=100;
+
+                 size+=applen;
                  info->command=m_realloc(info->command,size);
                }
 
@@ -410,14 +417,14 @@ int exec_write(struct exec_info **info,const char *program,
              if(DBG_EXTPROG)
                log_debug("execlp: %s\n",program);
 
-             execlp(program,program,NULL);
+             execlp(program,program,(void *)NULL);
            }
          else
            {
              if(DBG_EXTPROG)
                log_debug("execlp: %s -c %s\n",shell,(*info)->command);
 
-             execlp(shell,shell,"-c",(*info)->command,NULL);
+             execlp(shell,shell,"-c",(*info)->command,(void *)NULL);
            }
 
          /* If we get this far the exec failed.  Clean up and return. */
@@ -471,7 +478,7 @@ int exec_write(struct exec_info **info,const char *program,
   (*info)->tochild=fopen((*info)->tempfile_in,binary?"wb":"w");
   if((*info)->tochild==NULL)
     {
-      log_error(_("can't create '%s': %s\n"),
+      log_error(_("can't create `%s': %s\n"),
                (*info)->tempfile_in,strerror(errno));
       ret=G10ERR_WRITE_FILE;
       goto fail;
@@ -495,7 +502,7 @@ int exec_read(struct exec_info *info)
       if(DBG_EXTPROG)
        log_debug("system() command is %s\n",info->command);
 
-#if defined (__MINGW32__) || defined (__CYGWIN32__)
+#if defined (_WIN32)
       info->progreturn=win_system(info->command);
 #else
       info->progreturn=system(info->command);
@@ -610,4 +617,3 @@ int exec_finish(struct exec_info *info)
   return ret;
 }
 #endif /* ! NO_EXEC */
-