From 78d211b3bd61468aa53e3e0b2330b27211c76b02 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 23 Nov 2009 15:58:25 +0100 Subject: [PATCH] server: Move the functions to extend file to mapping.c since it's the only user. --- server/file.c | 42 ------------------------------------------ server/file.h | 1 - server/mapping.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 43 deletions(-) diff --git a/server/file.c b/server/file.c index a74de140f87..01fefdbe54d 100644 --- a/server/file.c +++ b/server/file.c @@ -641,48 +641,6 @@ struct file *grab_file_unless_removable( struct file *file ) return (struct file *)grab_object( file ); } -/* extend a file beyond the current end of file */ -static int extend_file( struct file *file, file_pos_t new_size ) -{ - static const char zero; - int unix_fd = get_file_unix_fd( file ); - off_t size = new_size; - - if (unix_fd == -1) return 0; - - if (sizeof(new_size) > sizeof(size) && size != new_size) - { - set_error( STATUS_INVALID_PARAMETER ); - return 0; - } - /* extend the file one byte beyond the requested size and then truncate it */ - /* this should work around ftruncate implementations that can't extend files */ - if (pwrite( unix_fd, &zero, 1, size ) != -1) - { - ftruncate( unix_fd, size ); - return 1; - } - file_set_error(); - return 0; -} - -/* try to grow the file to the specified size */ -int grow_file( struct file *file, file_pos_t size ) -{ - struct stat st; - int unix_fd = get_file_unix_fd( file ); - - if (unix_fd == -1) return 0; - - if (fstat( unix_fd, &st ) == -1) - { - file_set_error(); - return 0; - } - if (st.st_size >= size) return 1; /* already large enough */ - return extend_file( file, size ); -} - /* create a file */ DECL_HANDLER(create_file) { diff --git a/server/file.h b/server/file.h index f59ec9e4175..21b3879881a 100644 --- a/server/file.h +++ b/server/file.h @@ -110,7 +110,6 @@ extern struct file *get_file_obj( struct process *process, obj_handle_t handle, extern int get_file_unix_fd( struct file *file ); extern int is_same_file( struct file *file1, struct file *file2 ); extern struct file *grab_file_unless_removable( struct file *file ); -extern int grow_file( struct file *file, file_pos_t size ); extern struct file *create_temp_file( int access ); extern void file_set_error(void); extern struct security_descriptor *mode_to_sd( mode_t mode, const SID *user, const SID *group ); diff --git a/server/mapping.c b/server/mapping.c index a3031118bad..39c7f501d67 100644 --- a/server/mapping.c +++ b/server/mapping.c @@ -126,6 +126,48 @@ static void init_page_size(void) #define ROUND_SIZE(size) (((size) + page_mask) & ~page_mask) +/* extend a file beyond the current end of file */ +static int extend_file( struct file *file, file_pos_t new_size ) +{ + static const char zero; + int unix_fd = get_file_unix_fd( file ); + off_t size = new_size; + + if (unix_fd == -1) return 0; + + if (sizeof(new_size) > sizeof(size) && size != new_size) + { + set_error( STATUS_INVALID_PARAMETER ); + return 0; + } + /* extend the file one byte beyond the requested size and then truncate it */ + /* this should work around ftruncate implementations that can't extend files */ + if (pwrite( unix_fd, &zero, 1, size ) != -1) + { + ftruncate( unix_fd, size ); + return 1; + } + file_set_error(); + return 0; +} + +/* try to grow the file to the specified size */ +static int grow_file( struct file *file, file_pos_t size ) +{ + struct stat st; + int unix_fd = get_file_unix_fd( file ); + + if (unix_fd == -1) return 0; + + if (fstat( unix_fd, &st ) == -1) + { + file_set_error(); + return 0; + } + if (st.st_size >= size) return 1; /* already large enough */ + return extend_file( file, size ); +} + /* find the shared PE mapping for a given mapping */ static struct file *get_shared_file( struct mapping *mapping ) { -- 2.11.4.GIT