diff --git a/commands/md.c b/commands/md.c index c88259a..3e83c72 100644 --- a/commands/md.c +++ b/commands/md.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include diff --git a/commands/mem.c b/commands/mem.c index 23c703f..907f1f7 100644 --- a/commands/mem.c +++ b/commands/mem.c @@ -41,29 +41,6 @@ char *mem_rw_buf; -int open_and_lseek(const char *filename, int mode, loff_t pos) -{ - int fd, ret; - - fd = open(filename, mode | O_RDONLY); - if (fd < 0) { - perror("open"); - return fd; - } - - if (!pos) - return fd; - - ret = lseek(fd, pos, SEEK_SET); - if (ret == -1) { - perror("lseek"); - close(fd); - return -errno; - } - - return fd; -} - /* * Common function for parsing options for the 'md', 'mw', 'memcpy', 'memcmp' * commands. diff --git a/commands/memcmp.c b/commands/memcmp.c index e079d5f..ce044df 100644 --- a/commands/memcmp.c +++ b/commands/memcmp.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include diff --git a/commands/memcpy.c b/commands/memcpy.c index 9c8b645..168ef3b 100644 --- a/commands/memcpy.c +++ b/commands/memcpy.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include diff --git a/commands/memset.c b/commands/memset.c index fc5b659..f871e07 100644 --- a/commands/memset.c +++ b/commands/memset.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include diff --git a/commands/mm.c b/commands/mm.c index 7c890a6..6d2a887 100644 --- a/commands/mm.c +++ b/commands/mm.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include diff --git a/commands/mw.c b/commands/mw.c index 8ca3c61..bb6a16e 100644 --- a/commands/mw.c +++ b/commands/mw.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include diff --git a/include/common.h b/include/common.h index 54120c4..680a0af 100644 --- a/include/common.h +++ b/include/common.h @@ -128,7 +128,6 @@ int mem_parse_options(int argc, char *argv[], char *optstr, int *mode, char **sourcefile, char **destfile, int *swab); -int open_and_lseek(const char *filename, int mode, loff_t pos); #define RW_BUF_SIZE (unsigned)4096 extern const char version_string[]; diff --git a/include/libfile.h b/include/libfile.h index d5b914a..51fa060 100644 --- a/include/libfile.h +++ b/include/libfile.h @@ -19,4 +19,6 @@ int compare_file(const char *f1, const char *f2); +int open_and_lseek(const char *filename, int mode, loff_t pos); + #endif /* __LIBFILE_H */ diff --git a/lib/libfile.c b/lib/libfile.c index a27460c..2c72ffe 100644 --- a/lib/libfile.c +++ b/lib/libfile.c @@ -442,3 +442,35 @@ close(fd1); return ret; } + +/** + * open_and_lseek - open file and lseek to position + * @filename: The file to open + * @mode: The file open mode + * @pos: The position to lseek to + * + * Return: If successful this function returns a positive filedescriptor + * number, otherwise a negative error code is returned + */ +int open_and_lseek(const char *filename, int mode, loff_t pos) +{ + int fd, ret; + + fd = open(filename, mode | O_RDONLY); + if (fd < 0) { + perror("open"); + return fd; + } + + if (!pos) + return fd; + + ret = lseek(fd, pos, SEEK_SET); + if (ret == -1) { + perror("lseek"); + close(fd); + return -errno; + } + + return fd; +}