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/error.h>
00020
00021 #include <fcntl.h>
00022
00023 #include <cerrno>
00024 #include <cstdlib>
00025 #include <cstring>
00026
00027
00028 namespace drizzled
00029 {
00030 namespace internal
00031 {
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 int my_open(const char *FileName, int Flags, myf MyFlags)
00047
00048
00049
00050 {
00051 int fd;
00052
00053 #if !defined(NO_OPEN_3)
00054 fd = open(FileName, Flags, my_umask);
00055 #else
00056 fd = open((char *) FileName, Flags);
00057 #endif
00058
00059 return(my_register_filename(fd, FileName, EE_FILENOTFOUND, MyFlags));
00060 }
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 int my_close(int fd, myf MyFlags)
00074 {
00075 int err;
00076
00077 do
00078 {
00079 err= close(fd);
00080 } while (err == -1 && errno == EINTR);
00081
00082 if (err)
00083 {
00084 errno=errno;
00085 if (MyFlags & (MY_FAE | MY_WME))
00086 my_error(EE_BADCLOSE, MYF(ME_BELL+ME_WAITTANG), "unknown", errno);
00087 }
00088
00089 return(err);
00090 }
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110 int my_register_filename(int fd, const char *FileName, uint32_t error_message_number, myf MyFlags)
00111 {
00112 if ((int) fd >= 0)
00113 {
00114 return fd;
00115 }
00116 else
00117 errno= errno;
00118
00119 if (MyFlags & (MY_FFNF | MY_FAE | MY_WME))
00120 {
00121 if (errno == EMFILE)
00122 error_message_number= EE_OUT_OF_FILERESOURCES;
00123 my_error(static_cast<drizzled::error_t>(error_message_number), MYF(ME_BELL+ME_WAITTANG),
00124 FileName, errno);
00125 }
00126 return -1;
00127 }
00128
00129 }
00130 }