9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 8fb140b4fcd8b5d66e4a4fd382e328d5e4b81eb0
parent cdd129b5fbab9ee543ec3674694b935b48e391e3
Author: Roberto E. Vargas Caballero <roberto@clue.aero>
Date:   Mon, 12 Aug 2019 16:41:22 +0200

[libk] Move loadimg() to libk.

This function is generic code, and it is a totally independent
function, so the best place for it is in a library, and it
that case libk is the best place.

Change-Id: I2907297031abd0e700da4a2612bd0997fffcfacc

Diffstat:
Minclude/libk.h | 1+
Msrc/libk/Makefile | 1+
Asrc/libk/loadimg.c | 42++++++++++++++++++++++++++++++++++++++++++
Mtarget/native/rom.c | 42------------------------------------------
4 files changed, 44 insertions(+), 42 deletions(-)

diff --git a/include/libk.h b/include/libk.h @@ -15,3 +15,4 @@ extern int kvprint(int fd, const char *fmt, va_list va); extern void kerror(const char *s); extern int putenv(char *name); extern int tokenize(char *line, int siz, char *tokens[], int ntoks); +extern int loadimg(char *name, void *dst, long *n); diff --git a/src/libk/Makefile b/src/libk/Makefile @@ -17,6 +17,7 @@ OBJS = doprnt.o \ fromstring.o \ tobytes.o \ tostring.o \ + loadimg.o \ __assert.o \ TARGET = $(LIBDIR)/libk.a diff --git a/src/libk/loadimg.c b/src/libk/loadimg.c @@ -0,0 +1,42 @@ +#include <errno.h> + +#include <libk.h> +#include <limits.h> +#include <rcode/rcode.h> + +int +loadimg(char *name, void *dst, long *n) +{ + int err = -1; + int fd; + Dir dir; + long cnt, r; + char *d = dst; + + if (dirstat(name, &dir) < 0) + goto err0; + if ((fd = open(name, O_READ)) < 0) + goto err0; + + if (n && dir.length > *n && *n > 0) + dir.length = *n; + + for (cnt = dir.length; cnt > 0; cnt -= r) { + r = (cnt > INT_MAX) ? INT_MAX : cnt; + r = read(fd, d, r); + if (r == 0) + break; + if (r < 0) + goto err1; + d += r; + } + + if (n) + *n = dir.length - cnt; + err = 0; + +err1: + close(fd); +err0: + return err; +} diff --git a/target/native/rom.c b/target/native/rom.c @@ -135,48 +135,6 @@ namespace(void) return; } -// TODO: move to generic code -int -loadimg(char *name, void *dst, long *n) -{ - int fd; - Dir dir; - long cnt, r; - char *d = dst; - - if (dirstat(name, &dir) < 0) - goto err0; - fd = open(name, O_READ); - if (fd < 0) - goto err0; - - if (n) { - if (dir.length > *n && *n > 0) - dir.length = *n; - } - - for (cnt = dir.length; cnt > 0; cnt -= r) { - r = (cnt > INT_MAX) ? INT_MAX : cnt; - r = read(fd, d, r); - if (r == 0) - break; - if (r < 0) - goto err1; - d += r; - } - - if (n) - *n = dir.length - cnt; - - close(fd); - return 0; - -err1: - close(fd); -err0: - return -1; -} - void loadfip(void) {