зеркало из https://github.com/mozilla/gecko-dev.git
226 строки
4.7 KiB
C++
226 строки
4.7 KiB
C++
/* $Id: win-misc.cpp,v 1.1 1998/09/25 18:01:42 ramiro%netscape.com Exp $
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. Portions
|
|
* created by Warwick Allison, Kalle Dalheimer, Eirik Eng, Matthias
|
|
* Ettrich, Arnt Gulbrandsen, Haavard Nord and Paul Olav Tvete are
|
|
* Copyright (C) 1998 Warwick Allison, Kalle Dalheimer, Eirik Eng,
|
|
* Matthias Ettrich, Arnt Gulbrandsen, Haavard Nord and Paul Olav
|
|
* Tvete. All Rights Reserved.
|
|
*/
|
|
|
|
|
|
#include <xp.h>
|
|
#include <io.h>
|
|
#include <direct.h>
|
|
#include <qstring.h>
|
|
|
|
|
|
extern "C"
|
|
char *
|
|
WH_FileName (const char *name, XP_FileType)
|
|
{
|
|
return name ? XP_STRDUP(name) : 0;
|
|
}
|
|
|
|
|
|
extern "C"
|
|
char *WH_FilePlatformName(const char *name)
|
|
{
|
|
return name ? XP_STRDUP(name) : 0;
|
|
}
|
|
|
|
|
|
extern "C"
|
|
char *
|
|
WH_TempName(XP_FileType, const char * prefix)
|
|
{
|
|
return tmpnam((char*)prefix);
|
|
}
|
|
|
|
|
|
//
|
|
// Return 0 on success, -1 on failure. Silly unix weenies
|
|
//
|
|
extern "C"
|
|
int
|
|
XP_FileRemove(const char * name, XP_FileType)
|
|
{
|
|
return remove( name );
|
|
}
|
|
|
|
extern "C"
|
|
XP_File
|
|
XP_FileOpen(const char * name, XP_FileType type, const XP_FilePerm perm)
|
|
{
|
|
XP_File fp;
|
|
char *filename = WH_FileName(name, type);
|
|
if(!filename || !(*filename))
|
|
return 0;
|
|
fp = fopen(filename, (char *) perm);
|
|
XP_FREE(filename);
|
|
return(fp);
|
|
}
|
|
|
|
|
|
extern "C"
|
|
int
|
|
XP_Stat(const char * name, XP_StatStruct * info, XP_FileType type)
|
|
{
|
|
char * filename = WH_FileName(name, type);
|
|
int res;
|
|
|
|
if(!info || !filename)
|
|
return(-1);
|
|
|
|
// Strip off final slash on directory names
|
|
// BUT we will need to make sure we have c:\ NOT c:
|
|
int len = XP_STRLEN(filename) - 1;
|
|
if(len > 1 && filename[len] == '\\' && filename[len -1] != ':'){
|
|
filename[len] = '\0';
|
|
}
|
|
|
|
// Normal file or directory.
|
|
res = _stat(filename, info);
|
|
XP_FREE(filename);
|
|
return(res);
|
|
}
|
|
|
|
|
|
extern "C"
|
|
char*
|
|
XP_TempDirName(void)
|
|
{
|
|
return XP_STRDUP("C:\\TEMP");
|
|
}
|
|
|
|
|
|
PUBLIC XP_Dir
|
|
XP_OpenDir(const char * name, XP_FileType type)
|
|
{
|
|
XP_Dir dir;
|
|
char * filename = WH_FileName(name, type);
|
|
QString foo;
|
|
|
|
if(!filename)
|
|
return NULL;
|
|
dir = (XP_Dir) new DIR;
|
|
|
|
// For directory names we need \*.* at the end, if and only if there is an actual name specified.
|
|
foo += filename;
|
|
foo += '\\';
|
|
foo += "*.*";
|
|
|
|
dir->directoryPtr = FindFirstFile((const char *) foo, &(dir->data));
|
|
XP_FREE(filename);
|
|
if(dir->directoryPtr == INVALID_HANDLE_VALUE) {
|
|
delete dir;
|
|
return(NULL);
|
|
} else {
|
|
return(dir);
|
|
}
|
|
}
|
|
|
|
|
|
extern "C"
|
|
void
|
|
XP_CloseDir(XP_Dir dir)
|
|
{
|
|
if (dir)
|
|
{
|
|
if (dir->directoryPtr)
|
|
FindClose (dir->directoryPtr);
|
|
delete dir;
|
|
}
|
|
}
|
|
|
|
|
|
extern "C"
|
|
XP_DirEntryStruct *
|
|
XP_ReadDir(XP_Dir dir)
|
|
{
|
|
static XP_DirEntryStruct dirEntry;
|
|
|
|
if(dir && dir->directoryPtr) {
|
|
XP_STRCPY(dirEntry.d_name, dir->data.cFileName);
|
|
if(FindNextFile(dir->directoryPtr, &(dir->data)) == FALSE) {
|
|
FindClose(dir->directoryPtr);
|
|
dir->directoryPtr = NULL;
|
|
}
|
|
return(&dirEntry);
|
|
} else {
|
|
return(NULL);
|
|
}
|
|
}
|
|
|
|
|
|
extern "C"
|
|
int
|
|
XP_MakeDirectory(const char* name, XP_FileType type)
|
|
{
|
|
char * pName = WH_FileName(name, type);
|
|
if(pName) {
|
|
int dir;
|
|
dir = mkdir(pName);
|
|
XP_FREE(pName);
|
|
return(dir);
|
|
}
|
|
else
|
|
return(-1);
|
|
}
|
|
|
|
|
|
extern "C"
|
|
int
|
|
XP_RemoveDirectory (const char *name, XP_FileType type)
|
|
{
|
|
int ret = -1;
|
|
char *pName = WH_FileName (name, type);
|
|
if (pName) {
|
|
ret = rmdir (pName);
|
|
XP_FREE(pName);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
|
|
char * XP_PlatformFileToURL (const char *name)
|
|
{
|
|
char *prefix = "file://";
|
|
char *s = (char*)XP_ALLOC (XP_STRLEN(name) + XP_STRLEN(prefix) + 1);
|
|
if (s)
|
|
{
|
|
XP_STRCPY (s, "file://");
|
|
XP_STRCAT (s, name);
|
|
}
|
|
return s;
|
|
}
|
|
|
|
int XP_FileRename(const char * from, XP_FileType fromtype,
|
|
const char * to, XP_FileType totype)
|
|
{
|
|
char * fromName = WH_FileName(from, fromtype);
|
|
char * toName = WH_FileName(to, totype);
|
|
int res = 0;
|
|
if (fromName && toName)
|
|
res = rename(fromName, toName);
|
|
else
|
|
res = -1;
|
|
if (fromName)
|
|
XP_FREE(fromName);
|
|
if (toName)
|
|
XP_FREE(toName);
|
|
return res;
|
|
}
|