From 848e2942b073b9ae99546f3dc18a06156e97e091 Mon Sep 17 00:00:00 2001 From: John van Groningen Date: Thu, 2 Oct 2003 14:00:38 +0000 Subject: fix bug in inode and device numbers, if a new file is created and the file did not already exist --- ufileIO2.c | 46 ++++++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/ufileIO2.c b/ufileIO2.c index f08a567..66ec322 100644 --- a/ufileIO2.c +++ b/ufileIO2.c @@ -112,7 +112,7 @@ static char *clean_to_c_string (struct clean_string *cs) int n; if (!get_file_number_and_device_number (file_name,file_number_p,device_number_p)) - return -1; + return -2; for (n=FIRST_REAL_FILE; nfile_number=file_number; #ifdef GNU_C f->device_number=device_number; #else f->volume_number=volume_number; #endif - - fd=fopen (file_name_s,file_mode_string[file_mode]); - if (fd==NULL){ - free (file_name_s); - return -1; - } #ifdef LINUX { @@ -386,7 +393,7 @@ int close_file (long fn) int result; f=&file_table[fn]; - + if (f->file==NULL) IO_error ("FClose: File not open"); @@ -1035,14 +1042,8 @@ long open_s_file (struct clean_string *file_name,unsigned int file_mode) if (fn>=MAX_N_FILES) IO_error ("SFOpen: too many files"); } - f=&file_table[fn]; - f->file_number=file_number; -#ifdef GNU_C - f->device_number=device_number; -#else - f->volume_number=volume_number; -#endif + f=&file_table[fn]; fd=fopen (file_name_s,file_mode_string[file_mode]); if (fd==NULL){ @@ -1050,6 +1051,19 @@ long open_s_file (struct clean_string *file_name,unsigned int file_mode) return -1; } + if (existing_fn==-2) +#ifdef GNU_C + get_file_number_and_device_number (file_name_s,&file_number,&device_number); +#else + get_file_number_and_device_number (file_name_s,&file_number,&volume_number); +#endif + + f->file_number=file_number; +#ifdef GNU_C + f->device_number=device_number; +#else + f->volume_number=volume_number; +#endif #ifdef LINUX { -- cgit v1.2.3