xnim

=)

Nov 10th, 2013
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | None | 0 0
  1. static int getBsdProcessList(kinfo_proc **procList, size_t *procCount )
  2. {
  3.     int                 err;
  4.     kinfo_proc *        result;
  5.     bool                done;
  6.     static const int    name[] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0 };
  7.     size_t              length;
  8.     result = NULL;
  9.     done = false;
  10.     *procCount = 0;
  11.     do
  12.     {
  13.         length = 0;
  14.         err = sysctl( (int *) name, ( sizeof( name ) / sizeof( *name ) ) - 1, NULL, &length, NULL, 0 );
  15.         if (err == -1)
  16.         {
  17.             err = errno;
  18.         }
  19.         if ( err == 0 )
  20.         {
  21.             result = (kinfo_proc*)malloc( length );
  22.             if ( result == NULL )
  23.             {
  24.                 err = ENOMEM;
  25.             }
  26.         }
  27.         if ( err == 0 )
  28.         {
  29.             err = sysctl( (int *) name, ( sizeof( name ) / sizeof( *name ) ) - 1, result, &length, NULL, 0 );
  30.             if ( err == -1 )
  31.             {
  32.                 err = errno;
  33.             }
  34.             if (err == 0)
  35.             {
  36.                 done = true;
  37.             } else if ( err == ENOMEM )
  38.             {
  39.                 free( result );
  40.                 result = NULL;
  41.                 err = 0;
  42.             }
  43.         }
  44.     } while ( err == 0 && !done );
  45.     if ( err != 0 && result != NULL )
  46.     {
  47.         free( result );
  48.         result = NULL;
  49.     }
  50.    
  51.     *procList = result;
  52.     if ( err == 0 )
  53.     {
  54.         *procCount = length / sizeof( kinfo_proc );
  55.     }
  56.    
  57.     return err;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment