Listing 2 Statically nested TRY blocks

TRY(
{
  char *buf = malloc(256);
  
  if (buf == NULL)
    THROW(out_of_memory);
  
  TRY(
  {
    if (scanf("%255s", buf) != 1)
      THROW(failed_to_read_string);
  },
  {
    /* Inner unwind-block */
  }
     );
  
  printf("%s\n", buf);
  free(buf);
},
{
  /* Outer unwind-block */
}
   );

/* End of File */