merged 2.2 branch
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@7748 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
149
utils/Install/packace/uac_crt.c
Normal file
149
utils/Install/packace/uac_crt.c
Normal file
@@ -0,0 +1,149 @@
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* */
|
||||
/* Creates/Replaces files or directories. */
|
||||
/* */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
#include "os.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h> // AMIGA: open()
|
||||
#include <stdio.h> // pipeit() remove()
|
||||
#include <string.h> // strncpy()
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h> // struct stat
|
||||
#include <string.h>
|
||||
|
||||
|
||||
#if defined(DOS) || defined(WINNT) || defined(WIN16)
|
||||
#include <io.h> // access()
|
||||
#endif
|
||||
#if defined(__IBMC__)
|
||||
#include <direct.h>
|
||||
#endif
|
||||
|
||||
#define DIRSEP '\\'
|
||||
|
||||
#include "attribs.h"
|
||||
#include "globals.h"
|
||||
#include "uac_crt.h"
|
||||
#include "uac_sys.h"
|
||||
|
||||
/* gets file name from header
|
||||
*/
|
||||
CHAR *ace_fname(CHAR * s, thead * head, INT nopath)
|
||||
{
|
||||
INT i;
|
||||
char *cp;
|
||||
|
||||
strncpy(s, (CHAR *)(*(tfhead *) head).FNAME, i = (*(tfhead *) head).FNAME_SIZE);
|
||||
s[i] = 0;
|
||||
|
||||
if (nopath)
|
||||
{
|
||||
cp=strrchr(s, '\\');
|
||||
if (cp)
|
||||
memmove(s, cp+1, strlen(cp));
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
void check_ext_dir(CHAR * f) // checks/creates path of file
|
||||
{
|
||||
CHAR *cp,
|
||||
d[PATH_MAX];
|
||||
INT i;
|
||||
|
||||
d[0] = 0;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if ((cp = (CHAR *) strchr(&f[strlen(d) + 1], DIRSEP))!=NULL)
|
||||
{
|
||||
i = cp - f;
|
||||
strncpy(d, f, i);
|
||||
d[i] = 0;
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
||||
if (!fileexists(d))
|
||||
#if (defined(__OS2__) && !defined(__EMX__)) || (defined(WINNT) && !defined(__CYGWIN__))
|
||||
if (mkdir(d))
|
||||
#else
|
||||
if (mkdir(d, 0))
|
||||
#endif
|
||||
{
|
||||
f_err = ERR_WRITE;
|
||||
pipeit("\n Error while creating directory.\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
INT ovr_delete(CHAR * n) // deletes directory or file
|
||||
{
|
||||
if (remove(n) && rmdir(n))
|
||||
{
|
||||
pipeit("\n Could not delete file or directory. Access denied.\n");
|
||||
return (1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
INT create_dest_file(CHAR * file, INT a) // creates file or directory
|
||||
{
|
||||
INT han,
|
||||
i = 0,
|
||||
ex = fileexists(file);
|
||||
struct stat st;
|
||||
|
||||
check_ext_dir(file);
|
||||
if (f_err)
|
||||
return (-1);
|
||||
if (a & _A_SUBDIR)
|
||||
{ // create dir or file?
|
||||
if (ex)
|
||||
stat(file, &st);
|
||||
#if (defined(__OS2__) && !defined(__EMX__)) || (!defined(__CYGWIN__) && defined(WINNT))
|
||||
if ((!ex && mkdir(file)) || (ex && (st.st_mode & S_IFDIR)))
|
||||
#else
|
||||
if ((!ex && mkdir(file, 0)) || (ex && (st.st_mode & S_IFDIR)))
|
||||
#endif
|
||||
{
|
||||
pipeit("\n Could not create directory.\n");
|
||||
return (-1);
|
||||
}
|
||||
#ifdef DOS
|
||||
_dos_setfileattr(file, a); // set directory attributes
|
||||
#endif
|
||||
return (-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ex)
|
||||
{ // does the file already exist
|
||||
if (!f_ovrall)
|
||||
{
|
||||
i = wrask("Overwrite existing file?"); // prompt for overwrite
|
||||
f_ovrall = (i == 1);
|
||||
if (i == 3)
|
||||
f_err = ERR_USER;
|
||||
}
|
||||
if ((i && !f_ovrall) || ovr_delete(file))
|
||||
return (-1); // delete?
|
||||
}
|
||||
#if defined(__OS2_) || defined(__EMX__) || defined(WIN32)
|
||||
if ((han = open(file, O_WRONLY | O_TRUNC | O_CREAT | O_BINARY,
|
||||
S_IREAD | S_IWRITE | S_IEXEC | S_IDELETE |
|
||||
S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH )) < 0)
|
||||
#else
|
||||
if ((han = open(file, O_WRONLY | O_TRUNC | O_CREAT,
|
||||
S_IREAD | S_IWRITE | S_IEXEC | S_IDELETE |
|
||||
S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH )) < 0)
|
||||
#endif
|
||||
pipeit("\n Could not create destination file.\n");
|
||||
return (han);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user