Esempio n. 1
0
bool xml_document::on_empty_element(const char* element, size_t len, const attribute_list& attributes)
{
	attribute_list* dest;
	if (attributes.count() > 0) {
		if ((dest = new (std::nothrow) attribute_list()) == NULL) {
			_M_reason = ERROR_NO_MEMORY;
			return false;
		}

		if (!copy_attribute_list(dest, &attributes)) {
			delete dest;

			_M_reason = ERROR_NO_MEMORY;
			return false;
		}
	} else {
		dest = NULL;
	}

	if (!create_node(ELEMENT_NODE, element, len, dest, _M_used)) {
		if (dest) {
			delete dest;
		}

		_M_reason = ERROR_NO_MEMORY;
		return false;
	}

	return true;
}
Esempio n. 2
0
batch_request *duplicate_request(batch_request *preq, int job_index)
  {
  batch_request *preq_tmp = alloc_br(preq->rq_type);
  char          *ptr1;
  char          *ptr2;
  char           newjobname[PBS_MAXSVRJOBID+1];

  if (preq_tmp == NULL)
    return(NULL);

  preq_tmp->rq_perm = preq->rq_perm;
  preq_tmp->rq_fromsvr = preq->rq_fromsvr;
  preq_tmp->rq_conn = preq->rq_conn;
  preq_tmp->rq_time = preq->rq_time;
  preq_tmp->rq_orgconn = preq->rq_orgconn;

  memcpy(preq_tmp->rq_ind.rq_manager.rq_objname,
  preq->rq_ind.rq_manager.rq_objname, PBS_MAXSVRJOBID + 1);

  strcpy(preq_tmp->rq_user, preq->rq_user);
  strcpy(preq_tmp->rq_host, preq->rq_host);

  if (preq->rq_extend != NULL)
    preq_tmp->rq_extend = strdup(preq->rq_extend);

  switch (preq->rq_type)
    {
    /* This function was created for a modify array request (PBS_BATCH_ModifyJob)
    the preq->rq_ind structure was allocated in dis_request_read. If other
    BATCH types are needed refer to that function to see how the rq_ind structure
    was allocated and then copy it here. */
    case PBS_BATCH_DeleteJob:
    case PBS_BATCH_HoldJob:
    case PBS_BATCH_CheckpointJob:
    case PBS_BATCH_ModifyJob:
    case PBS_BATCH_AsyModifyJob:

      /* based on how decode_DIS_Manage allocates data */
      CLEAR_HEAD(preq_tmp->rq_ind.rq_manager.rq_attr);

      preq_tmp->rq_ind.rq_manager.rq_cmd = preq->rq_ind.rq_manager.rq_cmd;
      preq_tmp->rq_ind.rq_manager.rq_objtype = preq->rq_ind.rq_manager.rq_objtype;

      if (job_index != -1)
        {
        /* If this is a job array it is possible we only have the array name
        and not the individual job. We need to find out what we have and
        modify the name if needed */
        ptr1 = strstr(preq->rq_ind.rq_manager.rq_objname, "[]");
        if (ptr1)
          {
          ptr1++;
          strcpy(newjobname, preq->rq_ind.rq_manager.rq_objname);
          ptr2 = strstr(newjobname, "[]");
          ptr2++;
          *ptr2 = 0;
          sprintf(preq_tmp->rq_ind.rq_manager.rq_objname,"%s%d%s",
                            newjobname, job_index, ptr1);
          }
        else
          strcpy(preq_tmp->rq_ind.rq_manager.rq_objname, preq->rq_ind.rq_manager.rq_objname);
        }
    
      /* copy the attribute list */
      if (copy_attribute_list(preq, preq_tmp) != PBSE_NONE)
        return(NULL);
    
      break;
    
      case PBS_BATCH_SignalJob:
    
        strcpy(preq_tmp->rq_ind.rq_signal.rq_jid, preq->rq_ind.rq_signal.rq_jid);
        strcpy(preq_tmp->rq_ind.rq_signal.rq_signame, preq->rq_ind.rq_signal.rq_signame);
        preq_tmp->rq_extra = strdup((char *)preq->rq_extra);
    
        break;
    
      case PBS_BATCH_MessJob:
    
        strcpy(preq_tmp->rq_ind.rq_message.rq_jid, preq->rq_ind.rq_message.rq_jid);
        preq_tmp->rq_ind.rq_message.rq_file = preq->rq_ind.rq_message.rq_file;
        strcpy(preq_tmp->rq_ind.rq_message.rq_text, preq->rq_ind.rq_message.rq_text);
    
        break;
    
      case PBS_BATCH_RunJob:
    
        if (preq->rq_ind.rq_run.rq_destin)
          preq_tmp->rq_ind.rq_run.rq_destin = strdup(preq->rq_ind.rq_run.rq_destin);
    
        break;
    
      default:
    
        break;
      }
  
    return(preq_tmp);
  }