Standard way of reading file contents to a buffer
A few things stand out...

Function declarations

I'm not a huge fan of specify return type on previous line style:

void
die( int error_code, char* message )


However, if you're going to use it, be consistent (your main is defined differently).

should work in all cases

You're assuming that the file you're reading does't contain any nulls.  This may be OK, as you're not opening the file in binary mode, however if you decide to reuse the code for binary files, returning a null terminated buffer without a size field is going to cause issues.

Main is leaking

I know your main is just a test harness to demonstrate the code, however it's best to always use appropriate memory management.  Your function is allocating a buffer using malloc, you should be freeing it in your main.  By including this in your example it demonstrates that you recognise responsibility for the returned buffer is sitting with the caller.