Annotation of pgsql/src/port/copydir.c, revision 1.3
1.1 momjian 1: /*
2: * While "xcopy /e /i /q" works fine for copying directories, on Windows XP
3: * it requires an Window handle which prevents it from working when invoked
4: * as a service.
5: */
6:
7: #include "postgres.h"
8:
1.2 momjian 9: #undef mkdir /* no reason to use that macro because we ignore the 2nd arg */
10:
1.3 ! tgl 11: #include <dirent.h>
1.2 momjian 12:
13:
1.1 momjian 14: int
15: copydir(char *fromdir,char *todir)
16: {
17: DIR *xldir;
18: struct dirent *xlde;
19: char fromfl[MAXPGPATH];
20: char tofl[MAXPGPATH];
21:
22: if (mkdir(todir) != 0)
23: {
1.3 ! tgl 24: ereport(ERROR,
! 25: (errcode_for_file_access(),
! 26: errmsg("could not create directory \"%s\": %m", todir)));
1.1 momjian 27: return 1;
28: }
29: xldir = opendir(fromdir);
30: if (xldir == NULL)
31: {
1.3 ! tgl 32: ereport(ERROR,
! 33: (errcode_for_file_access(),
! 34: errmsg("could not open directory \"%s\": %m", fromdir)));
1.1 momjian 35: return 1;
36: }
37:
38: while ((xlde = readdir(xldir)) != NULL)
39: {
40: snprintf(fromfl, MAXPGPATH, "%s/%s", fromdir, xlde->d_name);
41: snprintf(tofl, MAXPGPATH, "%s/%s", todir, xlde->d_name);
42: if (CopyFile(fromfl,tofl,TRUE) < 0)
43: {
1.3 ! tgl 44: int save_errno = errno;
! 45:
1.1 momjian 46: closedir(xldir);
1.3 ! tgl 47: errno = save_errno;
! 48: ereport(ERROR,
! 49: (errcode_for_file_access(),
! 50: errmsg("could not copy file \"%s\": %m", fromfl)));
1.1 momjian 51: return 1;
52: }
53: }
54:
55: closedir(xldir);
56: return 0;
57: }
PostgreSQL CVSweb <[email protected]>