summaryrefslogtreecommitdiff
path: root/mysys/my_fopen.c
diff options
context:
space:
mode:
Diffstat (limited to 'mysys/my_fopen.c')
-rw-r--r--mysys/my_fopen.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/mysys/my_fopen.c b/mysys/my_fopen.c
index 30424874aa0..e1575b0af48 100644
--- a/mysys/my_fopen.c
+++ b/mysys/my_fopen.c
@@ -95,7 +95,7 @@ int my_fclose(FILE *fd, myf MyFlags)
if ((uint) file < MY_NFILE && my_file_info[file].type != UNOPEN)
{
my_file_info[file].type = UNOPEN;
- my_free(my_file_info[file].name, MYF(0));
+ my_free(my_file_info[file].name, MYF(MY_ALLOW_ZERO_PTR));
}
pthread_mutex_unlock(&THR_LOCK_open);
DBUG_RETURN(err);
@@ -103,11 +103,9 @@ int my_fclose(FILE *fd, myf MyFlags)
/* Make a stream out of a file handle */
+ /* Name may be 0 */
-FILE *my_fdopen(File Filedes, int Flags, myf MyFlags)
-
- /* Read | write .. */
- /* Special flags */
+FILE *my_fdopen(File Filedes, const char *name, int Flags, myf MyFlags)
{
FILE *fd;
char type[5];
@@ -125,11 +123,18 @@ FILE *my_fdopen(File Filedes, int Flags, myf MyFlags)
else
{
pthread_mutex_lock(&THR_LOCK_open);
- if (my_file_info[Filedes].type != UNOPEN)
+ my_stream_opened++;
+ if (Filedes < MY_NFILE)
{
+ if (my_file_info[Filedes].type != UNOPEN)
+ {
+ my_file_opened--; /* File is opened with my_open ! */
+ }
+ else
+ {
+ my_file_info[Filedes].name= my_strdup(name,MyFlags);
+ }
my_file_info[Filedes].type = STREAM_BY_FDOPEN;
- my_file_opened--; /* File is opened with my_open ! */
- my_stream_opened++;
}
pthread_mutex_unlock(&THR_LOCK_open);
}