00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <config.h>
00017
00018 #include <drizzled/internal/my_sys.h>
00019 #include <drizzled/internal/thread_var.h>
00020 #include <drizzled/error.h>
00021 #include <cerrno>
00022
00023 namespace drizzled
00024 {
00025 namespace internal
00026 {
00027
00028
00029
00030 size_t my_write(int Filedes, const unsigned char *Buffer, size_t Count, myf MyFlags)
00031 {
00032 size_t writenbytes, written;
00033 written=0;
00034
00035
00036 if (unlikely(!Count))
00037 return 0;
00038
00039 for (;;)
00040 {
00041 if ((writenbytes= write(Filedes, Buffer, Count)) == Count)
00042 break;
00043 if (writenbytes != (size_t) -1)
00044 {
00045 written+=writenbytes;
00046 Buffer+=writenbytes;
00047 Count-=writenbytes;
00048 }
00049 errno=errno;
00050 if (MyFlags & (MY_NABP | MY_FNABP))
00051 {
00052 if (MyFlags & (MY_WME | MY_FAE | MY_FNABP))
00053 {
00054 my_error(EE_WRITE, MYF(ME_BELL+ME_WAITTANG),
00055 "unknown", errno);
00056 }
00057 return(MY_FILE_ERROR);
00058 }
00059 else
00060 break;
00061 }
00062 if (MyFlags & (MY_NABP | MY_FNABP))
00063 return 0;
00064 return(writenbytes+written);
00065 }
00066
00067 }
00068 }