mariadb/mysys/my_write.c
unknown f7d0dfd9e8 Changed %lx -> 0x%lx (for easier comparison of debug files)
Cosmetic cleanups
Don't call 'delete_elements' on copy_funcs as this causes elements to be freed twice


mysys/hash.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/list.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/mf_iocache.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/mf_keycache.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
  Changed debug messages to be more consistent with other mysys files.
mysys/mf_keycaches.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/my_alloc.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/my_fopen.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/my_fstream.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/my_getwd.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/my_lib.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/my_lwrite.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/my_malloc.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/my_pread.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/my_read.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/my_realloc.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/my_write.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/safemalloc.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/thr_alarm.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/thr_lock.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/thr_mutex.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/tree.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
mysys/typelib.c:
  Changed %lx -> 0x%lx (for easier comparison of debug files)
sql/examples/ha_archive.cc:
  Changed to return error number for some functions (instead of -1)
  Updated function comments & some other minor cleanups
  Ensure that free_share() and gzclose() are always called
  Use 'TRUE' and 'FALSE' instead of 'true' and 'false'
  Removed some compiler warnings
sql/examples/ha_archive.h:
  Fixed to use new prototypes for records_in_range
sql/sql_select.cc:
  Don't call 'delete_elements' on copy_funcs
2004-08-23 13:46:51 +03:00

89 lines
2.7 KiB
C

/* Copyright (C) 2000 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include "mysys_priv.h"
#include "mysys_err.h"
#include <errno.h>
/* Write a chunk of bytes to a file */
uint my_write(int Filedes, const byte *Buffer, uint Count, myf MyFlags)
{
uint writenbytes,errors;
ulong written;
DBUG_ENTER("my_write");
DBUG_PRINT("my",("Fd: %d Buffer: 0x%lx Count: %d MyFlags: %d",
Filedes, Buffer, Count, MyFlags));
errors=0; written=0L;
for (;;)
{
if ((writenbytes = (uint) write(Filedes, Buffer, Count)) == Count)
break;
if ((int) writenbytes != -1)
{ /* Safeguard */
written+=writenbytes;
Buffer+=writenbytes;
Count-=writenbytes;
}
my_errno=errno;
DBUG_PRINT("error",("Write only %d bytes, error: %d",
writenbytes,my_errno));
#ifndef NO_BACKGROUND
#ifdef THREAD
if (my_thread_var->abort)
MyFlags&= ~ MY_WAIT_IF_FULL; /* End if aborted by user */
#endif
if (my_errno == ENOSPC && (MyFlags & MY_WAIT_IF_FULL) &&
(uint) writenbytes != (uint) -1)
{
if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
my_filename(Filedes));
VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
continue;
}
if (!writenbytes)
{
/* We may come here on an interrupt or if the file quote is exeeded */
if (my_errno == EINTR)
continue;
if (!errors++) /* Retry once */
{
errno=EFBIG; /* Assume this is the error */
continue;
}
}
else if ((uint) writenbytes != (uint) -1)
continue; /* Retry */
#endif
if (MyFlags & (MY_NABP | MY_FNABP))
{
if (MyFlags & (MY_WME | MY_FAE | MY_FNABP))
{
my_error(EE_WRITE, MYF(ME_BELL+ME_WAITTANG),
my_filename(Filedes),my_errno);
}
DBUG_RETURN(MY_FILE_ERROR); /* Error on read */
}
else
break; /* Return bytes written */
}
if (MyFlags & (MY_NABP | MY_FNABP))
DBUG_RETURN(0); /* Want only errors */
DBUG_RETURN(writenbytes+written);
} /* my_write */