X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=form%2Ffld_dup.c;h=bbc38a3eb7156f5bae27a0ce6cfe7d3d41530cec;hp=d265f958f218b0a341558bda9cab0f6768c03fd4;hb=eae581c0044c1c0ef9caa17fc9b9ae6ef4c93cca;hpb=0eb88fc5281804773e2a0c7a488a4452463535ce diff --git a/form/fld_dup.c b/form/fld_dup.c index d265f958..bbc38a3e 100644 --- a/form/fld_dup.c +++ b/form/fld_dup.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998 Free Software Foundation, Inc. * + * Copyright (c) 1998-2004,2007 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 * @@ -27,71 +27,75 @@ ****************************************************************************/ /**************************************************************************** - * Author: Juergen Pfeifer 1995,1997 * + * Author: Juergen Pfeifer, 1995,1997 * ****************************************************************************/ #include "form.priv.h" -MODULE_ID("$Id: fld_dup.c,v 1.4 1999/05/16 17:17:08 juergen Exp $") +MODULE_ID("$Id: fld_dup.c,v 1.12 2007/10/13 19:30:21 tom Exp $") /*--------------------------------------------------------------------------- -| Facility : libnform +| Facility : libnform | Function : FIELD *dup_field(FIELD *field, int frow, int fcol) -| +| | Description : Duplicates the field at the specified position. All | field attributes and the buffers are copied. | If an error occurs, errno is set to -| +| | E_BAD_ARGUMENT - invalid argument | E_SYSTEM_ERROR - system error | | Return Values : Pointer to the new field or NULL if failure +--------------------------------------------------------------------------*/ -FIELD *dup_field(FIELD * field, int frow, int fcol) +NCURSES_EXPORT(FIELD *) +dup_field(FIELD *field, int frow, int fcol) { FIELD *New_Field = (FIELD *)0; int err = E_BAD_ARGUMENT; - if (field && (frow>=0) && (fcol>=0) && - ((err=E_SYSTEM_ERROR) != 0) && /* trick : this resets the default error */ - (New_Field=(FIELD *)malloc(sizeof(FIELD))) ) + T((T_CALLED("dup_field(%p,%d,%d)"), field, frow, fcol)); + if (field && (frow >= 0) && (fcol >= 0) && + ((err = E_SYSTEM_ERROR) != 0) && /* trick : this resets the default error */ + (New_Field = typeMalloc(FIELD, 1))) { - *New_Field = *_nc_Default_Field; - New_Field->frow = frow; - New_Field->fcol = fcol; - New_Field->link = New_Field; - New_Field->rows = field->rows; - New_Field->cols = field->cols; - New_Field->nrow = field->nrow; - New_Field->drows = field->drows; - New_Field->dcols = field->dcols; + T((T_CREATE("field %p"), New_Field)); + *New_Field = *_nc_Default_Field; + New_Field->frow = frow; + New_Field->fcol = fcol; + New_Field->link = New_Field; + New_Field->rows = field->rows; + New_Field->cols = field->cols; + New_Field->nrow = field->nrow; + New_Field->drows = field->drows; + New_Field->dcols = field->dcols; New_Field->maxgrow = field->maxgrow; - New_Field->nbuf = field->nbuf; - New_Field->just = field->just; - New_Field->fore = field->fore; - New_Field->back = field->back; - New_Field->pad = field->pad; - New_Field->opts = field->opts; - New_Field->usrptr = field->usrptr; + New_Field->nbuf = field->nbuf; + New_Field->just = field->just; + New_Field->fore = field->fore; + New_Field->back = field->back; + New_Field->pad = field->pad; + New_Field->opts = field->opts; + New_Field->usrptr = field->usrptr; - if (_nc_Copy_Type(New_Field,field)) + if (_nc_Copy_Type(New_Field, field)) { - size_t len; + size_t i, len; len = Total_Buffer_Size(New_Field); - if ( (New_Field->buf=(char *)malloc(len)) ) + if ((New_Field->buf = (FIELD_CELL *)malloc(len))) { - memcpy(New_Field->buf,field->buf,len); - return New_Field; + for (i = 0; i < len; ++i) + New_Field->buf[i] = field->buf[i]; + returnField(New_Field); } } } - if (New_Field) + if (New_Field) free_field(New_Field); SET_ERROR(err); - return (FIELD *)0; + returnField((FIELD *)0); } /* fld_dup.c ends here */