X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=form%2Ffld_dup.c;h=7091bce4f0ecfdbb4e9a77a491dd072bad4cc220;hp=31671791006716ef2600c3db35f3448a9ee10ec2;hb=5242fccf157e715ed878455a3efea6c82b840eb5;hpb=46722468f47c2b77b3987729b4bcf2321cccfd01;ds=inline diff --git a/form/fld_dup.c b/form/fld_dup.c index 31671791..7091bce4 100644 --- a/form/fld_dup.c +++ b/form/fld_dup.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998,2000 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 * @@ -28,72 +28,74 @@ /**************************************************************************** * Author: Juergen Pfeifer, 1995,1997 * - * Contact: http://www.familiepfeifer.de/Contact.aspx?Lang=en * ****************************************************************************/ #include "form.priv.h" -MODULE_ID("$Id: fld_dup.c,v 1.6 2002/07/06 15:33:27 juergen Exp $") +MODULE_ID("$Id: fld_dup.c,v 1.11 2007/02/03 23:37:46 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 +--------------------------------------------------------------------------*/ NCURSES_EXPORT(FIELD *) -dup_field (FIELD * field, int frow, int fcol) +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 = (FIELD *)malloc(sizeof(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; + 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 */