extern const char *szAppName;
extern DWORD mainthreadId;
-// Main UPS server routine
+// Main Bacula server routine
extern int BaculaAppMain();
extern void LogErrorMsg(char *msg);
attribsEx[0] = 0; /* no extended attributes */
+ unix_name_to_win32(&ff_pkt->sys_fname, ff_pkt->fname);
+
// try unicode version
if (p_GetFileAttributesExW) {
- unix_name_to_win32(&ff_pkt->sys_fname, ff_pkt->fname);
-
POOLMEM* pwszBuf = get_pool_memory (PM_FNAME);
- UTF8_2_wchar(&pwszBuf, ff_pkt->sys_fname);
+ make_win32_path_UTF8_2_wchar(&pwszBuf, ff_pkt->fname);
BOOL b=p_GetFileAttributesExW((LPCWSTR) pwszBuf, GetFileExInfoStandard, (LPVOID)&atts);
free_pool_memory(pwszBuf);
}
else {
if (!p_GetFileAttributesExA)
- return STREAM_UNIX_ATTRIBUTES;
-
- unix_name_to_win32(&ff_pkt->sys_fname, ff_pkt->fname);
+ return STREAM_UNIX_ATTRIBUTES;
if (!p_GetFileAttributesExA(ff_pkt->sys_fname, GetFileExInfoStandard,
(LPVOID)&atts)) {
win32_ofile = get_pool_memory(PM_FNAME);
unix_name_to_win32(&win32_ofile, attr->ofname);
-
-
/* At this point, we have reconstructed the WIN32_FILE_ATTRIBUTE_DATA pkt */
if (!is_bopen(ofd)) {
{
if (p_SetFileAttributesW) {
POOLMEM* pwszBuf = get_pool_memory (PM_FNAME);
- UTF8_2_wchar(&pwszBuf, win32_ofile);
+ make_win32_path_UTF8_2_wchar(&pwszBuf, attr->ofname);
BOOL b=p_SetFileAttributesW((LPCWSTR)pwszBuf, atts.dwFileAttributes & SET_ATTRS);
free_pool_memory(pwszBuf);
return 0;
if (p_CreateFileW && p_MultiByteToWideChar)
- UTF8_2_wchar(&win32_fname_wchar, win32_fname);
+ make_win32_path_UTF8_2_wchar(&win32_fname_wchar, fname);
if (flags & O_CREAT) { /* Create */
if (bfd->use_backup_api) {
Qmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid);
bclose(bfd);
}
+
+
+ if ((bopen(bfd, attr->ofname, mode, S_IRUSR | S_IWUSR)) < 0) {
+ berrno be;
+ be.set_errno(bfd->berrno);
+ Qmsg2(jcr, M_ERROR, 0, _("Could not create %s: ERR=%s\n"),
+ attr->ofname, be.strerror());
+ return CF_ERROR;
+ }
+
+ /* this doesn't solve the Microsoft problem - Thorsten Engel
+ so I reused the code of V 1.40
/*
* If the open fails, we attempt to cd into the directory
* and create the file with a relative path rather than
* the full absolute path. This is for Win32 where
* path names may be too long to create.
*/
+ /*
if ((bopen(bfd, attr->ofname, mode, S_IRUSR | S_IWUSR)) < 0) {
berrno be;
int stat;
Dmsg2(000, "bopen failed errno=%d: ERR=%s\n", bfd->berrno,
- be.strerror(bfd->berrno));
- if (strlen(attr->ofname) > 250) { /* Microsoft limitation */
+ be.strerror(bfd->berrno));
+ if (strlen(attr->ofname) > 250) { // Microsoft limitation
char savechr;
char *p, *e;
struct saved_cwd cwd;
savechr = attr->ofname[pnl];
- attr->ofname[pnl] = 0; /* terminate path */
+ attr->ofname[pnl] = 0; // terminate path
Dmsg1(000, "Do chdir %s\n", attr->ofname);
if (save_cwd(&cwd) != 0) {
Qmsg0(jcr, M_ERROR, 0, _("Could not save_dirn"));
}
Qmsg2(jcr, M_ERROR, 0, _("Could not create %s: ERR=%s\n"),
attr->ofname, be.strerror(bfd->berrno));
- return CF_ERROR;
- }
+ return CF_ERROR;
+ }*/
return CF_EXTRACT;
#ifndef HAVE_WIN32 // none of these exists on MS Windows
case FT_RAW: /* Bacula raw device e.g. /dev/sda1 */
int wchar_2_UTF8(char *pszUTF, const WCHAR *pszUCS, int cchChar = MAX_PATH_UTF8);
int UTF8_2_wchar(POOLMEM **pszUCS, const char *pszUTF);
-
+int make_win32_path_UTF8_2_wchar(POOLMEM **pszUCS, const char *pszUTF, BOOL* pBIsRawPath = NULL);
/* In ADVAPI32.DLL */