Fix POSIX backend with reading data.

Its perfectly fine that a read returns less then the actual size
of the pre-allocated buffer. We should also use the actual count
read (cc) as the return value in data_lenp. Also when the offset +
range_length given is bigger then the actual filesize only read the
data left.
Don't use creat() as that will truncate the file on every open.

creat(path, mode) translates to open(path, O_WRONLY | O_CREAT | O_TRUNC, mode)
which means on every blob you write to a file using the POSIX backend
you truncate the file and loose previously written data.