From 52a1caf80302fcaa86466785cd036bdfab2d2298 Mon Sep 17 00:00:00 2001 From: gkostka Date: Sun, 6 Apr 2014 15:58:29 +0000 Subject: Client server basic test suite + minor code improvment. --- blockdev/filedev/ext4_filedev.c | 10 -- blockdev/filedev/ext4_filedev.h | 5 +- blockdev/filedev_win/io_raw.c | 192 ++++++++++++++++++++++++++++++++++++++ blockdev/filedev_win/io_raw.h | 44 +++++++++ blockdev/io_raw/io_raw.c | 202 ---------------------------------------- blockdev/io_raw/io_raw.h | 46 --------- 6 files changed, 237 insertions(+), 262 deletions(-) create mode 100644 blockdev/filedev_win/io_raw.c create mode 100644 blockdev/filedev_win/io_raw.h delete mode 100644 blockdev/io_raw/io_raw.c delete mode 100644 blockdev/io_raw/io_raw.h (limited to 'blockdev') diff --git a/blockdev/filedev/ext4_filedev.c b/blockdev/filedev/ext4_filedev.c index 09c19ef..ea3ba7c 100644 --- a/blockdev/filedev/ext4_filedev.c +++ b/blockdev/filedev/ext4_filedev.c @@ -68,9 +68,6 @@ EXT4_BLOCKDEV_STATIC_INSTANCE( filedev_close ); -/******************************************************************************/ -EXT4_BCACHE_STATIC_INSTANCE(__cache, CONFIG_BLOCK_DEV_CACHE_SIZE, 1024); - /******************************************************************************/ static int filedev_open(struct ext4_blockdev *bdev) { @@ -137,13 +134,6 @@ static int filedev_close(struct ext4_blockdev *bdev) return EOK; } - -/******************************************************************************/ - -struct ext4_bcache* ext4_filecache_get(void) -{ - return &__cache; -} /******************************************************************************/ struct ext4_blockdev* ext4_filedev_get(void) { diff --git a/blockdev/filedev/ext4_filedev.h b/blockdev/filedev/ext4_filedev.h index b37ee9b..cbd8aa5 100644 --- a/blockdev/filedev/ext4_filedev.h +++ b/blockdev/filedev/ext4_filedev.h @@ -34,13 +34,10 @@ #include #include -/**@brief Filecache get.*/ -struct ext4_bcache* ext4_filecache_get(void); - /**@brief File blockdev get.*/ struct ext4_blockdev* ext4_filedev_get(void); -/**@brief Filename set.*/ +/**@brief Set filename to open.*/ void ext4_filedev_filename(const char *n); #endif /* EXT4_FILEDEV_H_ */ diff --git a/blockdev/filedev_win/io_raw.c b/blockdev/filedev_win/io_raw.c new file mode 100644 index 0000000..6af3861 --- /dev/null +++ b/blockdev/filedev_win/io_raw.c @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2013 Grzegorz Kostka (kostka.grzegorz@gmail.com) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include + +#ifdef WIN32 +#include +#include + + +/**@brief Default filename.*/ +static const char *fname = "ext2"; + +/**@brief IO block size.*/ +#define EXT4_IORAW_BSIZE 512 + +/**@brief Image file descriptor.*/ +static HANDLE dev_file; + + +/**********************BLOCKDEV INTERFACE**************************************/ +static int io_raw_open(struct ext4_blockdev *bdev); +static int io_raw_bread(struct ext4_blockdev *bdev, void *buf, uint64_t blk_id, + uint32_t blk_cnt); +static int io_raw_bwrite(struct ext4_blockdev *bdev, const void *buf, + uint64_t blk_id, uint32_t blk_cnt); +static int io_raw_close(struct ext4_blockdev *bdev); + + + + +/******************************************************************************/ +EXT4_BLOCKDEV_STATIC_INSTANCE( + _filedev, + EXT4_IORAW_BSIZE, + 0, + io_raw_open, + io_raw_bread, + io_raw_bwrite, + io_raw_close +); + +/******************************************************************************/ +static int io_raw_open(struct ext4_blockdev *bdev) +{ + char path[64]; + DISK_GEOMETRY pdg; + uint64_t disk_size; + BOOL bResult = FALSE; + DWORD junk; + + sprintf(path, "\\\\.\\%s", fname); + + dev_file = CreateFile (path, + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_WRITE | FILE_SHARE_READ, + NULL, + OPEN_EXISTING, + FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, + NULL); + + if (dev_file == INVALID_HANDLE_VALUE){ + return EIO; + } + + bResult = DeviceIoControl(dev_file, + IOCTL_DISK_GET_DRIVE_GEOMETRY, + NULL, 0, + &pdg, sizeof(pdg), + &junk, + (LPOVERLAPPED) NULL); + + if(bResult == FALSE){ + CloseHandle(dev_file); + return EIO; + } + + + disk_size = pdg.Cylinders.QuadPart * (ULONG)pdg.TracksPerCylinder * + (ULONG)pdg.SectorsPerTrack * (ULONG)pdg.BytesPerSector; + + _filedev.ph_bsize = pdg.BytesPerSector; + _filedev.ph_bcnt = disk_size / pdg.BytesPerSector; + + + return EOK; +} + +/******************************************************************************/ + +static int io_raw_bread(struct ext4_blockdev *bdev, void *buf, uint64_t blk_id, + uint32_t blk_cnt) +{ + long hipart = blk_id >> (32-9); + long lopart = blk_id << 9; + long err; + + SetLastError (0); + lopart = SetFilePointer (dev_file, lopart, &hipart, FILE_BEGIN); + + if (lopart == -1 && NO_ERROR != (err = GetLastError ())) + { + return EIO; + } + + DWORD n; + + if (!ReadFile (dev_file, buf, blk_cnt * 512, &n, NULL)) + { + err = GetLastError (); + return EIO; + } + return EOK; +} + +/******************************************************************************/ +static int io_raw_bwrite(struct ext4_blockdev *bdev, const void *buf, + uint64_t blk_id, uint32_t blk_cnt) +{ + long hipart = blk_id >> (32-9); + long lopart = blk_id << 9; + long err; + + SetLastError (0); + lopart = SetFilePointer (dev_file, lopart, &hipart, FILE_BEGIN); + + if (lopart == -1 && NO_ERROR != (err = GetLastError ())) + { + return EIO; + } + + DWORD n; + + if (!WriteFile (dev_file, buf, blk_cnt * 512, &n, NULL)) + { + err = GetLastError (); + return EIO; + } + return EOK; +} + +/******************************************************************************/ +static int io_raw_close(struct ext4_blockdev *bdev) +{ + CloseHandle(dev_file); + return EOK; +} + +/******************************************************************************/ +struct ext4_blockdev* ext4_io_raw_dev_get(void) +{ + return &_filedev; +} +/******************************************************************************/ +void ext4_io_raw_filename(const char *n) +{ + fname = n; +} + +/******************************************************************************/ +#endif + diff --git a/blockdev/filedev_win/io_raw.h b/blockdev/filedev_win/io_raw.h new file mode 100644 index 0000000..742f49e --- /dev/null +++ b/blockdev/filedev_win/io_raw.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2013 Grzegorz Kostka (kostka.grzegorz@gmail.com) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef IO_RAW_H_ +#define IO_RAW_H_ + +#include +#include + +#include +#include + + +/**@brief IO raw blockdev get.*/ +struct ext4_blockdev* ext4_io_raw_dev_get(void); + +/**@brief Set filrname to open.*/ +void ext4_io_raw_filename(const char *n); + +#endif /* IO_RAW_H_ */ diff --git a/blockdev/io_raw/io_raw.c b/blockdev/io_raw/io_raw.c deleted file mode 100644 index 66b35b4..0000000 --- a/blockdev/io_raw/io_raw.c +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright (c) 2013 Grzegorz Kostka (kostka.grzegorz@gmail.com) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include - -#ifdef WIN32 -#include -#include - - -/**@brief Default filename.*/ -static const char *fname = "ext2"; - -/**@brief IO block size.*/ -#define EXT4_IORAW_BSIZE 512 - -/**@brief Image file descriptor.*/ -static HANDLE dev_file; - - -/**********************BLOCKDEV INTERFACE**************************************/ -static int io_raw_open(struct ext4_blockdev *bdev); -static int io_raw_bread(struct ext4_blockdev *bdev, void *buf, uint64_t blk_id, - uint32_t blk_cnt); -static int io_raw_bwrite(struct ext4_blockdev *bdev, const void *buf, - uint64_t blk_id, uint32_t blk_cnt); -static int io_raw_close(struct ext4_blockdev *bdev); - - - - -/******************************************************************************/ -EXT4_BLOCKDEV_STATIC_INSTANCE( - _filedev, - EXT4_IORAW_BSIZE, - 0, - io_raw_open, - io_raw_bread, - io_raw_bwrite, - io_raw_close -); - -/******************************************************************************/ -EXT4_BCACHE_STATIC_INSTANCE(__cache, CONFIG_BLOCK_DEV_CACHE_SIZE, 1024); - -/******************************************************************************/ -static int io_raw_open(struct ext4_blockdev *bdev) -{ - char path[64]; - DISK_GEOMETRY pdg; - uint64_t disk_size; - BOOL bResult = FALSE; - DWORD junk; - - sprintf(path, "\\\\.\\%s", fname); - - dev_file = CreateFile (path, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_WRITE | FILE_SHARE_READ, - NULL, - OPEN_EXISTING, - FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH, - NULL); - - if (dev_file == INVALID_HANDLE_VALUE){ - return EIO; - } - - bResult = DeviceIoControl(dev_file, - IOCTL_DISK_GET_DRIVE_GEOMETRY, - NULL, 0, - &pdg, sizeof(pdg), - &junk, - (LPOVERLAPPED) NULL); - - if(bResult == FALSE){ - CloseHandle(dev_file); - return EIO; - } - - - disk_size = pdg.Cylinders.QuadPart * (ULONG)pdg.TracksPerCylinder * - (ULONG)pdg.SectorsPerTrack * (ULONG)pdg.BytesPerSector; - - _filedev.ph_bsize = pdg.BytesPerSector; - _filedev.ph_bcnt = disk_size / pdg.BytesPerSector; - - - return EOK; -} - -/******************************************************************************/ - -static int io_raw_bread(struct ext4_blockdev *bdev, void *buf, uint64_t blk_id, - uint32_t blk_cnt) -{ - long hipart = blk_id >> (32-9); - long lopart = blk_id << 9; - long err; - - SetLastError (0); - lopart = SetFilePointer (dev_file, lopart, &hipart, FILE_BEGIN); - - if (lopart == -1 && NO_ERROR != (err = GetLastError ())) - { - return EIO; - } - - DWORD n; - - if (!ReadFile (dev_file, buf, blk_cnt * 512, &n, NULL)) - { - err = GetLastError (); - return EIO; - } - return EOK; -} - -/******************************************************************************/ -static int io_raw_bwrite(struct ext4_blockdev *bdev, const void *buf, - uint64_t blk_id, uint32_t blk_cnt) -{ - long hipart = blk_id >> (32-9); - long lopart = blk_id << 9; - long err; - - SetLastError (0); - lopart = SetFilePointer (dev_file, lopart, &hipart, FILE_BEGIN); - - if (lopart == -1 && NO_ERROR != (err = GetLastError ())) - { - return EIO; - } - - DWORD n; - - if (!WriteFile (dev_file, buf, blk_cnt * 512, &n, NULL)) - { - err = GetLastError (); - return EIO; - } - return EOK; -} - -/******************************************************************************/ -static int io_raw_close(struct ext4_blockdev *bdev) -{ - CloseHandle(dev_file); - return EOK; -} - - -/******************************************************************************/ - -struct ext4_bcache* ext4_io_raw_cache_get(void) -{ - return &__cache; -} -/******************************************************************************/ -struct ext4_blockdev* ext4_io_raw_dev_get(void) -{ - return &_filedev; -} -/******************************************************************************/ -void ext4_io_raw_filename(const char *n) -{ - fname = n; -} - -/******************************************************************************/ -#endif - diff --git a/blockdev/io_raw/io_raw.h b/blockdev/io_raw/io_raw.h deleted file mode 100644 index cf097aa..0000000 --- a/blockdev/io_raw/io_raw.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2013 Grzegorz Kostka (kostka.grzegorz@gmail.com) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef IO_RAW_H_ -#define IO_RAW_H_ - -#include -#include - -#include -#include - - -/**@brief IO raw get.*/ -struct ext4_bcache* ext4_io_raw_cache_get(void); - -/**@brief IO raw blockdev get.*/ -struct ext4_blockdev* ext4_io_raw_dev_get(void); - -void ext4_io_raw_filename(const char *n); - -#endif /* IO_RAW_H_ */ -- cgit v1.2.3