diff options
| author | Juli Mallett <jmallett@FreeBSD.org> | 2003-01-23 23:58:22 +0000 |
|---|---|---|
| committer | Juli Mallett <jmallett@FreeBSD.org> | 2003-01-23 23:58:22 +0000 |
| commit | 3ff1f264e99d01b87dc9816c4432e8ab48bfb1d0 (patch) | |
| tree | 4e162ee2af7bd49387fb9d2d0c27944184996015 /lib | |
| parent | 4abe79362a044e1dd567688d3dc274236783dc6d (diff) | |
Notes
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/libufs/block.c | 13 | ||||
| -rw-r--r-- | lib/libufs/sblock.c | 11 |
2 files changed, 14 insertions, 10 deletions
diff --git a/lib/libufs/block.c b/lib/libufs/block.c index 234991a62363e..2b06dbfb4efc9 100644 --- a/lib/libufs/block.c +++ b/lib/libufs/block.c @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$"); #include <ufs/ffs/fs.h> #include <errno.h> +#include <fcntl.h> #include <stdio.h> #include <string.h> #include <unistd.h> @@ -74,14 +75,26 @@ ssize_t bwrite(struct uufsd *disk, ufs2_daddr_t blockno, const void *data, size_t size) { ssize_t cnt; + int rofd; ERROR(disk, NULL); + rofd = disk->d_fd; + + disk->d_fd = open(disk->d_name, O_WRONLY); + if (disk->d_fd < 0) { + ERROR(disk, "failed to open disk for writing"); + return -1; + } + cnt = pwrite(disk->d_fd, data, size, (off_t)(blockno * disk->d_bsize)); if (cnt != size) { ERROR(disk, "short write to block device"); return -1; } + + close(disk->d_fd); + disk->d_fd = rofd; return cnt; } diff --git a/lib/libufs/sblock.c b/lib/libufs/sblock.c index ef6c9de8311de..d769edb291420 100644 --- a/lib/libufs/sblock.c +++ b/lib/libufs/sblock.c @@ -38,7 +38,6 @@ __FBSDID("$FreeBSD$"); #include <ufs/ffs/fs.h> #include <errno.h> -#include <fcntl.h> #include <stdio.h> #include <string.h> #include <unistd.h> @@ -94,18 +93,12 @@ int sbwrite(struct uufsd *disk, int all) { struct fs *fs; - int i, rofd; + int i; ERROR(disk, NULL); fs = &disk->d_fs; - rofd = disk->d_fd; - disk->d_fd = open(disk->d_name, O_WRONLY); - if (disk->d_fd < 0) { - ERROR(disk, "failed to open disk"); - return -1; - } if (bwrite(disk, disk->d_sblock, fs, SBLOCKSIZE) == -1) { ERROR(disk, "failed to write superblock"); return -1; @@ -118,7 +111,5 @@ sbwrite(struct uufsd *disk, int all) return -1; } } - close(disk->d_fd); - disk->d_fd = rofd; return 0; } |
