Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #93895

Re: Generic read/write function - casting vs union

From David Brown <david.brown@hesbynett.no>
Newsgroups comp.lang.c
Subject Re: Generic read/write function - casting vs union
Date 2016-09-22 15:10 +0200
Organization A noiseless patient Spider
Message-ID <ns0l81$2mb$1@dont-email.me> (permalink)
References <ns08ge$o5v$1@dont-email.me> <ns0hps$mc6$1@dont-email.me> <ns0jt5$tfh$1@dont-email.me>

Show all headers | View raw


On 22/09/16 14:46, Noob wrote:

> 
> As you allude to, there is some context between PROLOG and EPILOG.
> 
> PROLOG does several "setup" operations, which must be "torn down"
> in the reverse order in EPILOG, with proper error-handling, meaning
> we cannot tear down a resource that has not been set up.
> 
> PROLOG:
>   alloc #1
>   if (failure) goto L1;
>   alloc #2
>   if (failure) goto L2;
>   alloc #3
>   if (failure) goto L3;
> 
> EPILOG:
>   tear_down(#3);
> L3:
>   tear_down(#2);
> L2:
>   tear_down(#1);
> L1:
>   return err;
> 
> Also I'm not a fan of separating PROLOG and EPILOG, because they
> are obviously closely related, and it doesn't make sense to call
> one without the other. But it's interesting to have other points
> of view.
> 
> Regards.
> 


How portable does your code need to be?  If you can use gcc extensions,
you could consider using "cleanup" functions as a sort of C++
destructor.  Then your code becomes:

PROLOG:
	alloc #1 with cleanup function 1
	if (failure) return err;
	alloc #2 with cleanup function 2
	if (failure) return err;
	alloc #3 with cleanup function 3
	if (failure) return err;

...

EPILOG:
	return success

Your cleanup functions are called in reverse order, and only if your
code has got as far as declaring them.


Of course, you could also use C++ and RAII :-)

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Generic read/write function - casting vs union Noob <root@127.0.0.1> - 2016-09-22 11:33 +0200
  Re: Generic read/write function - casting vs union Richard Heathfield <rjh@cpax.org.uk> - 2016-09-22 11:07 +0100
    Re: Generic read/write function - casting vs union Noob <root@127.0.0.1> - 2016-09-22 12:36 +0200
      Re: Generic read/write function - casting vs union Richard Heathfield <rjh@cpax.org.uk> - 2016-09-22 14:07 +0100
    Re: Generic read/write function - casting vs union Keith Thompson <kst-u@mib.org> - 2016-09-22 11:48 -0700
    Re: Generic read/write function - casting vs union raltbos@xs4all.nl (Richard Bos) - 2016-09-23 19:42 +0000
  Re: Generic read/write function - casting vs union BartC <bc@freeuk.com> - 2016-09-22 13:11 +0100
    Re: Generic read/write function - casting vs union Noob <root@127.0.0.1> - 2016-09-22 14:46 +0200
      Re: Generic read/write function - casting vs union David Brown <david.brown@hesbynett.no> - 2016-09-22 15:10 +0200
        Re: Generic read/write function - casting vs union Noob <root@127.0.0.1> - 2016-09-22 15:36 +0200
          Re: Generic read/write function - casting vs union Malcolm McLean <malcolm.mclean5@btinternet.com> - 2016-09-22 19:28 -0700
          Re: Generic read/write function - casting vs union David Brown <david.brown@hesbynett.no> - 2016-09-23 09:59 +0200
      Re: Generic read/write function - casting vs union Barry Schwarz <schwarzb@dqel.com> - 2016-09-22 20:11 -0700
      Re: Generic read/write function - casting vs union Richard Damon <Richard@Damon-Family.org> - 2016-09-23 11:13 -0400
  Re: Generic read/write function - casting vs union Tim Rentsch <txr@alumni.caltech.edu> - 2016-09-22 08:35 -0700
    Re: Generic read/write function - casting vs union Noob <root@127.0.0.1> - 2016-09-25 23:17 +0200
    Re: Generic read/write function - casting vs union Noob <root@127.0.0.1> - 2016-09-26 14:54 +0200
      Re: Generic read/write function - casting vs union boon <root@localhost.localdomain> - 2016-09-26 19:47 +0200
      Re: Generic read/write function - casting vs union Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-09-26 19:23 +0100
      Re: Generic read/write function - casting vs union Tim Rentsch <txr@alumni.caltech.edu> - 2016-09-27 13:10 -0700
      Re: Generic read/write function - casting vs union David Thompson <dave.thompson2@verizon.net> - 2016-10-16 18:08 -0400
  Re: Generic read/write function - casting vs union Anton Shepelev <anton.txt@gmail.com> - 2016-10-17 23:40 +0300
  Re: Generic read/write function - casting vs union albert@cherry.spenarnc.xs4all.nl (Albert van der Horst) - 2016-12-11 15:20 +0100
    Re: Generic read/write function - casting vs union supercat@casperkitty.com - 2016-12-11 09:38 -0800

csiph-web