FreeCalypso > hg > freecalypso-sw
diff target-utils/libtiffs/rdinmem.c @ 224:2900fe603f8a
beginning of MPFFS->TIFFS naming convention change
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 12 Jan 2014 07:59:00 +0000 |
parents | target-utils/libmpffs/rdinmem.c@ac310ee73788 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/target-utils/libtiffs/rdinmem.c Sun Jan 12 07:59:00 2014 +0000 @@ -0,0 +1,42 @@ +#include <sys/types.h> +#include "types.h" +#include "struct.h" +#include "globals.h" +#include "macros.h" + +mpffs_read_into_ram(pathname, buf, maxlen, lenrtn) + char *pathname; + u8 *buf; + size_t maxlen, *lenrtn; +{ + int stat, cont; + u8 *chunk_start; + size_t chunk_size, real_len, roomleft; + + stat = mpffs_find_file(pathname, &chunk_start, &chunk_size, &cont); + if (stat < 0) + return(stat); + if (chunk_size > maxlen) { +toobig: printf("Error: %s is bigger than the read buffer\n", pathname); + return(-1); + } + real_len = chunk_size; + bcopy(chunk_start, buf, chunk_size); + buf += chunk_size; + roomleft = maxlen - chunk_size; + while (cont) { + stat = mpffs_get_segment(cont, &chunk_start, &chunk_size, + &cont); + if (stat < 0) + return(stat); + if (chunk_size > roomleft) + goto toobig; + real_len += chunk_size; + bcopy(chunk_start, buf, chunk_size); + buf += chunk_size; + roomleft -= chunk_size; + } + if (lenrtn) + *lenrtn = real_len; + return(0); +}