This is at least the second repeat of this pattern; is it worth packaging in a function ?
Write *FileReadNative(const char *name, size_t space, bool *truncated);
or add an int mode to FileRead for use as O_RDONLY | mode, usually 0, so that we can use FileRead here.