2003-05-25 Casper S. Hornstrup <chorns@users.sourceforge.net>

* Makefile: Don't install system.hiv. Install fonts and nls directory.
	* tools/rcopy.c (copy_file, copy_directory, is_directory): New functions.

svn path=/trunk/; revision=4752
This commit is contained in:
Casper Hornstrup 2003-05-25 11:33:58 +00:00
parent ca127f5069
commit 419b1c5759
3 changed files with 244 additions and 42 deletions

View file

@ -1,3 +1,8 @@
2003-05-25 Casper S. Hornstrup <chorns@users.sourceforge.net>
* Makefile: Don't install system.hiv. Install fonts and nls directory.
* tools/rcopy.c (copy_file, copy_directory, is_directory): New functions.
2003-05-17 Casper S. Hornstrup <chorns@users.sourceforge.net>
* ntoskrnl/io/irp.c (IofCallDriver): Don't reference FileObject.

View file

@ -748,19 +748,8 @@ install_before:
$(RLINE) bootdata/hivesft.inf $(INSTALL_DIR)/hivesft.inf
$(RLINE) bootdata/hivesys.inf $(INSTALL_DIR)/hivesys.inf
$(RLINE) bootdata/txtsetup.sif $(INSTALL_DIR)/txtsetup.sif
$(CP) system.hiv $(INSTALL_DIR)/system.hiv
$(CP) media/fonts/helb____.ttf $(INSTALL_DIR)/helb____.ttf
$(CP) media/fonts/timr____.ttf $(INSTALL_DIR)/timr____.ttf
$(CP) media/fonts/Vera.ttf $(INSTALL_DIR)/Vera.ttf
$(CP) media/fonts/VeraBd.ttf $(INSTALL_DIR)/VeraBd.ttf
$(CP) media/fonts/VeraBI.ttf $(INSTALL_DIR)/VeraBI.ttf
$(CP) media/fonts/VeraIt.ttf $(INSTALL_DIR)/VeraIt.ttf
$(CP) media/fonts/VeraMoBd.ttf $(INSTALL_DIR)/VeraMoBd.ttf
$(CP) media/fonts/VeraMoBI.ttf $(INSTALL_DIR)/VeraMoBI.ttf
$(CP) media/fonts/VeraMoIt.ttf $(INSTALL_DIR)/VeraMoIt.ttf
$(CP) media/fonts/VeraMono.ttf $(INSTALL_DIR)/VeraMono.ttf
$(CP) media/fonts/VeraSe.ttf $(INSTALL_DIR)/VeraSe.ttf
$(CP) media/fonts/VeraSeBd.ttf $(INSTALL_DIR)/VeraSeBd.ttf
$(CP) media/fonts $(INSTALL_DIR)
$(CP) media/nls $(INSTALL_DIR)
else # BOOTCD_INSTALL
@ -778,19 +767,11 @@ install_before:
$(CP) bootc.lst $(INSTALL_DIR)/bootc.lst
$(CP) boot.bat $(INSTALL_DIR)/boot.bat
$(CP) aboot.bat $(INSTALL_DIR)/aboot.bat
$(CP) system.hiv $(INSTALL_DIR)/system32/config/system.hiv
$(CP) media/fonts/helb____.ttf $(INSTALL_DIR)/media/fonts/helb____.ttf
$(CP) media/fonts/timr____.ttf $(INSTALL_DIR)/media/fonts/timr____.ttf
$(CP) media/fonts/Vera.ttf $(INSTALL_DIR)/media/fonts/Vera.ttf
$(CP) media/fonts/VeraBd.ttf $(INSTALL_DIR)/media/fonts/VeraBd.ttf
$(CP) media/fonts/VeraBI.ttf $(INSTALL_DIR)/media/fonts/VeraBI.ttf
$(CP) media/fonts/VeraIt.ttf $(INSTALL_DIR)/media/fonts/VeraIt.ttf
$(CP) media/fonts/VeraMoBd.ttf $(INSTALL_DIR)/media/fonts/VeraMoBd.ttf
$(CP) media/fonts/VeraMoBI.ttf $(INSTALL_DIR)/media/fonts/VeraMoBI.ttf
$(CP) media/fonts/VeraMoIt.ttf $(INSTALL_DIR)/media/fonts/VeraMoIt.ttf
$(CP) media/fonts/VeraMono.ttf $(INSTALL_DIR)/media/fonts/VeraMono.ttf
$(CP) media/fonts/VeraSe.ttf $(INSTALL_DIR)/media/fonts/VeraSe.ttf
$(CP) media/fonts/VeraSeBd.ttf $(INSTALL_DIR)/media/fonts/VeraSeBd.ttf
$(CP) media/fonts $(INSTALL_DIR)/media/fonts
$(CP) media/nls $(INSTALL_DIR)/system32
$(CP) media/nls/c_1252.nls $(INSTALL_DIR)/system32/ansi.nls
$(CP) media/nls/c_437.nls $(INSTALL_DIR)/system32/oem.nls
$(CP) media/nls/l_intl.nls $(INSTALL_DIR)/system32/casemap.nls
endif # BOOTCD_INSTALL

View file

@ -1,6 +1,26 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#ifdef WIN32
#include <io.h>
#include <dos.h>
#else
#include <sys/io.h>
#include <errno.h>
#include <sys/types.h>
#include <dirent.h>
#endif
#ifndef WIN32
#ifndef MAX_PATH
#define MAX_PATH 260
#endif
#define DIR_SEPARATOR_CHAR '/'
#define DIR_SEPARATOR_STRING "/"
#else
#define DIR_SEPARATOR_CHAR '\\'
#define DIR_SEPARATOR_STRING "\\"
#endif
char* convert_path(char* origpath)
{
@ -32,25 +52,15 @@ char* convert_path(char* origpath)
#define TRANSFER_SIZE (65536)
int main(int argc, char* argv[])
static void
copy_file(char* path1, char* path2)
{
char* path1;
char* path2;
FILE* in;
FILE* out;
char* buf;
int n_in;
int n_out;
if (argc != 3)
{
fprintf(stderr, "Too many arguments\n");
exit(1);
}
path1 = convert_path(argv[1]);
path2 = convert_path(argv[2]);
in = fopen(path1, "rb");
if (in == NULL)
{
@ -58,8 +68,6 @@ int main(int argc, char* argv[])
exit(1);
}
out = fopen(path2, "wb");
if (out == NULL)
{
@ -69,7 +77,6 @@ int main(int argc, char* argv[])
}
buf = malloc(TRANSFER_SIZE);
while (!feof(in))
{
n_in = fread(buf, 1, TRANSFER_SIZE, in);
@ -83,5 +90,214 @@ int main(int argc, char* argv[])
exit(1);
}
}
}
#ifdef WIN32
static void
copy_directory (char *path1, char *path2)
{
struct _finddata_t f;
int findhandle;
char buf[MAX_PATH];
char tobuf[MAX_PATH];
strcpy(buf, path1);
if (path1[strlen(path1) - 1] != DIR_SEPARATOR_CHAR)
strcat(buf, DIR_SEPARATOR_STRING);
strcat(buf, "*.*");
findhandle =_findfirst(buf, &f);
if (findhandle != 0)
{
do
{
if ((f.attrib & _A_SUBDIR) == 0 && f.name[0] != '.')
{
// Check for an absolute path
if (path1[0] == DIR_SEPARATOR_CHAR)
{
strcpy(buf, path1);
strcat(buf, DIR_SEPARATOR_STRING);
strcat(buf, f.name);
}
else
{
getcwd(buf, sizeof(buf));
strcat(buf, DIR_SEPARATOR_STRING);
strcat(buf, path1);
if (path1[strlen(path1) - 1] != DIR_SEPARATOR_CHAR)
strcat(buf, DIR_SEPARATOR_STRING);
strcat(buf, f.name);
}
//printf("copying file %s\n", buf);
if (path2[strlen(path2) - 1] == DIR_SEPARATOR_CHAR)
{
strcpy(tobuf, path2);
strcat(tobuf, f.name);
}
else
{
strcpy(tobuf, path2);
strcat(tobuf, DIR_SEPARATOR_STRING);
strcat(tobuf, f.name);
}
copy_file(buf, tobuf);
}
else
{
//printf("skipping directory '%s'\n", f.name);
}
}
while (_findnext(findhandle, &f) == 0);
_findclose(findhandle);
}
}
#else
/* Linux version */
static void
copy_directory (char *path1, char *path2)
{
DIR *dirp;
struct dirent *entry;
char *old_end_source;
struct stat stbuf;
char buf[MAX_PATH];
char tobuf[MAX_PATH];
char err[400];
dirp = opendir(path1);
if (dirp != NULL)
{
while ((entry = readdir (dirp)) != NULL)
{
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
continue; // skip self and parent
if (entry->d_type == DT_REG) // normal file
{
// Check for an absolute path
if (path1[0] == DIR_SEPARATOR_CHAR)
{
strcpy(buf, path1);
strcat(buf, DIR_SEPARATOR_STRING);
strcat(buf, entry->d_name);
}
else
{
getcwd(buf, sizeof(buf));
strcat(buf, DIR_SEPARATOR_STRING);
strcat(buf, path1);
if (path1[strlen(path1) - 1] != DIR_SEPARATOR_CHAR)
strcat(buf, DIR_SEPARATOR_STRING);
strcat(buf, entry->d_name);
}
if (stat(buf, &stbuf) == -1)
{
sprintf(err, "Can't access '%s' (%s)\n", buf, strerror(errno));
perror(err);
exit(1);
return;
}
//printf("copying file '%s'\n", entry->d_name);
if (path2[strlen(path2) - 1] == DIR_SEPARATOR_CHAR)
{
strcpy(tobuf, path2);
strcat(tobuf, entry->d_name);
}
else
{
strcpy(tobuf, path2);
strcat(tobuf, DIR_SEPARATOR_STRING);
strcat(tobuf, entry->d_name);
}
copy_file(buf, tobuf);
}
else
{
//printf("skipping directory '%s'\n", entry->d_name);
}
}
closedir (dirp);
}
else
{
sprintf(err, "Can't open %s\n", path1);
perror(err);
exit(1);
return;
}
}
#endif
static int
is_directory(char *path)
{
struct stat stbuf;
char buf[MAX_PATH];
char err[400];
// Check for an absolute path
if (path[0] == DIR_SEPARATOR_CHAR)
{
strcpy(buf, path);
}
else
{
getcwd(buf, sizeof(buf));
strcat(buf, DIR_SEPARATOR_STRING);
strcat(buf, path);
}
if (stat(buf, &stbuf) == -1)
{
/* Assume a destination file */
return 0;
}
if (S_ISDIR(stbuf.st_mode))
return 1;
else
return 0;
}
int main(int argc, char* argv[])
{
char* path1;
char* path2;
int dir1;
int dir2;
if (argc != 3)
{
fprintf(stderr, "Wrong argument count\n");
exit(1);
}
path1 = convert_path(argv[1]);
path2 = convert_path(argv[2]);
dir1 = is_directory(path1);
dir2 = is_directory(path2);
if ((dir1 && !dir2) || (!dir1 && dir2))
{
perror("None or both paramters must be a directory\n");
exit(1);
}
if (dir1)
{
copy_directory(path1, path2);
}
else
{
copy_file(path1, path2);
}
exit(0);
}