mf_tempdir.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include "mysys_priv.h"
  14. #include <m_string.h>
  15. #if defined( __WIN__) || defined(OS2) || defined(__NETWARE__)
  16. #define DELIM ';'
  17. #else
  18. #define DELIM ':'
  19. #endif
  20. my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist)
  21. {
  22.   char *end, *copy;
  23.   char buff[FN_REFLEN];
  24.   DYNAMIC_ARRAY t_arr;
  25.   pthread_mutex_init(&tmpdir->mutex, MY_MUTEX_INIT_FAST);
  26.   if (my_init_dynamic_array(&t_arr, sizeof(char*), 1, 5))
  27.     return TRUE;
  28.   if (!pathlist || !pathlist[0])
  29.   {
  30.     /* Get default temporary directory */
  31.     pathlist=getenv("TMPDIR"); /* Use this if possible */
  32. #if defined( __WIN__) || defined(OS2) || defined(__NETWARE__)
  33.     if (!pathlist)
  34.       pathlist=getenv("TEMP");
  35.     if (!pathlist)
  36.       pathlist=getenv("TMP");
  37. #endif
  38.     if (!pathlist || !pathlist[0])
  39.       pathlist=(char*) P_tmpdir;
  40.   }
  41.   do
  42.   {
  43.     end=strcend(pathlist, DELIM);
  44.     convert_dirname(buff, pathlist, end);
  45.     if (!(copy=my_strdup(buff, MYF(MY_WME))))
  46.       return TRUE;
  47.     if (insert_dynamic(&t_arr, (gptr)&copy))
  48.       return TRUE;
  49.     pathlist=end+1;
  50.   }
  51.   while (*end);
  52.   freeze_size(&t_arr);
  53.   tmpdir->list=(char **)t_arr.buffer;
  54.   tmpdir->max=t_arr.elements-1;
  55.   tmpdir->cur=0;
  56.   return FALSE;
  57. }
  58. char *my_tmpdir(MY_TMPDIR *tmpdir)
  59. {
  60.   char *dir;
  61.   pthread_mutex_lock(&tmpdir->mutex);
  62.   dir=tmpdir->list[tmpdir->cur];
  63.   tmpdir->cur= (tmpdir->cur == tmpdir->max) ? 0 : tmpdir->cur+1;
  64.   pthread_mutex_unlock(&tmpdir->mutex);
  65.   return dir;
  66. }
  67. void free_tmpdir(MY_TMPDIR *tmpdir)
  68. {
  69.   uint i;
  70.   for (i=0; i<=tmpdir->max; i++)
  71.     my_free(tmpdir->list[i], MYF(0));
  72.   my_free((gptr)tmpdir->list, MYF(0));
  73.   pthread_mutex_destroy(&tmpdir->mutex);
  74. }