[BACK]Return to process.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / pmdb

Diff for /src/usr.bin/pmdb/Attic/process.c between version 1.3 and 1.4

version 1.3, 2002/03/19 07:26:58 version 1.4, 2002/06/09 02:44:13
Line 27 
Line 27 
 #include <sys/types.h>  #include <sys/types.h>
 #include <sys/ptrace.h>  #include <sys/ptrace.h>
 #include <sys/wait.h>  #include <sys/wait.h>
   #include <sys/stat.h>
   
 #include <err.h>  #include <err.h>
 #include <errno.h>  #include <errno.h>
 #include <signal.h>  #include <signal.h>
Line 53 
Line 55 
                 return (0);                  return (0);
         }          }
   
         switch (ps->ps_pid = fork()) {          if (stat(ps->ps_argv[0], &(ps->exec_stat)) < 0)
         case 0:                  err(1, "stat()");
                 if (ptrace(PT_TRACE_ME, getpid(), NULL, 0) != 0)  
                         err(1, "ptrace(PT_TRACE_ME)");          if (ps->ps_pid != 0) {
                 execvp(*ps->ps_argv, ps->ps_argv);                  /* attach to an already running process */
                 err(1, "exec");                  if (ptrace(PT_ATTACH, ps->ps_pid, (caddr_t) 0, 0) < 0)
                 /* NOTREACHED */                          err(1, "failed to ptrace process");
         case -1:                  ps->ps_state = STOPPED;
                 err(1, "fork");                  ps->ps_flags |= PSF_ATCH;
                 /* NOTREACHED */  
         default:  
                 break;  
         }          }
           else {
                   switch (ps->ps_pid = fork()) {
                   case 0:
                           if (ptrace(PT_TRACE_ME, getpid(), NULL, 0) != 0)
                                   err(1, "ptrace(PT_TRACE_ME)");
                           execvp(*ps->ps_argv, ps->ps_argv);
                           err(1, "exec");
                           /* NOTREACHED */
                   case -1:
                           err(1, "fork");
                           /* NOTREACHED */
                   default:
                           break;
                   }
   
                   ps->ps_state = LOADED;
           }
   
         if ((ps->ps_flags & PSF_SYMBOLS) == 0) {          if ((ps->ps_flags & PSF_SYMBOLS) == 0) {
                 sym_init_exec(ps, ps->ps_argv[0]);                  sym_init_exec(ps, ps->ps_argv[0]);
                 ps->ps_flags |= PSF_SYMBOLS;                  ps->ps_flags |= PSF_SYMBOLS;
Line 75 
Line 91 
         if (wait(&status) == 0)          if (wait(&status) == 0)
                 err(1, "wait");                  err(1, "wait");
   
         ps->ps_state = LOADED;  
         return 0;          return 0;
 }  }
   

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4