gwyn@smoke.ARPA (Doug Gwyn ) (08/23/88)
In article <3498@encore.UUCP> bzs@encore.UUCP (Barry Shein) writes: >Consider that sbrk() returns -1 (specifically, (char *)-1) as an error >code in all Unix's I know of (BSD, SYSV.) Actually it's not clear WHAT sbrk() returns for an error indication, when expressed in C. Traditionally (because of usage of a common error handling return by all system call interfaces) it returns an int with value -1, which may not even be in the same register as a char * is returned in. This is a horrible botch that COULD have been fixed over the years by a phased transition strategy: 0) existing bogus -1 return from sbrk 1) edit applications to accept bogus -1 or useful 0 for error 2) change sbrk to return 0 on error 3) (optional) edit applications to no longer check bogus -1. Other similar problems have been fixed by such a strategy. The analogous IPC botch is less excusable, as the final form of that interface was frozen several years after the problem with -1 as a char * was well known. P.S. To avoid the problem with sbrk(), change if ( sbrk( incr ) == ??? ) error(); to curbrk = sbrk( 0 ); if ( brk( curbrk + incr ) == 0 ) error();