Example #1
0
int      revm_create_new_workspace(char *ws_name)
{
  revmjob_t	*job;
  char		logbuf[BUFSIZ];

  PROFILER_IN(__FILE__, __FUNCTION__, __LINE__);

  if (!revm_valid_workspace(ws_name))
    PROFILER_ERR(__FILE__, __FUNCTION__, __LINE__,
                 "Incorrect workspace name", -1);

  job = hash_get(&world.jobs, ws_name);

  if (job == NULL)
    {
      /* create a new workspace */
      job = revm_clone_job(strdup(ws_name), world.curjob);
      hash_add(&world.jobs, ws_name, job);

      if (revm_own_job(job))
        {
          /* switch */
          snprintf(logbuf, BUFSIZ - 1, "\n [+] Workspace : %s \n\n", ws_name);
          revm_output(logbuf);
          revm_prompt_log();
          /* Switch to the new job */
          revm_switch_job(job);
          /* Update the screen */
          revm_screen_update(TRUE, 0);
          PROFILER_ROUT(__FILE__, __FUNCTION__, __LINE__, 0);
        }
    }
  else
    if (job->ws.active)
      {
        snprintf(logbuf, BUFSIZ - 1, "\n [+] Already in workspace : %s\n\n",
                 ws_name);
        revm_output(logbuf);
        PROFILER_ROUT(__FILE__, __FUNCTION__, __LINE__, 0);
      }

  PROFILER_ERR(__FILE__, __FUNCTION__, __LINE__, "Incorrect workspace name", -1);
}
Example #2
0
/**
 * Switch to the next workspace 
 *
 */
int		revm_workspace_next()
{
  u_int		index, entrie;
  char	        **keys;
  int		keynbr;
  revmjob_t	*curjob;

  PROFILER_IN(__FILE__, __FUNCTION__, __LINE__);  

  keys = hash_get_keys(&world.jobs, &keynbr);
  if (keynbr <= 1)
    PROFILER_ROUT(__FILE__, __FUNCTION__, __LINE__, 0);

  /* Search the current index */
  for (index = 0; index < keynbr; index++)
    {
      curjob = hash_get(&world.jobs, keys[index]);
      if (revm_own_job(curjob) && curjob == world.curjob)
	{
	  entrie = index;
	  break;
	}
    }

  /* Search the next entrie */
  for (entrie = (entrie+1) % keynbr; entrie < keynbr; entrie = (entrie+1) % keynbr)
    {
      curjob = hash_get(&world.jobs, keys[entrie]);
      if (revm_own_job(curjob))
	{
	  /* If we found the current job, we made a loop, so we break */
	  if (curjob == world.curjob)
	    break;
	  revm_switch_job(curjob);
	  PROFILER_ROUT(__FILE__, __FUNCTION__, __LINE__, 1);
	}
    }

  PROFILER_ERR(__FILE__, __FUNCTION__, __LINE__, 
		    "Unable to find workspace to switch on", -1);
}