/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright 2020,2021 Thomas E. Dickey *
+ * Copyright 1998-2010,2012 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer, 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_ftlink.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_ftlink.c,v 1.18 2021/06/17 21:20:30 tom Exp $")
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : FIELDTYPE *link_fieldtype(
| FIELDTYPE *type1,
| FIELDTYPE *type2)
-|
+|
| Description : Create a new fieldtype built from the two given types.
| They are connected by an logical 'OR'.
-| If an error occurs, errno is set to
+| If an error occurs, errno is set to
| E_BAD_ARGUMENT - invalid arguments
| E_SYSTEM_ERROR - system error (no memory)
|
-| Return Values : Fieldtype pointer or NULL if error occured.
+| Return Values : Fieldtype pointer or NULL if error occurred.
+--------------------------------------------------------------------------*/
-FIELDTYPE *link_fieldtype(FIELDTYPE * type1, FIELDTYPE * type2)
+FORM_EXPORT(FIELDTYPE *)
+link_fieldtype(FIELDTYPE *type1, FIELDTYPE *type2)
{
FIELDTYPE *nftyp = (FIELDTYPE *)0;
- if ( type1 && type2 )
+ T((T_CALLED("link_fieldtype(%p,%p)"), (void *)type1, (void *)type2));
+ if (type1 && type2)
{
- nftyp = (FIELDTYPE *)malloc(sizeof(FIELDTYPE));
+ nftyp = typeMalloc(FIELDTYPE, 1);
+
if (nftyp)
{
+ T((T_CREATE("fieldtype %p"), (void *)nftyp));
*nftyp = *_nc_Default_FieldType;
- nftyp->status |= _LINKED_TYPE;
- if ((type1->status & _HAS_ARGS) || (type2->status & _HAS_ARGS) )
- nftyp->status |= _HAS_ARGS;
- if ((type1->status & _HAS_CHOICE) || (type2->status & _HAS_CHOICE) )
- nftyp->status |= _HAS_CHOICE;
- nftyp->left = type1;
- nftyp->right = type2;
+ SetStatus(nftyp, _LINKED_TYPE);
+ if ((type1->status & _HAS_ARGS) || (type2->status & _HAS_ARGS))
+ SetStatus(nftyp, _HAS_ARGS);
+ if ((type1->status & _HAS_CHOICE) || (type2->status & _HAS_CHOICE))
+ SetStatus(nftyp, _HAS_CHOICE);
+ nftyp->left = type1;
+ nftyp->right = type2;
type1->ref++;
type2->ref++;
}
else
{
- SET_ERROR( E_SYSTEM_ERROR );
+ SET_ERROR(E_SYSTEM_ERROR);
}
}
else
{
- SET_ERROR( E_BAD_ARGUMENT );
+ SET_ERROR(E_BAD_ARGUMENT);
}
- return nftyp;
+ returnFieldType(nftyp);
}
/* fld_ftlink.c ends here */