modify.c

来自「ftam等标准协议服务器和客户端的源代码。」· C语言 代码 · 共 1,375 行 · 第 1/3 页

C
1,375
字号
  templaterec->result->may_exc = may_out;  templaterec->include_attrs = NULLModifyAttr;  templaterec->result->errors = templaterec->errors = NULLError;  templaterec->result->base_object = templaterec->base_object;  templaterec->base_object = NULLCP;  return RQ_results_returned;} /* process_template_ds_result *//* * - process_template_ds_error() - * * */request_state process_template_ds_error(request, task_id, error)     requestRec request;     int task_id;     struct DSError *error;{  DsTask task_rec;  makeTemplateRec temprec = request->TEMPLATE_REC;  QE_error_code error_type;  task_rec = _get_task_of_id(task_id);  /*   *	This shouldn't happen   */  if (task_rec == NULLDsTask) return RQ_processing;  /*   *	Save error and log it   */    error_type = get_log_error_type(error, task_id);  add_error_to_request_rec(request, task_rec->baseobject, error_type, error);  /*   *	Put the results structure into the request record   *	for later retrieval.   *   */  temprec->result = template_result_alloc();  temprec->errors = request->errors;  request->errors = NULLError;  temprec->result->base_object = temprec->base_object;  temprec->base_object = NULLCP;  temprec->result->must_request = NULLModifyAttr;  temprec->result->must_exc = NULLModifyAttr;  temprec->result->may_request = NULLModifyAttr;  temprec->result->must_exc = NULLModifyAttr;  /*   *	Remove invocation record for this task   */  _task_complete(task_id);  return RQ_results_returned;} /* process_template_ds_error *//* * - get_template_attrs() - * * Copy values in an `Attr_Sequence' linked list into a `modify_attr' * linked list. * * Uses EDBOUT format for the output style as READOUT isn't allowed * for modification operations. * */static void get_template_attrs(readattrs, template)     Attr_Sequence readattrs;     modifyAttr template;{  PS valps;  modifyValue curr_val = NULLModifyValue;  modifyAttr this_attr;  AV_Sequence curr_av;  Attr_Sequence curr_as;  extern int oidformat;  for (curr_as = readattrs; curr_as != NULLATTR; curr_as = curr_as->attr_link)    {      for (this_attr = template;	   this_attr != NULLModifyAttr;	   this_attr = this_attr->next)	if (curr_as->attr_type == this_attr->attr_type &&	    /* Don't want to read file attributes at present! */	    AS_SYNTAX(curr_as) < AV_WRITE_FILE)	  /* The attribute corresponds to one in the template. */	  {	    curr_val = NULLModifyValue;	    	    for (curr_av = curr_as->attr_value;		 curr_av != NULLAV;		 curr_av = curr_av->avseq_next)	      {		if ((valps = ps_alloc(str_open)) == NULLPS) return;				if (str_setup(valps, NULLCP, 0, 0) == NOTOK)		  {		    ps_free(valps);		    return;		  }				avs_comp_print(valps, curr_av, EDBOUT);				if (valps->ps_ptr != NULLCP)		  {		    *(valps->ps_ptr) = NULL;		    valps->ps_cnt++;		  }		if (curr_val == NULLModifyValue)		  this_attr->values = curr_val = modify_value_alloc();		else		  {		    curr_val->next = modify_value_alloc();		    curr_val = curr_val->next;		  }				if (valps->ps_base == NULLCP)		  curr_val->value = NULLCP;		else		  curr_val->value = copy_string(valps->ps_base);		curr_val->new_value = NULLCP;		curr_val->status = unchanged;		curr_val->next = NULLModifyValue;		ps_free(valps);	      }	  }    }} /* get_template_attrs *//* * * Proc's to free structures. * */void free_mod_attr_list(mod_attr_list_ptr)     modifyAttr *mod_attr_list_ptr;{  modifyAttr curr_attr = *mod_attr_list_ptr, last_attr;  while (curr_attr != NULLModifyAttr)    {      free_mod_val_list(&curr_attr->values);      if (curr_attr->attr_name != NULLCP)	(void) free(curr_attr->attr_name);      last_attr = curr_attr;      curr_attr = curr_attr->next;      (void) free((char *) last_attr);    }  *mod_attr_list_ptr = NULLModifyAttr;} /* free_mod_attr_list */void free_mod_val_list(mod_val_list_ptr)     modifyValue *mod_val_list_ptr;{  modifyValue curr_val = *mod_val_list_ptr, last_val;  while (curr_val != NULLModifyValue)    {      if (curr_val->value != NULLCP)	(void) free(curr_val->value);      if (curr_val->new_value != NULLCP)	(void) free(curr_val->new_value);      last_val = curr_val;      curr_val = curr_val->next;      (void) free((char *) last_val);    }  *mod_val_list_ptr = NULLModifyValue;} /* free_mod_val_list */void free_modify_result(result_ptr)     modifyResult *result_ptr;{  modifyResult result = *result_ptr;  if (result == NULLModifyResult)    return;  if (result->errors != NULLError)    error_list_free(&result->errors);  (void) free((char *) result);    *result_ptr = NULLModifyResult;} /* free_modify_result */void modify_rec_free(record)     modifyRec record;{  if (record == NULLModifyRec)    return;    if (record->base_object != NULLCP)    (void) free(record->base_object);  if (record->result != NULLModifyResult)    free_modify_result(&record->result);} /* free_modify_rec */void free_make_template_result(result_ptr)     makeTemplateResult *result_ptr;{  makeTemplateResult result = *result_ptr;  if (result->base_object != NULLCP)    (void) free(result->base_object);    if (result->must_request != NULLModifyAttr)    free_mod_attr_list(&result->must_request);  if (result->must_exc != NULLModifyAttr)    free_mod_attr_list(&result->must_exc);  if (result->may_request != NULLModifyAttr)    free_mod_attr_list(&result->may_request);  if (result->may_exc != NULLModifyAttr)    free_mod_attr_list(&result->may_exc);  if (result->errors != NULLError)    error_list_free(&result->errors);  (void) free((char *) result);  *result_ptr = NULLTemplateResult;} /* free_make_template_result */void free_make_template_rec(record)     makeTemplateRec record;{  if (record == NULLTemplateRec) return;  if (record->base_object != NULLCP)    (void) free(record->base_object);  if (record->include_attrs != NULLModifyAttr)    free_mod_attr_list(&record->include_attrs);  if (record->errors != NULLError)    error_list_free(&record->errors);  (void) free((char *) record);} /* free_make_template_rec *//* * Miscellaneous modify procedures. * * */static struct entrymod * ems_append (a,b)     struct entrymod *a;     struct entrymod *b;{  struct entrymod *ptr;  if ((ptr = a) == NULLMOD)    return b;    for ( ; ptr->em_next != NULLMOD; ptr = ptr->em_next)    ;  ptr->em_next = b;  return a;}modifyAttr avList2modifyAttr(attr_list)     attrValList attr_list;{  modifyAttr curr_mod_attr, head = NULLModifyAttr;  modifyValue curr_mod_val;  stringCell curr_val;  attrValList curr_attr;  for (curr_attr = attr_list;       curr_attr != NULLAVList;       curr_attr = curr_attr->next)    {      if (head == NULLModifyAttr)	{	  head = curr_mod_attr = modify_attr_alloc();	}      else	{	  curr_mod_attr->next = modify_attr_alloc();	  curr_mod_attr = curr_mod_attr->next;	}      curr_mod_attr->next = NULLModifyAttr;      curr_mod_attr->attr_name = copy_string(curr_attr->attr_name->string);      curr_mod_attr->attr_type = AttrT_new(curr_attr->attr_name->string);      curr_mod_attr->values = NULLModifyValue;      curr_mod_attr->to_modify = FALSE;      for (curr_val = curr_attr->val_list, curr_mod_val = NULLModifyValue;	   curr_val != NULLStrCell;	   curr_val = curr_val->next)	{	  if (curr_mod_attr->values == NULLModifyValue)	    {	      curr_mod_attr->values = curr_mod_val = modify_value_alloc();	    }	  else	    {	      curr_mod_val->next = modify_value_alloc();	      curr_mod_val = curr_mod_val->next;	    }	  curr_mod_val->next = NULLModifyValue;	  	  curr_mod_val->new_value = NULLCP;	  curr_mod_val->status = unchanged;	  curr_mod_val->value = copy_string(curr_val->string);	}    }  return head;} /* avList2modifyAttr *//* * - remove_common_attrs() - * * */static modifyAttr remove_common_attrs(primary, secondary)     modifyAttr primary, secondary;{  register modifyAttr curr_sec, last_sec;  modifyAttr tmp;  if (primary == NULLModifyAttr || secondary == NULLModifyAttr)    return secondary;  while (primary != NULLModifyAttr)    {      curr_sec = secondary;      last_sec = NULLModifyAttr;      while (curr_sec != NULLModifyAttr)	{	  if (primary->attr_type == curr_sec->attr_type)	    {	      tmp = curr_sec;	      if (last_sec != NULLModifyAttr)		{		  last_sec->next = curr_sec->next;		  curr_sec = curr_sec->next;		}	      else		curr_sec = secondary = curr_sec->next;	      tmp->next = NULLModifyAttr;	      free_mod_attr_list(&tmp);	    }	  else	    {	      last_sec = curr_sec;	      curr_sec = curr_sec->next;	    }	}      primary = primary->next;    }  return secondary;}/* * - remove_double_attrs() - * * */static modifyAttr remove_double_attrs(primary)     modifyAttr primary;{  register modifyAttr curr_attr, last_attr;  modifyAttr curr_primary, tmp;  if (primary == NULLModifyAttr)    return primary;  for (curr_primary = primary;       curr_primary != NULLModifyAttr;       curr_primary = curr_primary->next)    {      curr_attr = curr_primary->next;      last_attr = NULLModifyAttr;      while (curr_attr != NULLModifyAttr)	if (curr_primary->attr_type == curr_attr->attr_type)	  {	    tmp = curr_attr;	    	    if (last_attr != NULLModifyAttr)		curr_attr = last_attr->next = curr_attr->next;	    else	      {		curr_attr = curr_primary = curr_attr->next;				if (curr_attr != NULLModifyAttr)		  curr_attr = curr_attr->next;				if (primary->next == curr_primary)		  primary = curr_primary;	      }	    	    tmp->next = NULLModifyAttr;	    free_mod_attr_list(&tmp);	  }	else	  {	    last_attr = curr_attr;	    curr_attr = curr_attr->next;	  }    }  return primary;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?