block.c (109511) | block.c (109766) |
---|---|
1/* 2 * Copyright (c) 2002 Juli Mallett. All rights reserved. 3 * 4 * This software was written by Juli Mallett <jmallett@FreeBSD.org> for the 5 * FreeBSD project. Redistribution and use in source and binary forms, with 6 * or without modification, are permitted provided that the following 7 * conditions are met: 8 * --- 12 unchanged lines hidden (view full) --- 21 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 23 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 24 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28#include <sys/cdefs.h> | 1/* 2 * Copyright (c) 2002 Juli Mallett. All rights reserved. 3 * 4 * This software was written by Juli Mallett <jmallett@FreeBSD.org> for the 5 * FreeBSD project. Redistribution and use in source and binary forms, with 6 * or without modification, are permitted provided that the following 7 * conditions are met: 8 * --- 12 unchanged lines hidden (view full) --- 21 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 23 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 24 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28#include <sys/cdefs.h> |
29__FBSDID("$FreeBSD: head/lib/libufs/block.c 109511 2003-01-19 01:39:53Z jmallett $"); | 29__FBSDID("$FreeBSD: head/lib/libufs/block.c 109766 2003-01-23 23:58:22Z jmallett $"); |
30 31#include <sys/param.h> 32#include <sys/mount.h> 33#include <sys/disklabel.h> 34#include <sys/stat.h> 35 36#include <ufs/ufs/ufsmount.h> 37#include <ufs/ufs/dinode.h> 38#include <ufs/ffs/fs.h> 39 40#include <errno.h> | 30 31#include <sys/param.h> 32#include <sys/mount.h> 33#include <sys/disklabel.h> 34#include <sys/stat.h> 35 36#include <ufs/ufs/ufsmount.h> 37#include <ufs/ufs/dinode.h> 38#include <ufs/ffs/fs.h> 39 40#include <errno.h> |
41#include <fcntl.h> |
|
41#include <stdio.h> 42#include <string.h> 43#include <unistd.h> 44 45#include <libufs.h> 46 47ssize_t 48bread(struct uufsd *disk, ufs2_daddr_t blockno, void *data, size_t size) --- 20 unchanged lines hidden (view full) --- 69 } 70 return cnt; 71} 72 73ssize_t 74bwrite(struct uufsd *disk, ufs2_daddr_t blockno, const void *data, size_t size) 75{ 76 ssize_t cnt; | 42#include <stdio.h> 43#include <string.h> 44#include <unistd.h> 45 46#include <libufs.h> 47 48ssize_t 49bread(struct uufsd *disk, ufs2_daddr_t blockno, void *data, size_t size) --- 20 unchanged lines hidden (view full) --- 70 } 71 return cnt; 72} 73 74ssize_t 75bwrite(struct uufsd *disk, ufs2_daddr_t blockno, const void *data, size_t size) 76{ 77 ssize_t cnt; |
78 int rofd; |
|
77 78 ERROR(disk, NULL); 79 | 79 80 ERROR(disk, NULL); 81 |
82 rofd = disk->d_fd; 83 84 disk->d_fd = open(disk->d_name, O_WRONLY); 85 if (disk->d_fd < 0) { 86 ERROR(disk, "failed to open disk for writing"); 87 return -1; 88 } 89 |
|
80 cnt = pwrite(disk->d_fd, data, size, (off_t)(blockno * disk->d_bsize)); 81 if (cnt != size) { 82 ERROR(disk, "short write to block device"); 83 return -1; 84 } | 90 cnt = pwrite(disk->d_fd, data, size, (off_t)(blockno * disk->d_bsize)); 91 if (cnt != size) { 92 ERROR(disk, "short write to block device"); 93 return -1; 94 } |
95 96 close(disk->d_fd); 97 disk->d_fd = rofd; |
|
85 86 return cnt; 87} | 98 99 return cnt; 100} |