120 lines
3.0 KiB
C
120 lines
3.0 KiB
C
|
/****************************************************************
|
||
|
* *
|
||
|
* Copyright 2001, 2011 Fidelity Information Services, Inc *
|
||
|
* *
|
||
|
* This source code contains the intellectual property *
|
||
|
* of its copyright holder(s), and is made available *
|
||
|
* under a license. If you do not know the terms of *
|
||
|
* the license, please stop and do not read further. *
|
||
|
* *
|
||
|
****************************************************************/
|
||
|
|
||
|
#include "mdef.h"
|
||
|
|
||
|
#include <errno.h>
|
||
|
#include "gtm_stat.h"
|
||
|
#include "gtm_string.h"
|
||
|
|
||
|
#include "gdsroot.h"
|
||
|
#include "gtm_facility.h"
|
||
|
#include "fileinfo.h"
|
||
|
#include "gdsbt.h"
|
||
|
#include "iosp.h"
|
||
|
#include "gdsfhead.h"
|
||
|
#include "filestruct.h"
|
||
|
#include "mupipbckup.h"
|
||
|
#include "gdscc.h"
|
||
|
#include "gdskill.h"
|
||
|
#include "jnl.h"
|
||
|
#include "buddy_list.h"
|
||
|
#include "hashtab_int4.h" /* needed for tp.h */
|
||
|
#include "tp.h"
|
||
|
#include "eintr_wrappers.h"
|
||
|
#include "util.h"
|
||
|
#include "gtm_caseconv.h"
|
||
|
#include "mupip_exit.h"
|
||
|
|
||
|
GBLREF mstr directory;
|
||
|
GBLREF bool is_directory;
|
||
|
GBLREF bool error_mupip;
|
||
|
GBLREF backup_reg_list *mu_repl_inst_reg_list;
|
||
|
|
||
|
bool mubgetfil(backup_reg_list *list, char *name, unsigned short len)
|
||
|
{
|
||
|
struct stat stat_buf;
|
||
|
int stat_res;
|
||
|
char temp;
|
||
|
char tcp[5];
|
||
|
|
||
|
if (0 == len)
|
||
|
return FALSE;
|
||
|
if (list != mu_repl_inst_reg_list)
|
||
|
{ /* Do the following checks only if this region does NOT correspond to the replication instance region. */
|
||
|
if ('|' == *name)
|
||
|
{
|
||
|
len -= 1;
|
||
|
list->backup_to = backup_to_exec;
|
||
|
list->backup_file.len = len;
|
||
|
list->backup_file.addr = (char *)malloc(len + 1);
|
||
|
memcpy(list->backup_file.addr, name + 1, len);
|
||
|
return TRUE;
|
||
|
}
|
||
|
if (len > 5)
|
||
|
{
|
||
|
lower_to_upper((uchar_ptr_t)tcp, (uchar_ptr_t)name, 5);
|
||
|
if (0 == memcmp(tcp, "TCP:/", 5))
|
||
|
{
|
||
|
list->backup_to = backup_to_tcp;
|
||
|
len -= 5;
|
||
|
name += 5;
|
||
|
while ('/' == *name)
|
||
|
{
|
||
|
len--;
|
||
|
name++;
|
||
|
}
|
||
|
list->backup_file.len = len;
|
||
|
list->backup_file.addr = (char *)malloc(len + 1);
|
||
|
memcpy(list->backup_file.addr, name, len);
|
||
|
*(list->backup_file.addr + len) = 0;
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
temp = name[len];
|
||
|
name[len] = 0;
|
||
|
STAT_FILE(name, &stat_buf, stat_res);
|
||
|
if (-1 == stat_res)
|
||
|
{
|
||
|
if (errno != ENOENT)
|
||
|
{
|
||
|
util_out_print("Error accessing backup output file or directory: !AD", TRUE, len, name);
|
||
|
mupip_exit(errno);
|
||
|
} else
|
||
|
{ /* new file */
|
||
|
list->backup_file.len = len;
|
||
|
list->backup_file.addr = (char *)malloc(len + 1);
|
||
|
memcpy(list->backup_file.addr, name, len);
|
||
|
*(list->backup_file.addr + len) = 0;
|
||
|
}
|
||
|
} else if (S_ISDIR(stat_buf.st_mode))
|
||
|
{
|
||
|
if (!is_directory)
|
||
|
{
|
||
|
is_directory = TRUE;
|
||
|
directory.len = len;
|
||
|
directory.addr = (char *)malloc(len + 1);
|
||
|
memcpy(directory.addr, name, len);
|
||
|
*(directory.addr + len) = 0;
|
||
|
}
|
||
|
mubexpfilnam(name, len, list);
|
||
|
} else
|
||
|
{ /* the file already exists */
|
||
|
list->backup_file.len = len;
|
||
|
list->backup_file.addr = (char *)malloc(len + 1);
|
||
|
memcpy(list->backup_file.addr, name, len);
|
||
|
*(list->backup_file.addr + len) = 0;
|
||
|
}
|
||
|
name[len] = temp;
|
||
|
return TRUE;
|
||
|
}
|