diff --git a/qse/bld/msdos-watcom/makefile b/qse/bld/msdos-watcom/makefile index 1f7a3d1a..884c4f1c 100644 --- a/qse/bld/msdos-watcom/makefile +++ b/qse/bld/msdos-watcom/makefile @@ -222,6 +222,7 @@ LIBQSECMN_OBJECTS = & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsecmn_fmt_intmax.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsecmn_fmt_out.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs.obj & + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_copy.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_delete.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_err.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_make.obj & @@ -567,6 +568,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsecmn_fmt_ou $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs.obj : .AUTODEPEND ..\..\lib\cmn\fs.c $(CC) -bt=dos -zq -fo=$^@ $(LIBQSECMN_CFLAGS) $< +$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_copy.obj : .AUTODEPEND ..\..\lib\cmn\fs-copy.c + $(CC) -bt=dos -zq -fo=$^@ $(LIBQSECMN_CFLAGS) $< + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-static$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_delete.obj : .AUTODEPEND ..\..\lib\cmn\fs-delete.c $(CC) -bt=dos -zq -fo=$^@ $(LIBQSECMN_CFLAGS) $< diff --git a/qse/bld/os2-watcom/makefile b/qse/bld/os2-watcom/makefile index f5e34d70..ce0ff150 100644 --- a/qse/bld/os2-watcom/makefile +++ b/qse/bld/os2-watcom/makefile @@ -340,6 +340,7 @@ DLLQSECMN_OBJECTS = & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fmt_intmax.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fmt_out.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs.obj & + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_copy.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_delete.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_err.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_make.obj & @@ -439,6 +440,7 @@ LIBQSECMN_OBJECTS = & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fmt_intmax.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fmt_out.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs.obj & + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_copy.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_delete.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_err.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_make.obj & @@ -1103,6 +1105,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllq $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs.obj : .AUTODEPEND ..\..\lib\cmn\fs.c $(CC) -bt=os2 -zq -fo=$^@ $(DLLQSECMN_CFLAGS) $< +$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_copy.obj : .AUTODEPEND ..\..\lib\cmn\fs-copy.c + $(CC) -bt=os2 -zq -fo=$^@ $(DLLQSECMN_CFLAGS) $< + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_delete.obj : .AUTODEPEND ..\..\lib\cmn\fs-delete.c $(CC) -bt=os2 -zq -fo=$^@ $(DLLQSECMN_CFLAGS) $< @@ -1391,6 +1396,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libq $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs.obj : .AUTODEPEND ..\..\lib\cmn\fs.c $(CC) -bt=os2 -zq -fo=$^@ $(LIBQSECMN_CFLAGS) $< +$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_copy.obj : .AUTODEPEND ..\..\lib\cmn\fs-copy.c + $(CC) -bt=os2 -zq -fo=$^@ $(LIBQSECMN_CFLAGS) $< + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_delete.obj : .AUTODEPEND ..\..\lib\cmn\fs-delete.c $(CC) -bt=os2 -zq -fo=$^@ $(LIBQSECMN_CFLAGS) $< diff --git a/qse/bld/qse.bkl b/qse/bld/qse.bkl index 54833b31..73c69cf7 100644 --- a/qse/bld/qse.bkl +++ b/qse/bld/qse.bkl @@ -172,6 +172,7 @@ fmt-intmax.c fmt-out.c fs.c + fs-copy.c fs-delete.c fs-err.c fs-make.c diff --git a/qse/bld/win32-borland/makefile b/qse/bld/win32-borland/makefile index 339ce8dc..0351a403 100644 --- a/qse/bld/win32-borland/makefile +++ b/qse/bld/win32-borland/makefile @@ -108,6 +108,7 @@ DLLQSECMN_OBJECTS = \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fmt_intmax.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fmt_out.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs.obj \ + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_copy.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_delete.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_err.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_make.obj \ @@ -208,6 +209,7 @@ LIBQSECMN_OBJECTS = \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fmt_intmax.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fmt_out.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs.obj \ + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_copy.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_delete.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_err.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_make.obj \ @@ -1051,6 +1053,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllq $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs.obj: ..\..\lib\cmn\fs.c $(CC) -q -c -P- -o$@ $(DLLQSECMN_CFLAGS) ..\..\lib\cmn\fs.c +$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_copy.obj: ..\..\lib\cmn\fs-copy.c + $(CC) -q -c -P- -o$@ $(DLLQSECMN_CFLAGS) ..\..\lib\cmn\fs-copy.c + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_delete.obj: ..\..\lib\cmn\fs-delete.c $(CC) -q -c -P- -o$@ $(DLLQSECMN_CFLAGS) ..\..\lib\cmn\fs-delete.c @@ -1339,6 +1344,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libq $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs.obj: ..\..\lib\cmn\fs.c $(CC) -q -c -P- -o$@ $(LIBQSECMN_CFLAGS) ..\..\lib\cmn\fs.c +$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_copy.obj: ..\..\lib\cmn\fs-copy.c + $(CC) -q -c -P- -o$@ $(LIBQSECMN_CFLAGS) ..\..\lib\cmn\fs-copy.c + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_delete.obj: ..\..\lib\cmn\fs-delete.c $(CC) -q -c -P- -o$@ $(LIBQSECMN_CFLAGS) ..\..\lib\cmn\fs-delete.c diff --git a/qse/bld/win32-msvc/makefile b/qse/bld/win32-msvc/makefile index 5356114d..64fcc9c8 100644 --- a/qse/bld/win32-msvc/makefile +++ b/qse/bld/win32-msvc/makefile @@ -77,6 +77,7 @@ DLLQSECMN_OBJECTS = \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fmt_intmax.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fmt_out.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs.obj \ + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_copy.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_delete.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_err.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_make.obj \ @@ -179,6 +180,7 @@ LIBQSECMN_OBJECTS = \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fmt_intmax.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fmt_out.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs.obj \ + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_copy.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_delete.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_err.obj \ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_make.obj \ @@ -1130,6 +1132,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllq $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs.obj: ..\..\lib\cmn\fs.c $(CC) /c /nologo /TC /Fo$@ $(DLLQSECMN_CFLAGS) ..\..\lib\cmn\fs.c +$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_copy.obj: ..\..\lib\cmn\fs-copy.c + $(CC) /c /nologo /TC /Fo$@ $(DLLQSECMN_CFLAGS) ..\..\lib\cmn\fs-copy.c + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_delete.obj: ..\..\lib\cmn\fs-delete.c $(CC) /c /nologo /TC /Fo$@ $(DLLQSECMN_CFLAGS) ..\..\lib\cmn\fs-delete.c @@ -1418,6 +1423,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libq $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs.obj: ..\..\lib\cmn\fs.c $(CC) /c /nologo /TC /Fo$@ $(LIBQSECMN_CFLAGS) ..\..\lib\cmn\fs.c +$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_copy.obj: ..\..\lib\cmn\fs-copy.c + $(CC) /c /nologo /TC /Fo$@ $(LIBQSECMN_CFLAGS) ..\..\lib\cmn\fs-copy.c + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_delete.obj: ..\..\lib\cmn\fs-delete.c $(CC) /c /nologo /TC /Fo$@ $(LIBQSECMN_CFLAGS) ..\..\lib\cmn\fs-delete.c diff --git a/qse/bld/win32-watcom/makefile b/qse/bld/win32-watcom/makefile index 110d64b2..1ee430ac 100644 --- a/qse/bld/win32-watcom/makefile +++ b/qse/bld/win32-watcom/makefile @@ -329,6 +329,7 @@ DLLQSECMN_OBJECTS = & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fmt_intmax.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fmt_out.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs.obj & + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_copy.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_delete.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_err.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_make.obj & @@ -428,6 +429,7 @@ LIBQSECMN_OBJECTS = & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fmt_intmax.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fmt_out.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs.obj & + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_copy.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_delete.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_err.obj & $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_make.obj & @@ -1092,6 +1094,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllq $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs.obj : .AUTODEPEND ..\..\lib\cmn\fs.c $(CC) -bt=nt -zq -fo=$^@ $(DLLQSECMN_CFLAGS) $< +$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_copy.obj : .AUTODEPEND ..\..\lib\cmn\fs-copy.c + $(CC) -bt=nt -zq -fo=$^@ $(DLLQSECMN_CFLAGS) $< + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\dllqsecmn_fs_delete.obj : .AUTODEPEND ..\..\lib\cmn\fs-delete.c $(CC) -bt=nt -zq -fo=$^@ $(DLLQSECMN_CFLAGS) $< @@ -1380,6 +1385,9 @@ $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libq $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs.obj : .AUTODEPEND ..\..\lib\cmn\fs.c $(CC) -bt=nt -zq -fo=$^@ $(LIBQSECMN_CFLAGS) $< +$(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_copy.obj : .AUTODEPEND ..\..\lib\cmn\fs-copy.c + $(CC) -bt=nt -zq -fo=$^@ $(LIBQSECMN_CFLAGS) $< + $(BUILDDIR_BUILD)-$(BUILDDIR_CHAR)-$(BUILDDIR_SHARED)$(BUILDDIR_TCPV40HDRS)\libqsecmn_fs_delete.obj : .AUTODEPEND ..\..\lib\cmn\fs-delete.c $(CC) -bt=nt -zq -fo=$^@ $(LIBQSECMN_CFLAGS) $< diff --git a/qse/cmd/sed/sed.c b/qse/cmd/sed/sed.c index 2773d73a..db1636ee 100644 --- a/qse/cmd/sed/sed.c +++ b/qse/cmd/sed/sed.c @@ -675,12 +675,10 @@ static int expand_wildcards (int argc, qse_char_t* argv[], int glob, xarg_t* xar if (glob) { x = qse_glob (argv[i], collect_into_xarg, xarg, - QSE_GLOB_TOLERANT | -#if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) - QSE_GLOB_NOESCAPE | QSE_GLOB_PERIOD | QSE_GLOB_IGNORECASE, -#else - QSE_GLOB_PERIOD, -#endif + #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) + QSE_GLOB_NOESCAPE | QSE_GLOB_IGNORECASE | + #endif + QSE_GLOB_TOLERANT | QSE_GLOB_PERIOD, xarg->mmgr, qse_getdflcmgr() ); diff --git a/qse/include/qse/cmn/dir.h b/qse/include/qse/cmn/dir.h index 4a5c853c..ed7f322e 100644 --- a/qse/include/qse/cmn/dir.h +++ b/qse/include/qse/cmn/dir.h @@ -59,10 +59,11 @@ typedef enum qse_dir_errnum_t qse_dir_errnum_t; enum qse_dir_flag_t { - QSE_DIR_MBSPATH = (1 << 0), - QSE_DIR_SORT = (1 << 1), - QSE_DIR_LIMITED = (1 << 2) /**< limited to normal entries excluding . and .. */ + QSE_DIR_MBSPATH = (1 << 0), + QSE_DIR_SORT = (1 << 1), + QSE_DIR_SKIPSPCDIR = (1 << 2) /**< limited to normal entries excluding . and .. */ }; +typedef enum qse_dir_flag_t qse_dir_flag_t; struct qse_dir_ent_t { diff --git a/qse/include/qse/cmn/fs.h b/qse/include/qse/cmn/fs.h index 8e12dea5..401bf690 100644 --- a/qse/include/qse/cmn/fs.h +++ b/qse/include/qse/cmn/fs.h @@ -198,13 +198,18 @@ typedef enum qse_fs_opt_t qse_fs_opt_t; enum qse_fs_cpfile_flag_t { - QSE_FS_CPFILE_PRESERVE = (1 << 0), - QSE_FS_CPFILE_REPLACE = (1 << 1), - QSE_FS_CPFILE_SYMLINK = (1 << 2), - QSE_FS_CPFILE_NOTGTDIR = (1 << 3), /* no target directory */ + QSE_FS_CPFILE_GLOB = (1 << 0), + QSE_FS_CPFILE_RECURSIVE = (1 << 1), + QSE_FS_CPFILE_FORCE = (1 << 2), + QSE_FS_CPFILE_PRESERVE = (1 << 3), + QSE_FS_CPFILE_REPLACE = (1 << 4), + QSE_FS_CPFILE_SYMLINK = (1 << 5), + QSE_FS_CPFILE_NOTGTDIR = (1 << 6), /* no target directory */ - QSE_FS_CPFILE_ALL = (QSE_FS_CPFILE_PRESERVE | QSE_FS_CPFILE_REPLACE | - QSE_FS_CPFILE_SYMLINK | QSE_FS_CPFILE_NOTGTDIR) + QSE_FS_CPFILE_ALL = (QSE_FS_CPFILE_GLOB | QSE_FS_CPFILE_RECURSIVE | + QSE_FS_CPFILE_FORCE | QSE_FS_CPFILE_PRESERVE | + QSE_FS_CPFILE_REPLACE | QSE_FS_CPFILE_SYMLINK | + QSE_FS_CPFILE_NOTGTDIR) }; typedef enum qse_fs_cpfile_flag_t qse_fs_cpfile_flag_t; diff --git a/qse/include/qse/cmn/glob.h b/qse/include/qse/cmn/glob.h index 94b2087b..8fc1a78d 100644 --- a/qse/include/qse/cmn/glob.h +++ b/qse/include/qse/cmn/glob.h @@ -58,7 +58,7 @@ enum qse_glob_flags_t /** Exclude special entries from matching. * Special entries include . and .. */ - QSE_GLOB_LIMITED = (1 << 4) + QSE_GLOB_SKIPSPCDIR = (1 << 4) }; #if defined(__cplusplus) diff --git a/qse/lib/cmn/Makefile.am b/qse/lib/cmn/Makefile.am index 4e6ffd61..26af3341 100644 --- a/qse/lib/cmn/Makefile.am +++ b/qse/lib/cmn/Makefile.am @@ -45,6 +45,7 @@ libqsecmn_la_SOURCES = \ fmt-intmax.c \ fmt-out.c \ fs.c \ + fs-copy.c \ fs-delete.c \ fs-err.c \ fs-make.c \ diff --git a/qse/lib/cmn/Makefile.in b/qse/lib/cmn/Makefile.in index 06c8a705..9e152707 100644 --- a/qse/lib/cmn/Makefile.in +++ b/qse/lib/cmn/Makefile.in @@ -107,9 +107,9 @@ libqsecmn_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am__libqsecmn_la_SOURCES_DIST = alg-base64.c alg-rand.c alg-search.c \ alg-sort.c assert.c chr.c dir.c dll.c env.c gdl.c htb.c fio.c \ - fma.c fmt-intmax.c fmt-out.c fs.c fs-delete.c fs-err.c \ - fs-make.c fs-move.c glob.c hton.c ipad.c lda.c main.c mb8.c \ - mbwc.c mbwc-str.c mem.c mux.c nwad.c nwad-skad.c nwif.c \ + fma.c fmt-intmax.c fmt-out.c fs.c fs-copy.c fs-delete.c \ + fs-err.c fs-make.c fs-move.c glob.c hton.c ipad.c lda.c main.c \ + mb8.c mbwc.c mbwc-str.c mem.c mux.c nwad.c nwad-skad.c nwif.c \ nwif-cfg.c nwio.c oht.c opt.c path-base.c path-canon.c \ path-core.c path-merge.c pio.c pma.c rbt.c rex.c sck.c sio.c \ sll.c slmb.c str-beg.c str-cat.c str-chr.c str-cnv.c str-cmp.c \ @@ -124,7 +124,7 @@ am__libqsecmn_la_SOURCES_DIST = alg-base64.c alg-rand.c alg-search.c \ @ENABLE_XCMGRS_TRUE@am__objects_2 = cp949.lo cp950.lo am_libqsecmn_la_OBJECTS = alg-base64.lo alg-rand.lo alg-search.lo \ alg-sort.lo assert.lo chr.lo dir.lo dll.lo env.lo gdl.lo \ - htb.lo fio.lo fma.lo fmt-intmax.lo fmt-out.lo fs.lo \ + htb.lo fio.lo fma.lo fmt-intmax.lo fmt-out.lo fs.lo fs-copy.lo \ fs-delete.lo fs-err.lo fs-make.lo fs-move.lo glob.lo hton.lo \ ipad.lo lda.lo main.lo mb8.lo mbwc.lo mbwc-str.lo mem.lo \ mux.lo nwad.lo nwad-skad.lo nwif.lo nwif-cfg.lo nwio.lo oht.lo \ @@ -414,17 +414,17 @@ noinst_HEADERS = \ libqsecmn_la_SOURCES = alg-base64.c alg-rand.c alg-search.c alg-sort.c \ assert.c chr.c dir.c dll.c env.c gdl.c htb.c fio.c fma.c \ - fmt-intmax.c fmt-out.c fs.c fs-delete.c fs-err.c fs-make.c \ - fs-move.c glob.c hton.c ipad.c lda.c main.c mb8.c mbwc.c \ - mbwc-str.c mem.c mux.c nwad.c nwad-skad.c nwif.c nwif-cfg.c \ - nwio.c oht.c opt.c path-base.c path-canon.c path-core.c \ - path-merge.c pio.c pma.c rbt.c rex.c sck.c sio.c sll.c slmb.c \ - str-beg.c str-cat.c str-chr.c str-cnv.c str-cmp.c str-cpy.c \ - str-del.c str-dup.c str-dyn.c str-end.c str-excl.c str-fcpy.c \ - str-fmt.c str-fnmat.c str-incl.c str-join.c str-len.c \ - str-pac.c str-pbrk.c str-put.c str-rev.c str-rot.c str-set.c \ - str-spl.c str-spn.c str-str.c str-subst.c str-tok.c str-trm.c \ - str-word.c task.c time.c tio.c tmr.c tre.c tre-ast.c \ + fmt-intmax.c fmt-out.c fs.c fs-copy.c fs-delete.c fs-err.c \ + fs-make.c fs-move.c glob.c hton.c ipad.c lda.c main.c mb8.c \ + mbwc.c mbwc-str.c mem.c mux.c nwad.c nwad-skad.c nwif.c \ + nwif-cfg.c nwio.c oht.c opt.c path-base.c path-canon.c \ + path-core.c path-merge.c pio.c pma.c rbt.c rex.c sck.c sio.c \ + sll.c slmb.c str-beg.c str-cat.c str-chr.c str-cnv.c str-cmp.c \ + str-cpy.c str-del.c str-dup.c str-dyn.c str-end.c str-excl.c \ + str-fcpy.c str-fmt.c str-fnmat.c str-incl.c str-join.c \ + str-len.c str-pac.c str-pbrk.c str-put.c str-rev.c str-rot.c \ + str-set.c str-spl.c str-spn.c str-str.c str-subst.c str-tok.c \ + str-trm.c str-word.c task.c time.c tio.c tmr.c tre.c tre-ast.c \ tre-compile.c tre-match-bt.c tre-match-pa.c tre-parse.c \ tre-stack.c uri.c utf8.c xma.c $(am__append_1) $(am__append_2) libqsecmn_la_LDFLAGS = -version-info 1:0:0 -no-undefined @@ -528,6 +528,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fma.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmt-intmax.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmt-out.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fs-copy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fs-delete.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fs-err.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fs-make.Plo@am__quote@ diff --git a/qse/lib/cmn/dir.c b/qse/lib/cmn/dir.c index aaafccfd..a4ede623 100644 --- a/qse/lib/cmn/dir.c +++ b/qse/lib/cmn/dir.c @@ -547,7 +547,7 @@ static int read_dir_to_tbuf (qse_dir_t* dir, void** name) /* ------------------------------------------------------------------- */ if (dir->status & STATUS_DONE) return (dir->status & STATUS_DONE_ERR)? -1: 0; - if (dir->flags & QSE_DIR_LIMITED) + if (dir->flags & QSE_DIR_SKIPSPCDIR) { /* skip . and .. */ while (IS_CURDIR(dir->wfd.cFileName) || IS_PREVDIR(dir->wfd.cFileName)) @@ -617,7 +617,7 @@ static int read_dir_to_tbuf (qse_dir_t* dir, void** name) if (dir->count <= 0) return 0; - if (dir->flags & QSE_DIR_LIMITED) + if (dir->flags & QSE_DIR_SKIPSPCDIR) { /* skip . and .. */ while (IS_CURDIR_M(dir->ffb.achName) || IS_PREVDIR_M(dir->ffb.achName)) @@ -677,7 +677,7 @@ static int read_dir_to_tbuf (qse_dir_t* dir, void** name) if (dir->status & STATUS_DONE) return (dir->status & STATUS_DONE_ERR)? -1: 0; - if (dir->flags & QSE_DIR_LIMITED) + if (dir->flags & QSE_DIR_SKIPSPCDIR) { /* skip . and .. */ while (IS_CURDIR_M(dir->f.name) || IS_PREVDIR_M(dir->f.name)) @@ -753,7 +753,7 @@ read: return -1; } - if (dir->flags & QSE_DIR_LIMITED) + if (dir->flags & QSE_DIR_SKIPSPCDIR) { /* skip . and .. */ if (IS_CURDIR_M(de->d_name) || diff --git a/qse/lib/cmn/fs-delete.c b/qse/lib/cmn/fs-delete.c index f3c79186..0e6d1967 100644 --- a/qse/lib/cmn/fs-delete.c +++ b/qse/lib/cmn/fs-delete.c @@ -201,7 +201,7 @@ static int purge_directory_contents (qse_fs_t* fs, const qse_char_t* path) qse_dir_errnum_t errnum; /* 'dir' is asked to skip special entries like . and .. */ - dir = qse_dir_open (fs->mmgr, 0, path, QSE_DIR_LIMITED, &errnum); + dir = qse_dir_open (fs->mmgr, 0, path, QSE_DIR_SKIPSPCDIR, &errnum); if (dir) { /* it must be a directory. delete all entries under it */ diff --git a/qse/lib/cmn/fs-move.c b/qse/lib/cmn/fs-move.c index cdce5c07..3ed0620c 100644 --- a/qse/lib/cmn/fs-move.c +++ b/qse/lib/cmn/fs-move.c @@ -73,29 +73,6 @@ struct fop_t typedef struct fop_t fop_t; - -/* internal flags. it must not overlap with qse_fs_cpfile_flag_t enumerators */ -#define CPFILE_DST_ATTR (1 << 27) -#define CPFILE_DST_PATH_DUP (1 << 28) -#define CPFILE_DST_FSPATH_DUP (1 << 29) -#define CPFILE_DST_FSPATH_MERGED (1 << 30) - -struct cpfile_t -{ - int flags; - - qse_fs_char_t* src_fspath; - qse_fs_char_t* dst_fspath; - - qse_char_t* src_path; - qse_char_t* dst_path; - - qse_fs_attr_t src_attr; - qse_fs_attr_t dst_attr; -}; -typedef struct cpfile_t cpfile_t; - - int qse_fs_move (qse_fs_t* fs, const qse_char_t* oldpath, const qse_char_t* newpath) { @@ -481,374 +458,3 @@ static int move_file_in_fs (qse_fs_t* fs, const qse_fs_char_t* oldpath, const qs #endif } - -static int merge_dstdir_and_file (qse_fs_t* fs, cpfile_t* cpfile) -{ - qse_fs_char_t* fstmp; - - /* if the destination is directory, copy the base name of the source - * and append it to the end of the destination, targetting at an entry - * in the directory */ - QSE_ASSERT (cpfile->dst_attr.isdir); - - if (cpfile->dst_path) - { - qse_char_t* tmp; - - tmp = qse_mergepathdup (cpfile->dst_path, qse_basename (cpfile->src_path), fs->mmgr); - if (!tmp) - { - fs->errnum = QSE_FS_ENOMEM; - return -1; - } - - if (cpfile->flags & CPFILE_DST_PATH_DUP) - QSE_MMGR_FREE (fs->mmgr, cpfile->dst_path); - - cpfile->dst_path = tmp; - cpfile->flags |= CPFILE_DST_PATH_DUP; - } - - - fstmp = merge_fspath_dup (cpfile->dst_fspath, get_fspath_base (cpfile->src_fspath), fs->mmgr); - if (!fstmp) - { - fs->errnum = QSE_FS_ENOMEM; - return -1; - } - - if (cpfile->flags & CPFILE_DST_FSPATH_DUP) - QSE_MMGR_FREE (fs->mmgr, cpfile->dst_fspath); - cpfile->dst_fspath = fstmp; - cpfile->flags |= CPFILE_DST_FSPATH_DUP; - - if (qse_fs_getattr (fs, cpfile->dst_fspath, &cpfile->dst_attr) >= 0) - { - cpfile->flags |= CPFILE_DST_ATTR; - } - else - { - cpfile->flags &= ~CPFILE_DST_ATTR; - } - - cpfile->flags |= CPFILE_DST_FSPATH_MERGED; - - - return 0; -} - - - -/* -#if defined(_WIN32) -DWORD copy_file_progress ( - LARGE_INTEGER TotalFileSize, - LARGE_INTEGER TotalBytesTransferred, - LARGE_INTEGER StreamSize, - LARGE_INTEGER StreamBytesTransferred, - DWORD dwStreamNumber, - DWORD dwCallbackReason, - HANDLE hSourceFile, - HANDLE hDestinationFile, - LPVOID lpData) -{ -} -#endif -*/ - -/* copy - * -> progress - * -> abort/cancel - * -> replace/overwrite - * -> symbolic link - */ - -static int copy_file_in_fs (qse_fs_t* fs, cpfile_t* cpfile) -{ -#if defined(_WIN32) - /* ------------------------------------------------------ */ - DWORD copy_flags = 0; - - - if (flags & QSE_FS_CPFILE_SYMLINK) - copy_flags |= COPY_FILE_COPY_SYMLINK; - if (!(flags & QSE_FS_CPFILE_REPLACE)) - copy_flags |= COPY_FILE_FAIL_IF_EXISTS; - -/* - if (fs->cbs.cp) - { - Specify callback??? - } -*/ - - if (CopyFileEx (oldpath, newpath, QSE_NULL, QSE_NULL, QSE_NULL, copy_flags) == FALSE) - { - fs->errnum = qse_fs_syserrtoerrnum (fs, e); - return -1; - } - - return 0; - /* ------------------------------------------------------ */ - -#elif defined(__OS2__) - /* ------------------------------------------------------ */ - - APIRET rc; - USHORT opmode = 0; - - if (flags & QSE_FS_CPFILE_REPLACE) opmode |= 1; /* set bit 0 */ - - rc = DosCopy (oldpath, newpath, opmode, 0); - if (rc != NO_ERROR) - { - fs->errnum = qse_fs_syserrtoerrnum (fs, rc); - return -1; - } - - return 0; - - /* ------------------------------------------------------ */ - -#elif defined(__DOS__) - - /* ------------------------------------------------------ */ - if (rename (oldpath, newpath) <= -1) - { - /* FYI, rename() on watcom seems to set - * errno to EACCES when the new path exists. */ - - unlink (newpath); - if (rename (oldpath, newpath) <= -1) - { - fs->errnum = qse_fs_syserrtoerrnum (fs, errno); - return -1; - } - } - - return 0; - - /* ------------------------------------------------------ */ - -#else - if ((cpfile->flags & QSE_FS_CPFILE_SYMLINK) && cpfile->src_attr.islnk) - { - qse_fs_char_t* tmpbuf; - - /* TODO: use a static buffer is size is small enough */ - tmpbuf = QSE_MMGR_ALLOC (fs->mmgr, QSE_SIZEOF(*tmpbuf) * (cpfile->src_attr.size + 1)); - if (tmpbuf == QSE_NULL) - { - fs->errnum = QSE_FS_ENOMEM; - return -1; - } - - if (QSE_READLINK (cpfile->src_fspath, tmpbuf, cpfile->src_attr.size) <= -1 || - QSE_SYMLINK (tmpbuf, cpfile->dst_fspath) <= -1) - { - QSE_MMGR_FREE (fs->mmgr, tmpbuf); - fs->errnum = qse_fs_syserrtoerrnum (fs, errno); - return -1; - } - - QSE_MMGR_FREE (fs->mmgr, tmpbuf); - return 0; - } - else - { - int in = -1, out = -1; - qse_ssize_t in_len, out_len; - qse_uint8_t* bp; - - in = QSE_OPEN (cpfile->src_fspath, O_RDONLY, 0); - out = QSE_OPEN (cpfile->dst_fspath, O_CREAT | O_WRONLY | O_TRUNC, 0777); /* TODO: proper mode */ - - if (in <= -1 || out <= -1) - { - fs->errnum = qse_fs_syserrtoerrnum (fs, errno); - goto oops; - } - - while (1) - { - in_len = QSE_READ (in, fs->cpbuf, QSE_SIZEOF(fs->cpbuf)); - if (in_len <= 0) break; - - /* TODO: call progress callback */ - - bp = fs->cpbuf; - while (in_len > 0) - { - out_len = QSE_WRITE (out, bp, in_len); - if (out_len <= -1) goto oops; - bp += out_len; - in_len -= out_len; - } - } - - if (cpfile->flags & QSE_FS_CPFILE_PRESERVE) - { - #if defined(HAVE_FUTIMENS) - struct timespec ts[2]; - #elif defined(HAVE_FUTIMES) - struct timeval tv[2]; - #endif - - if (QSE_FCHOWN (out, cpfile->src_attr.uid, cpfile->src_attr.gid) <= -1) - { - fs->errnum = qse_fs_syserrtoerrnum (fs, errno); - goto oops; - } - - #if defined(HAVE_FUTIMENS) - ts[0].tv_sec = cpfile->src_attr.atime.sec; - ts[0].tv_nsec = cpfile->src_attr.atime.nsec; - ts[1].tv_sec = cpfile->src_attr.mtime.sec; - ts[1].tv_nsec = cpfile->src_attr.mtime.nsec; - if (QSE_FUTIMENS (out, ts) <= -1) - { - fs->errnum = qse_fs_syserrtoerrnum (fs, errno); - goto oops; - } - #elif defined(HAVE_FUTIME) - tv[0].tv_sec = cpfile->src_attr.atime.sec; - tv[0].tv_usec = QSE_NSEC_TO_USEC(cpfile->src_attr.atime.nsec); - tv[1].tv_sec = cpfile->src_attr.mtime.sec; - tv[1].tv_usec = QSE_NSEC_TO_USEC(cpfile->src_attr.mtime.nsec); - if (QSE_FUTIMES (out, tv) <= -1) - { - fs->errnum = qse_fs_syserrtoerrnum (fs, errno); - goto oops; - } - #else - # error neither futimens nor futimes exist - #endif - } - - QSE_CLOSE (out); - QSE_CLOSE (in); - - return 0; - - oops: - if (out >= 0) QSE_CLOSE (out); - if (in >= 0) QSE_CLOSE (in); - return -1; - } -#endif -} - -static int copy_file (qse_fs_t* fs, cpfile_t* cpfile) -{ - if (cpfile->src_attr.isdir) - { - fs->errnum = QSE_FS_ENOIMPL; /* TODO: copy a directory into a directory */ - return -1; - } - else - { - copy_file: - if (cpfile->flags & CPFILE_DST_ATTR) - { - if (cpfile->src_attr.ino == cpfile->dst_attr.ino && - cpfile->src_attr.dev == cpfile->dst_attr.dev) - { - /* cannot copy a file to itself */ - fs->errnum = QSE_FS_EINVAL; /* TODO: better error code */ - return -1; - } - - if (!(cpfile->flags & QSE_FS_CPFILE_NOTGTDIR) && - cpfile->dst_attr.isdir) - { - if (cpfile->flags & CPFILE_DST_FSPATH_MERGED) - { - /* merge_dstdir_and_file() has been called already. - * no more getting into a subdirectory */ - fs->errnum = QSE_FS_EISDIR; - return -1; - } - else - { - /* arrange to copy a file into a directory */ - if (merge_dstdir_and_file (fs, cpfile) <= -1) return -1; - goto copy_file; - } - } - - if (!(cpfile->flags & QSE_FS_CPFILE_REPLACE)) - { - fs->errnum = QSE_FS_EEXIST; - return -1; - } - } - - if (!cpfile->src_attr.isdir) - { - /* source is not a directory. */ - return copy_file_in_fs (fs, cpfile); - } - - /* source is a directory. is a recursive copy allowed? */ - fs->errnum = QSE_FS_ENOIMPL; - return -1; - } -} - -int qse_fs_cpfilembs (qse_fs_t* fs, const qse_mchar_t* srcpath, const qse_mchar_t* dstpath, int flags) -{ - cpfile_t cpfile; - int ret; - - QSE_MEMSET (&cpfile, 0, QSE_SIZEOF(cpfile)); - - cpfile.flags = flags & QSE_FS_CPFILE_ALL; /* public flags only */ - - cpfile.src_fspath = (qse_fs_char_t*)qse_fs_makefspathformbs (fs, srcpath); - cpfile.dst_fspath = (qse_fs_char_t*)qse_fs_makefspathformbs (fs, dstpath); - if (!cpfile.src_fspath || !cpfile.dst_fspath) goto oops; - if (cpfile.dst_fspath != dstpath) cpfile.flags |= CPFILE_DST_FSPATH_DUP; - - if (qse_fs_getattr (fs, cpfile.src_fspath, &cpfile.src_attr) <= -1) goto oops; - if (qse_fs_getattr (fs, cpfile.dst_fspath, &cpfile.dst_attr) >= 0) cpfile.flags |= CPFILE_DST_ATTR; - - ret = copy_file (fs, &cpfile); - - qse_fs_freefspathformbs (fs, dstpath, cpfile.dst_fspath); - qse_fs_freefspathformbs (fs, srcpath, cpfile.src_fspath); - return ret; - -oops: - if (cpfile.dst_fspath) qse_fs_freefspathformbs (fs, srcpath, cpfile.dst_fspath); - if (cpfile.src_fspath) qse_fs_freefspathformbs (fs, dstpath, cpfile.src_fspath); - return -1; -} - -int qse_fs_cpfilewcs (qse_fs_t* fs, const qse_wchar_t* srcpath, const qse_wchar_t* dstpath, int flags) -{ - cpfile_t cpfile; - int ret; - - QSE_MEMSET (&cpfile, 0, QSE_SIZEOF(cpfile)); - - cpfile.flags = flags & QSE_FS_CPFILE_ALL; /* public flags only */ - - cpfile.src_fspath = (qse_fs_char_t*)qse_fs_makefspathforwcs (fs, srcpath); - cpfile.dst_fspath = (qse_fs_char_t*)qse_fs_makefspathforwcs (fs, dstpath); - if (!cpfile.src_fspath || !cpfile.dst_fspath) goto oops; - if (cpfile.dst_fspath != dstpath) cpfile.flags |= CPFILE_DST_FSPATH_DUP; - - if (qse_fs_getattr (fs, cpfile.src_fspath, &cpfile.src_attr) <= -1) goto oops; - if (qse_fs_getattr (fs, cpfile.dst_fspath, &cpfile.dst_attr) >= 0) cpfile.flags |= CPFILE_DST_ATTR; - - ret = copy_file (fs, &cpfile); - - qse_fs_freefspathforwcs (fs, dstpath, cpfile.dst_fspath); - qse_fs_freefspathforwcs (fs, srcpath, cpfile.src_fspath); - return ret; - -oops: - if (cpfile.dst_fspath) qse_fs_freefspathforwcs (fs, srcpath, cpfile.dst_fspath); - if (cpfile.src_fspath) qse_fs_freefspathforwcs (fs, dstpath, cpfile.src_fspath); - return -1; -} diff --git a/qse/lib/cmn/fs.h b/qse/lib/cmn/fs.h index 1910b64b..6568a975 100644 --- a/qse/lib/cmn/fs.h +++ b/qse/lib/cmn/fs.h @@ -51,10 +51,10 @@ #endif #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) -# define DEFAULT_GLOB_FLAGS (QSE_GLOB_PERIOD | QSE_GLOB_LIMITED | QSE_GLOB_NOESCAPE | QSE_GLOB_IGNORECASE) +# define DEFAULT_GLOB_FLAGS (QSE_GLOB_PERIOD | QSE_GLOB_SKIPSPCDIR | QSE_GLOB_NOESCAPE | QSE_GLOB_IGNORECASE) # define DEFAULT_PATH_SEPARATOR QSE_T("\\") #else -# define DEFAULT_GLOB_FLAGS (QSE_GLOB_PERIOD | QSE_GLOB_LIMITED) +# define DEFAULT_GLOB_FLAGS (QSE_GLOB_PERIOD | QSE_GLOB_SKIPSPCDIR) # define DEFAULT_PATH_SEPARATOR QSE_T("/") #endif diff --git a/qse/lib/cmn/glob.c b/qse/lib/cmn/glob.c index 49410acb..83a497e7 100644 --- a/qse/lib/cmn/glob.c +++ b/qse/lib/cmn/glob.c @@ -441,9 +441,12 @@ entry: if (seg->wild) { + int dir_flags = 0; + if (g->flags & QSE_GLOB_SKIPSPCDIR) dir_flags |= QSE_DIR_SKIPSPCDIR; + dp = qse_dir_open ( g->mmgr, 0, QSE_STR_PTR(&g->path), - ((g->flags & QSE_GLOB_LIMITED)? QSE_DIR_LIMITED: 0), QSE_NULL); + dir_flags, QSE_NULL); if (dp) { tmp = QSE_STR_LEN(&g->path); @@ -490,7 +493,7 @@ entry: r->next = g->stack; g->stack = r; - + /* move to the function entry point as if * a recursive call has been made */ goto entry; diff --git a/qse/samples/cmn/fs03.c b/qse/samples/cmn/fs03.c index 0557af51..0e41383c 100644 --- a/qse/samples/cmn/fs03.c +++ b/qse/samples/cmn/fs03.c @@ -5,14 +5,20 @@ #include #include #include +#include #include static void print_usage (const qse_char_t* argv0) { - qse_fprintf (QSE_STDERR, QSE_T("Usage: %s command filename filename\n"), qse_basename(argv0)); - qse_fprintf (QSE_STDERR, QSE_T("Command is one of cpfile | cpfile-s\n")); - qse_fprintf (QSE_STDERR, QSE_T("Filename is a pattern for delXXX\n")); + qse_fprintf (QSE_STDERR, QSE_T("Usage: %s [options] source-filename target-filename\n"), qse_basename(argv0)); + qse_fprintf (QSE_STDERR, QSE_T("Options include:\n")); + qse_fprintf (QSE_STDERR, QSE_T(" -f force\n")); + qse_fprintf (QSE_STDERR, QSE_T(" -o overwrite\n")); + qse_fprintf (QSE_STDERR, QSE_T(" -p preserve\n")); + qse_fprintf (QSE_STDERR, QSE_T(" -r recursive\n")); + qse_fprintf (QSE_STDERR, QSE_T(" -s symlink\n")); + } static int fs_main (int argc, qse_char_t* argv[]) @@ -20,44 +26,74 @@ static int fs_main (int argc, qse_char_t* argv[]) qse_fs_t* fs; qse_fs_cbs_t cbs; int ret = 0; + qse_cint_t c; + int cpfile_flags = 0; - if (argc != 4) + static qse_opt_t opt = { - print_usage (argv[0]); - return -1; + QSE_T("foprs"), + QSE_NULL + }; + + while ((c = qse_getopt (argc, argv, &opt)) != QSE_CHAR_EOF) + { + switch (c) + { + case QSE_T('f'): + cpfile_flags |= QSE_FS_CPFILE_FORCE; + break; + + case QSE_T('o'): + cpfile_flags |= QSE_FS_CPFILE_REPLACE; + break; + + case QSE_T('p'): + cpfile_flags |= QSE_FS_CPFILE_PRESERVE; + break; + + case QSE_T('r'): + cpfile_flags |= QSE_FS_CPFILE_RECURSIVE; + break; + + case QSE_T('s'): + cpfile_flags |= QSE_FS_CPFILE_SYMLINK; + break; + + case QSE_T('?'): + qse_fprintf (QSE_STDERR, QSE_T("illegal option - '%c'\n"), opt.opt); + goto wrong_usage; + + case QSE_T(':'): + qse_fprintf (QSE_STDERR, QSE_T("bad argument for '%c'\n"), opt.opt); + goto wrong_usage; + + default: + goto wrong_usage; + } } + + if (opt.ind + 2 != argc) goto wrong_usage; + fs = qse_fs_open (QSE_MMGR_GETDFL(), 0); -/* +/* qse_memset (&cbs, 0, QSE_SIZEOF(cbs)); cbs.del = fs_del; qse_fs_setopt (fs, QSE_FS_CBS, &cbs); */ - if (qse_strcmp(argv[1], QSE_T("cpfile")) == 0) + if (qse_fs_cpfile (fs, argv[opt.ind], argv[opt.ind + 1], cpfile_flags) <= -1) { - if (qse_fs_cpfile (fs, argv[2], argv[3], 0) <= -1) - { - qse_fprintf (QSE_STDERR, QSE_T("cannot copy file - %d\n"), qse_fs_geterrnum(fs)); - ret = -1; - } - } - else if (qse_strcmp(argv[1], QSE_T("cpfile-s")) == 0) - { - if (qse_fs_cpfile (fs, argv[2], argv[3], QSE_FS_CPFILE_SYMLINK) <= -1) - { - qse_fprintf (QSE_STDERR, QSE_T("cannot copy file - %d\n"), qse_fs_geterrnum(fs)); - ret = -1; - } - } - else - { - print_usage (argv[0]); + qse_fprintf (QSE_STDERR, QSE_T("cannot copy file - %d\n"), qse_fs_geterrnum(fs)); ret = -1; } qse_fs_close (fs); return ret; + +wrong_usage: + print_usage (argv[0]); + return -1; } int main (int argc, qse_achar_t* argv[])