Index: libcfa/src/fstream.cfa
===================================================================
--- libcfa/src/fstream.cfa	(revision 0087e0e3e79115b045d5d67778e9d3c9a5ffc766)
+++ libcfa/src/fstream.cfa	(revision bee653c38b2689440676977bdd8a3166b43e87f4)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Dec 24 18:33:38 2018
-// Update Count     : 304
+// Last Modified On : Thu Mar 28 17:39:53 2019
+// Update Count     : 307
 //
 
@@ -23,4 +23,5 @@
 #include <complex.h>									// creal, cimag
 #include <assert.h>
+#include <errno.h>										// errno
 
 #define IO_MSG "I/O error: "
@@ -105,7 +106,5 @@
 	#ifdef __CFA_DEBUG__
 	if ( file == 0 ) {
-		fprintf( stderr, IO_MSG "open output file \"%s\", ", name );
-		perror( 0 );
-		exit( EXIT_FAILURE );
+		abort( IO_MSG "open output file \"%s\", %s", name, strerror( errno ) );
 	} // if
 	#endif // __CFA_DEBUG__
@@ -121,5 +120,5 @@
 
 	if ( fclose( (FILE *)(os.file) ) == EOF ) {
-		perror( IO_MSG "close output" );
+		abort( IO_MSG "close output %s", strerror( errno ) );
 	} // if
 } // close
@@ -127,11 +126,9 @@
 ofstream & write( ofstream & os, const char * data, size_t size ) {
 	if ( fail( os ) ) {
-		fprintf( stderr, "attempt write I/O on failed stream\n" );
-		exit( EXIT_FAILURE );
+		abort( "attempt write I/O on failed stream\n" );
 	} // if
 
 	if ( fwrite( data, 1, size, (FILE *)(os.file) ) != size ) {
-		perror( IO_MSG "write" );
-		exit( EXIT_FAILURE );
+		abort( IO_MSG "write %s", strerror( errno ) );
 	} // if
 	return os;
@@ -144,6 +141,5 @@
 	if ( len == EOF ) {
 		if ( ferror( (FILE *)(os.file) ) ) {
-			fprintf( stderr, "invalid write\n" );
-			exit( EXIT_FAILURE );
+			abort( "invalid write\n" );
 		} // if
 	} // if
@@ -187,10 +183,8 @@
 
 void open( ifstream & is, const char * name, const char * mode ) {
-	FILE *file = fopen( name, mode );
+	FILE * file = fopen( name, mode );
 	#ifdef __CFA_DEBUG__
 	if ( file == 0 ) {
-		fprintf( stderr, IO_MSG "open input file \"%s\", ", name );
-		perror( 0 );
-		exit( EXIT_FAILURE );
+		abort( IO_MSG "open input file \"%s\", %s\n", name, strerror( errno ) );
 	} // if
 	#endif // __CFA_DEBUG__
@@ -206,5 +200,5 @@
 
 	if ( fclose( (FILE *)(is.file) ) == EOF ) {
-		perror( IO_MSG "close input" );
+		abort( IO_MSG "close input %s", strerror( errno ) );
 	} // if
 } // close
@@ -212,11 +206,9 @@
 ifstream & read( ifstream & is, char * data, size_t size ) {
 	if ( fail( is ) ) {
-		fprintf( stderr, "attempt read I/O on failed stream\n" );
-		exit( EXIT_FAILURE );
+		abort( "attempt read I/O on failed stream\n" );
 	} // if
 
 	if ( fread( data, size, 1, (FILE *)(is.file) ) == 0 ) {
-		perror( IO_MSG "read" );
-		exit( EXIT_FAILURE );
+		abort( IO_MSG "read %s", strerror( errno ) );
 	} // if
 	return is;
@@ -225,11 +217,9 @@
 ifstream &ungetc( ifstream & is, char c ) {
 	if ( fail( is ) ) {
-		fprintf( stderr, "attempt ungetc I/O on failed stream\n" );
-		exit( EXIT_FAILURE );
+		abort( "attempt ungetc I/O on failed stream\n" );
 	} // if
 
 	if ( ungetc( c, (FILE *)(is.file) ) == EOF ) {
-		perror( IO_MSG "ungetc" );
-		exit( EXIT_FAILURE );
+		abort( IO_MSG "ungetc %s", strerror( errno ) );
 	} // if
 	return is;
@@ -243,6 +233,5 @@
 	if ( len == EOF ) {
 		if ( ferror( (FILE *)(is.file) ) ) {
-			fprintf( stderr, "invalid read\n" );
-			exit( EXIT_FAILURE );
+			abort( "invalid read\n" );
 		} // if
 	} // if
Index: libcfa/src/rational.cfa
===================================================================
--- libcfa/src/rational.cfa	(revision 0087e0e3e79115b045d5d67778e9d3c9a5ffc766)
+++ libcfa/src/rational.cfa	(revision bee653c38b2689440676977bdd8a3166b43e87f4)
@@ -10,6 +10,6 @@
 // Created On       : Wed Apr  6 17:54:28 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Mar 27 08:45:59 2019
-// Update Count     : 180
+// Last Modified On : Thu Mar 28 17:33:03 2019
+// Update Count     : 181
 //
 
@@ -35,6 +35,5 @@
 	static RationalImpl simplify( RationalImpl & n, RationalImpl & d ) {
 		if ( d == (RationalImpl){0} ) {
-			serr | "Invalid rational number construction: denominator cannot be equal to 0.";
-			exit( EXIT_FAILURE );
+			abort( "Invalid rational number construction: denominator cannot be equal to 0.\n" );
 		} // exit
 		if ( d < (RationalImpl){0} ) { d = -d; n = -n; } // move sign to numerator
