00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <config.h>
00019
00020 #include <drizzled/internal/my_sys.h>
00021 #include <drizzled/internal/m_string.h>
00022 #include <drizzled/internal/my_static.h>
00023 #include <drizzled/internal/iocache.h>
00024 #include <drizzled/error.h>
00025
00026 namespace drizzled
00027 {
00028 namespace internal
00029 {
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 bool st_io_cache::open_cached_file(const char *dir_arg, const char *prefix_arg,
00040 size_t cache_size_arg, myf cache_myflags)
00041 {
00042 dir= dir_arg ? strdup(dir_arg) : (char*) 0;
00043 prefix= (prefix_arg ? strdup(prefix_arg) : (char*) 0);
00044
00045 if ((dir == NULL) || (prefix == NULL))
00046 return true;
00047
00048 file_name= 0;
00049 buffer= 0;
00050 if (not init_io_cache(-1, cache_size_arg,WRITE_CACHE,0L,0, MYF(cache_myflags | MY_NABP)))
00051 {
00052 return false;
00053 }
00054 free(dir);
00055 free(prefix);
00056
00057 return true;
00058 }
00059
00060
00061
00062 bool st_io_cache::real_open_cached_file()
00063 {
00064 char name_buff[FN_REFLEN];
00065
00066 if ((file= create_temp_file(name_buff, dir, prefix, MYF(MY_WME))) >= 0)
00067 {
00068 my_delete(name_buff,MYF(MY_WME | ME_NOINPUT));
00069 return false;
00070 }
00071
00072 return true;
00073 }
00074
00075
00076 void st_io_cache::close_cached_file()
00077 {
00078 if (my_b_inited(this))
00079 {
00080 int _file= file;
00081 file= -1;
00082 (void) end_io_cache();
00083 if (_file >= 0)
00084 {
00085 (void) my_close(_file, MYF(0));
00086 #ifdef CANT_DELETE_OPEN_FILES
00087 if (file_name)
00088 {
00089 (void) my_delete(file_name, MYF(MY_WME | ME_NOINPUT));
00090 free(file_name);
00091 }
00092 #endif
00093 }
00094 free(dir);
00095 free(prefix);
00096 }
00097 }
00098
00099 }
00100 }