* mainproc.c (list_node): Show sigs with --verbose.
[gnupg.git] / g10 / exec.c
index a585fb7..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,12 +176,12 @@ 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
 
   if(mkdtemp(info->tempdir)==NULL)
-    log_error(_("%s: can't create directory: %s\n"),
+    log_error(_("can't create directory `%s': %s\n"),
              info->tempdir,strerror(errno));
   else
     {
@@ -262,9 +265,14 @@ static int expand_args(struct exec_info *info,const char *args_in)
 
          if(append)
            {
-             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);
                }
 
@@ -409,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. */
@@ -464,13 +472,13 @@ int exec_write(struct exec_info **info,const char *program,
 #endif /* !EXEC_TEMPFILE_ONLY */
 
   if(DBG_EXTPROG)
-    log_debug("using temp file \"%s\"\n",(*info)->tempfile_in);
+    log_debug("using temp file `%s'\n",(*info)->tempfile_in);
 
   /* It's not fork/exec/pipe, so create a temp file */
   (*info)->tochild=fopen((*info)->tempfile_in,binary?"wb":"w");
   if((*info)->tochild==NULL)
     {
-      log_error(_("%s: can't create: %s\n"),
+      log_error(_("can't create `%s': %s\n"),
                (*info)->tempfile_in,strerror(errno));
       ret=G10ERR_WRITE_FILE;
       goto fail;
@@ -494,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);
@@ -583,19 +591,19 @@ int exec_finish(struct exec_info *info)
       if(info->tempfile_in)
        {
          if(unlink(info->tempfile_in)==-1)
-           log_info(_("WARNING: unable to remove tempfile (%s) \"%s\": %s\n"),
+           log_info(_("WARNING: unable to remove tempfile (%s) `%s': %s\n"),
                     "in",info->tempfile_in,strerror(errno));
        }
   
       if(info->tempfile_out)
        {
          if(unlink(info->tempfile_out)==-1)
-           log_info(_("WARNING: unable to remove tempfile (%s) \"%s\": %s\n"),
+           log_info(_("WARNING: unable to remove tempfile (%s) `%s': %s\n"),
                     "out",info->tempfile_out,strerror(errno));
        }
 
       if(rmdir(info->tempdir)==-1)
-       log_info(_("WARNING: unable to remove temp directory \"%s\": %s\n"),
+       log_info(_("WARNING: unable to remove temp directory `%s': %s\n"),
                 info->tempdir,strerror(errno));
     }