コード例 #1
0
ファイル: fld_type.c プロジェクト: ajinkya93/OpenBSD
set_field_type(FIELD *field, FIELDTYPE *type,...)
{
  va_list ap;
  int res = E_SYSTEM_ERROR;
  int err = 0;

  T((T_CALLED("set_field_type(%p,%p)"), field, type));

  va_start(ap, type);

  Normalize_Field(field);
  _nc_Free_Type(field);

  field->type = type;
  field->arg = (void *)_nc_Make_Argument(field->type, &ap, &err);

  if (err)
    {
      _nc_Free_Argument(field->type, (TypeArgument *)(field->arg));
      field->type = (FIELDTYPE *)0;
      field->arg = (void *)0;
    }
  else
    {
      res = E_OK;
      if (field->type)
	field->type->ref++;
    }

  va_end(ap);
  RETURN(res);
}
コード例 #2
0
ファイル: fld_def.c プロジェクト: aosm/old_ncurses
_nc_Free_Type (FIELD *field)
{
  assert(field);
  if (field->type) 
    field->type->ref--;
  _nc_Free_Argument(field->type,(TypeArgument *)(field->arg));
}
コード例 #3
0
ファイル: fld_def.c プロジェクト: Claruarius/stblinux-2.6.37
_nc_Copy_Type(FIELD *dst, FIELD const *src)
{
  int err = 0;

  assert(dst != 0 && src != 0);

  dst->type = src->type;
  dst->arg = (void *)_nc_Copy_Argument(src->type, (TypeArgument *)(src->arg), &err);

  if (err != 0)
    {
      _nc_Free_Argument(dst->type, (TypeArgument *)(dst->arg));
      dst->type = (FIELDTYPE *)0;
      dst->arg = (void *)0;
      return FALSE;
    }
  else
    {
      if (dst->type != 0)
	{
	  dst->type->ref++;
	}
      return TRUE;
    }
}
コード例 #4
0
ファイル: fld_def.c プロジェクト: Andersbakken/CMake
/*---------------------------------------------------------------------------
|   Facility      :  libnform  
|   Function      :  void _nc_Free_Argument(const FIELDTYPE *typ,
|                                           TypeArgument * argp )
|   
|   Description   :  Release memory associated with the argument structure
|                    for the given fieldtype.
|
|   Return Values :  -
+--------------------------------------------------------------------------*/
void
_nc_Free_Argument(const FIELDTYPE * typ, TypeArgument * argp)
{
  if (!typ || !(typ->status & _HAS_ARGS)) 
    return;
  
  if (typ->status & _LINKED_TYPE)
    {
      assert(argp != 0);
      _nc_Free_Argument(typ->left ,argp->left );
      _nc_Free_Argument(typ->right,argp->right);
      free(argp);
    } 
  else 
    {
      if (typ->freearg)
	typ->freearg((void *)argp);
    }
}
コード例 #5
0
ファイル: fld_def.c プロジェクト: Claruarius/stblinux-2.6.37
_nc_Free_Argument(const FIELDTYPE *typ, TypeArgument *argp)
{
  if (typ != 0 && (typ->status & _HAS_ARGS) != 0)
    {
      if ((typ->status & _LINKED_TYPE) != 0)
	{
	  assert(argp != 0);
	  _nc_Free_Argument(typ->left, argp->left);
	  _nc_Free_Argument(typ->right, argp->right);
	  free(argp);
	}
      else
	{
	  if (typ->freearg != (void *)0)
	    {
	      typ->freearg((void *)argp);
	    }
	}
    }
}
コード例 #6
0
ファイル: fty_generic.c プロジェクト: AdriDlu/coreboot
_nc_set_generic_fieldtype(FIELD *field,
			  FIELDTYPE *ftyp,
			  int (*argiterator) (void **))
{
  int code = E_SYSTEM_ERROR;
  int err = 0;

  if (field)
    {
      if (field && field->type)
	_nc_Free_Type(field);

      field->type = ftyp;
      if (ftyp)
	{
	  if (argiterator)
	    {
	      /* The precondition is that the iterator is reset */
	      field->arg = (void *)GenericArgument(field->type, argiterator, &err);

	      if (err)
		{
		  _nc_Free_Argument(field->type, (TypeArgument *)(field->arg));
		  field->type = (FIELDTYPE *)0;
		  field->arg = (void *)0;
		}
	      else
		{
		  code = E_OK;
		  if (field->type)
		    field->type->ref++;
		}
	    }
	}
      else
	{
	  field->arg = (void *)0;
	  code = E_OK;
	}
    }
  return code;
}