~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
/* Copyright (C) 2000 MySQL AB
2
3
   This program is free software; you can redistribute it and/or modify
4
   it under the terms of the GNU General Public License as published by
5
   the Free Software Foundation; version 2 of the License.
6
7
   This program is distributed in the hope that it will be useful,
8
   but WITHOUT ANY WARRANTY; without even the implied warranty of
9
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
   GNU General Public License for more details.
11
12
   You should have received a copy of the GNU General Public License
13
   along with this program; if not, write to the Free Software
14
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
15
16
#include "mysys_priv.h"
17
#include <my_dir.h>
18
#include <m_string.h>
19
#include "mysys_err.h"
20
#if defined(HAVE_UTIME_H)
21
#include <utime.h>
22
#elif defined(HAVE_SYS_UTIME_H)
23
#include <sys/utime.h>
24
#elif !defined(HPUX10)
25
struct utimbuf {
26
  time_t actime;
27
  time_t modtime;
28
};
29
#endif
30
31
	/*
32
	  Rename with copy stat form old file
33
	  Copy stats from old file to new file, deletes orginal and
34
	  changes new file name to old file name
35
36
	  if MY_REDEL_MAKE_COPY is given, then the orginal file
37
	  is renamed to org_name-'current_time'.BAK
38
	*/
39
40
#define REDEL_EXT ".BAK"
41
42
int my_redel(const char *org_name, const char *tmp_name, myf MyFlags)
43
{
44
  int error=1;
45
46
  if (my_copystat(org_name,tmp_name,MyFlags) < 0)
47
    goto end;
48
  if (MyFlags & MY_REDEL_MAKE_BACKUP)
49
  {
50
    char name_buff[FN_REFLEN+20];    
51
    char ext[20];
52
    ext[0]='-';
53
    get_date(ext+1,2+4,(time_t) 0);
54
    strmov(strend(ext),REDEL_EXT);
55
    if (my_rename(org_name, fn_format(name_buff, org_name, "", ext, 2),
56
		  MyFlags))
57
      goto end;
58
  }
59
  else if (my_delete_allow_opened(org_name, MyFlags))
60
      goto end;
61
  if (my_rename(tmp_name,org_name,MyFlags))
62
    goto end;
63
64
  error=0;
65
end:
51.3.18 by Jay Pipes
Phase 5 - Remove DBUG from mysys
66
  return(error);
1 by brian
clean slate
67
} /* my_redel */
68
69
70
	/* Copy stat from one file to another */
71
	/* Return -1 if can't get stat, 1 if wrong type of file */
72
73
int my_copystat(const char *from, const char *to, int MyFlags)
74
{
75
  struct stat statbuf;
76
77
  if (stat((char*) from, &statbuf))
78
  {
79
    my_errno=errno;
80
    if (MyFlags & (MY_FAE+MY_WME))
81
      my_error(EE_STAT, MYF(ME_BELL+ME_WAITTANG),from,errno);
82
    return -1;				/* Can't get stat on input file */
83
  }
84
  if ((statbuf.st_mode & S_IFMT) != S_IFREG)
85
    return 1;
86
  VOID(chmod(to, statbuf.st_mode & 07777));		/* Copy modes */
87
88
  if (statbuf.st_nlink > 1 && MyFlags & MY_LINK_WARNING)
89
  {
90
    if (MyFlags & MY_LINK_WARNING)
91
      my_error(EE_LINK_WARNING,MYF(ME_BELL+ME_WAITTANG),from,statbuf.st_nlink);
92
  }
93
  VOID(chown(to, statbuf.st_uid, statbuf.st_gid));	/* Copy ownership */
94
95
#ifndef __ZTC__
96
  if (MyFlags & MY_COPYTIME)
97
  {
98
    struct utimbuf timep;
99
    timep.actime  = statbuf.st_atime;
100
    timep.modtime = statbuf.st_mtime;
101
    VOID(utime((char*) to, &timep));/* Update last accessed and modified times */
102
  }
103
#else
104
  if (MyFlags & MY_COPYTIME)
105
  {
106
    time_t time[2];
107
    time[0]= statbuf.st_atime;
108
    time[1]= statbuf.st_mtime;
109
    VOID(utime((char*) to, time));/* Update last accessed and modified times */
110
  }
111
#endif
112
  return 0;
113
} /* my_copystat */