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