From 79a90bdad033e101c38bb3c3207c8f4be47a2de7 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Mon, 3 Nov 1997 19:16:55 +0000 Subject: [PATCH] ChangeLog, bitops.c, ext2fs.h, fileio.c: ext2fs.h: Make ext2fs_get_mem take an unsigned argument. fileio.c (ext2fs_file_get_size, ext2fs_file_set_size, ext2fs_file_get_fs): New functions added. bitops.c (ext2fs_warn_bitmap, ext2fs_warn_bitmap2): Don't call com_err if OMIT_COM_ERR is defined. --- lib/ext2fs/ChangeLog | 13 +++++++++++++ lib/ext2fs/bitops.c | 4 ++++ lib/ext2fs/ext2fs.h | 15 +++++++++------ lib/ext2fs/fileio.c | 48 ++++++++++++++++++++++++++++++++++++++++++++---- 4 files changed, 70 insertions(+), 10 deletions(-) diff --git a/lib/ext2fs/ChangeLog b/lib/ext2fs/ChangeLog index 60086a0..7b489b4 100644 --- a/lib/ext2fs/ChangeLog +++ b/lib/ext2fs/ChangeLog @@ -1,3 +1,16 @@ +Sun Nov 2 20:36:13 1997 Theodore Ts'o + + * ext2fs.h: Make ext2fs_get_mem take an unsigned argument. + + * fileio.c (ext2fs_file_get_size, ext2fs_file_set_size, + ext2fs_file_get_fs): New functions added. + + +Fri Oct 31 12:16:52 1997 + + * bitops.c (ext2fs_warn_bitmap, ext2fs_warn_bitmap2): Don't call + com_err if OMIT_COM_ERR is defined. + Thu Oct 30 11:33:57 1997 Theodore Ts'o * Rename new error codes to _ET_ in them for consistency. diff --git a/lib/ext2fs/bitops.c b/lib/ext2fs/bitops.c index 70f4f4c..7286e7d 100644 --- a/lib/ext2fs/bitops.c +++ b/lib/ext2fs/bitops.c @@ -70,19 +70,23 @@ int ext2fs_test_bit(int nr, const void * addr) void ext2fs_warn_bitmap(errcode_t errcode, unsigned long arg, const char *description) { +#ifndef OMIT_COM_ERR if (description) com_err(0, errcode, "#%u for %s", arg, description); else com_err(0, errcode, "#%u", arg); +#endif } void ext2fs_warn_bitmap2(ext2fs_generic_bitmap bitmap, int code, unsigned long arg) { +#ifndef OMIT_COM_ERR if (bitmap->description) com_err(0, bitmap->base_error_code+code, "#%u for %s", arg, bitmap->description); else com_err(0, bitmap->base_error_code + code, "#%u", arg); +#endif } diff --git a/lib/ext2fs/ext2fs.h b/lib/ext2fs/ext2fs.h index 41074b7..f9eb34e 100644 --- a/lib/ext2fs/ext2fs.h +++ b/lib/ext2fs/ext2fs.h @@ -580,13 +580,16 @@ extern errcode_t ext2fs_expand_dir(ext2_filsys fs, ino_t dir); /* fileio.c */ extern errcode_t ext2fs_file_open(ext2_filsys fs, ino_t ino, int flags, ext2_file_t *ret); +extern ext2_filsys ext2fs_file_get_fs(ext2_file_t file); extern errcode_t ext2fs_file_close(ext2_file_t file); extern errcode_t ext2fs_file_read(ext2_file_t file, void *buf, - int wanted, int *got); + unsigned int wanted, unsigned int *got); extern errcode_t ext2fs_file_write(ext2_file_t file, void *buf, - int nbytes, int *written); + unsigned int nbytes, unsigned int *written); extern errcode_t ext2fs_file_llseek(ext2_file_t file, ext2_off_t offset, int whence, ext2_off_t *ret_pos); +extern ext2_off_t ext2fs_file_get_size(ext2_file_t file); +extern errcode_t ext2fs_file_set_size(ext2_file_t file, ext2_off_t size); /* freefs.c */ extern void ext2fs_free(ext2_filsys fs); @@ -721,9 +724,9 @@ extern int ext2fs_get_library_version(const char **ver_string, const char **date_string); /* inline functions */ -extern errcode_t ext2fs_get_mem(long size, void **ptr); +extern errcode_t ext2fs_get_mem(unsigned long size, void **ptr); extern errcode_t ext2fs_free_mem(void **ptr); -extern errcode_t ext2fs_resize_mem(long size, void **ptr); +extern errcode_t ext2fs_resize_mem(unsigned long size, void **ptr); extern void ext2fs_mark_super_dirty(ext2_filsys fs); extern void ext2fs_mark_changed(ext2_filsys fs); extern int ext2fs_test_changed(ext2_filsys fs); @@ -754,7 +757,7 @@ extern int ext2fs_group_of_ino(ext2_filsys fs, ino_t ino); /* * Allocate memory */ -_INLINE_ errcode_t ext2fs_get_mem(long size, void **ptr) +_INLINE_ errcode_t ext2fs_get_mem(unsigned long size, void **ptr) { *ptr = malloc(size); if (!*ptr) @@ -775,7 +778,7 @@ _INLINE_ errcode_t ext2fs_free_mem(void **ptr) /* * Resize memory */ -_INLINE_ errcode_t ext2fs_resize_mem(long size, void **ptr) +_INLINE_ errcode_t ext2fs_resize_mem(unsigned long size, void **ptr) { void *p; diff --git a/lib/ext2fs/fileio.c b/lib/ext2fs/fileio.c index ffb11ef..4f34fde 100644 --- a/lib/ext2fs/fileio.c +++ b/lib/ext2fs/fileio.c @@ -78,6 +78,16 @@ fail: } /* + * This function returns the filesystem handle of a file from the structure + */ +ext2_filsys ext2fs_file_get_fs(ext2_file_t file) +{ + if (file->magic != EXT2_ET_MAGIC_EXT2_FILE) + return 0; + return file->fs; +} + +/* * This function flushes the dirty block buffer out to disk if * necessary. */ @@ -130,12 +140,12 @@ errcode_t ext2fs_file_close(ext2_file_t file) errcode_t ext2fs_file_read(ext2_file_t file, void *buf, - int wanted, int *got) + unsigned int wanted, unsigned int *got) { ext2_filsys fs; errcode_t retval; blk_t b, pb; - int start, left, c, count = 0; + unsigned int start, left, c, count = 0; char *ptr = buf; EXT2_CHECK_MAGIC(file, EXT2_ET_MAGIC_EXT2_FILE); @@ -200,12 +210,12 @@ fail: errcode_t ext2fs_file_write(ext2_file_t file, void *buf, - int nbytes, int *written) + unsigned int nbytes, unsigned int *written) { ext2_filsys fs; errcode_t retval; blk_t b, pb; - int start, c, count = 0; + unsigned int start, c, count = 0; char *ptr = buf; EXT2_CHECK_MAGIC(file, EXT2_ET_MAGIC_EXT2_FILE); @@ -282,4 +292,34 @@ errcode_t ext2fs_file_llseek(ext2_file_t file, ext2_off_t offset, return 0; } +/* + * This function returns the size of the file, according to the inode + */ +ext2_off_t ext2fs_file_get_size(ext2_file_t file) +{ + if (file->magic != EXT2_ET_MAGIC_EXT2_FILE) + return 0; + return file->inode.i_size; +} +/* + * This function sets the size of the file, truncating it if necessary + * + * XXX still need to call truncate + */ +extern errcode_t ext2fs_file_set_size(ext2_file_t file, ext2_off_t size) +{ + errcode_t retval; + EXT2_CHECK_MAGIC(file, EXT2_ET_MAGIC_EXT2_FILE); + + file->inode.i_size = size; + retval = ext2fs_write_inode(file->fs, file->ino, &file->inode); + if (retval) + return retval; + + /* + * XXX truncate inode if necessary + */ + + return 0; +} -- 1.8.3.1