mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-24 10:39:57 +01:00
* options.h, exec.c: Add some debugging info, using the 1024 debug flag.
* exec.c (win_system): New system()-like function for win32 that does not return until the child process terminates. Of course, this doesn't help if the process itself exits before it is finished.
This commit is contained in:
parent
9a9ae615ea
commit
e77b643b4a
@ -1,3 +1,13 @@
|
|||||||
|
2002-05-29 David Shaw <dshaw@jabberwocky.com>
|
||||||
|
|
||||||
|
* options.h, exec.c: Add some debugging info, using the 1024 debug
|
||||||
|
flag.
|
||||||
|
|
||||||
|
* exec.c (win_system): New system()-like function for win32 that
|
||||||
|
does not return until the child process terminates. Of course,
|
||||||
|
this doesn't help if the process itself exits before it is
|
||||||
|
finished.
|
||||||
|
|
||||||
2002-05-29 Werner Koch <wk@gnupg.org>
|
2002-05-29 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
* encode.c (encode_simple): Intialize PKT when --no-literal is used.
|
* encode.c (encode_simple): Intialize PKT when --no-literal is used.
|
||||||
|
57
g10/exec.c
57
g10/exec.c
@ -58,6 +58,38 @@ int exec_finish(struct exec_info *info) { return G10ERR_GENERAL; }
|
|||||||
char *mkdtemp(char *template);
|
char *mkdtemp(char *template);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined (__MINGW32__) || defined (__CYGWIN32__)
|
||||||
|
/* This is a nicer system() for windows that waits for programs to
|
||||||
|
return before returning control to the caller. I hate helpful
|
||||||
|
computers. */
|
||||||
|
static int win_system(const char *command)
|
||||||
|
{
|
||||||
|
PROCESS_INFORMATION pi;
|
||||||
|
STARTUPINFO si;
|
||||||
|
char *string;
|
||||||
|
|
||||||
|
/* We must use a copy of the command as CreateProcess modifies this
|
||||||
|
argument. */
|
||||||
|
string=m_strdup(command);
|
||||||
|
|
||||||
|
memset(&pi,0,sizeof(pi));
|
||||||
|
memset(&si,0,sizeof(si));
|
||||||
|
si.cb=sizeof(si);
|
||||||
|
|
||||||
|
if(!CreateProcess(NULL,string,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* Wait for the child to exit */
|
||||||
|
WaitForSingleObject(pi.hProcess,INFINITE);
|
||||||
|
|
||||||
|
CloseHandle(pi.hProcess);
|
||||||
|
CloseHandle(pi.hThread);
|
||||||
|
m_free(string);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Makes a temp directory and filenames */
|
/* Makes a temp directory and filenames */
|
||||||
static int make_tempdir(struct exec_info *info)
|
static int make_tempdir(struct exec_info *info)
|
||||||
{
|
{
|
||||||
@ -143,6 +175,9 @@ static int expand_args(struct exec_info *info,const char *args_in)
|
|||||||
info->use_temp_files=0;
|
info->use_temp_files=0;
|
||||||
info->keep_temp_files=0;
|
info->keep_temp_files=0;
|
||||||
|
|
||||||
|
if(DBG_EXTPROG)
|
||||||
|
log_debug("expanding string \"%s\"\n",args_in);
|
||||||
|
|
||||||
size=100;
|
size=100;
|
||||||
info->command=m_alloc(size);
|
info->command=m_alloc(size);
|
||||||
len=0;
|
len=0;
|
||||||
@ -218,7 +253,9 @@ static int expand_args(struct exec_info *info,const char *args_in)
|
|||||||
ch++;
|
ch++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* printf("args expanded to \"%s\"\n",info->command); */
|
if(DBG_EXTPROG)
|
||||||
|
log_debug("args expanded to \"%s\", use %d, keep %d\n",
|
||||||
|
info->command,info->use_temp_files,info->keep_temp_files);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -335,12 +372,16 @@ int exec_write(struct exec_info **info,const char *program,
|
|||||||
|
|
||||||
if(args_in==NULL)
|
if(args_in==NULL)
|
||||||
{
|
{
|
||||||
/* fprintf(stderr,"execing: %s\n",program); */
|
if(DBG_EXTPROG)
|
||||||
|
log_debug("execlp: %s\n",program);
|
||||||
|
|
||||||
execlp(program,program,NULL);
|
execlp(program,program,NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* fprintf(stderr,"execing: %s -c %s\n",shell,(*info)->command); */
|
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,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -386,6 +427,9 @@ int exec_write(struct exec_info **info,const char *program,
|
|||||||
}
|
}
|
||||||
#endif /* !EXEC_TEMPFILE_ONLY */
|
#endif /* !EXEC_TEMPFILE_ONLY */
|
||||||
|
|
||||||
|
if(DBG_EXTPROG)
|
||||||
|
log_debug("using temp file \"%s\"\n",(*info)->tempfile_in);
|
||||||
|
|
||||||
/* It's not fork/exec/pipe, so create a temp file */
|
/* It's not fork/exec/pipe, so create a temp file */
|
||||||
(*info)->tochild=fopen((*info)->tempfile_in,binary?"wb":"w");
|
(*info)->tochild=fopen((*info)->tempfile_in,binary?"wb":"w");
|
||||||
if((*info)->tochild==NULL)
|
if((*info)->tochild==NULL)
|
||||||
@ -411,9 +455,14 @@ int exec_read(struct exec_info *info)
|
|||||||
|
|
||||||
if(info->use_temp_files)
|
if(info->use_temp_files)
|
||||||
{
|
{
|
||||||
/* printf("system command is %s\n",info->command); */
|
if(DBG_EXTPROG)
|
||||||
|
log_debug("system() command is %s\n",info->command);
|
||||||
|
|
||||||
|
#if defined (__MINGW32__) || defined (__CYGWIN32__)
|
||||||
|
info->progreturn=win_system(info->command);
|
||||||
|
#else
|
||||||
info->progreturn=system(info->command);
|
info->progreturn=system(info->command);
|
||||||
|
#endif
|
||||||
|
|
||||||
if(info->progreturn==-1)
|
if(info->progreturn==-1)
|
||||||
{
|
{
|
||||||
|
@ -180,6 +180,7 @@ struct {
|
|||||||
#define DBG_MEMSTAT_VALUE 128 /* show memory statistics */
|
#define DBG_MEMSTAT_VALUE 128 /* show memory statistics */
|
||||||
#define DBG_TRUST_VALUE 256 /* debug the trustdb */
|
#define DBG_TRUST_VALUE 256 /* debug the trustdb */
|
||||||
#define DBG_HASHING_VALUE 512 /* debug hashing operations */
|
#define DBG_HASHING_VALUE 512 /* debug hashing operations */
|
||||||
|
#define DBG_EXTPROG_VALUE 1024 /* debug external program calls */
|
||||||
|
|
||||||
|
|
||||||
#define DBG_PACKET (opt.debug & DBG_PACKET_VALUE)
|
#define DBG_PACKET (opt.debug & DBG_PACKET_VALUE)
|
||||||
@ -187,6 +188,7 @@ struct {
|
|||||||
#define DBG_CACHE (opt.debug & DBG_CACHE_VALUE)
|
#define DBG_CACHE (opt.debug & DBG_CACHE_VALUE)
|
||||||
#define DBG_TRUST (opt.debug & DBG_TRUST_VALUE)
|
#define DBG_TRUST (opt.debug & DBG_TRUST_VALUE)
|
||||||
#define DBG_HASHING (opt.debug & DBG_HASHING_VALUE)
|
#define DBG_HASHING (opt.debug & DBG_HASHING_VALUE)
|
||||||
|
#define DBG_EXTPROG (opt.debug & DBG_EXTPROG_VALUE)
|
||||||
|
|
||||||
|
|
||||||
#endif /*G10_OPTIONS_H*/
|
#endif /*G10_OPTIONS_H*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user