en:ibm:ifs:routines:copy

FS_COPY

Purpose

Copy a specified file or subdirectory to a specified target.

Calling Sequence

int far pascal FS_COPY(flag, pcdfsi, pcdfsd, pSrc, iSrcCurDirEnd, pDst,
                       iDstCurDirEnd, nameType)
 
unsigned short flag;
struct cdfsi far * pcdfsi;
struct cdfsd far * pcdfsd;
char far * pSrc;
unsigned short iSrcCurDirEnd;
char far * pDst; unsigned short iDstCurDirEnd;
unsigned short nameType;

Where

flag is a bit mask controlling copy
0x0001 specifies that an existing target file/directory should be replaced
0x0002 specifies that a source file will be appended to the destination file.
All other bits are reserved.

(See the description of the DosCopy function call in the OS/2 Version 2.0 Control Program Programming Reference.)

pcdfsi is a pointer to the file-system-independent working directory structure.

pcdfsd is a pointer to the file-system-dependent working directory structure.

pSrc is a pointer to the ASCIIZ name of the source file/directory.

iSrcCurDirEnd is the index of the end of the current directory in pSrc. If = -1, there is no current directory relevant to the source name.

pDst is a pointer to the ASCIIZ name of the destination file/directory.

iDstCurDirEnd is the index of the end of the current directory in pDst. If = -1, there is no current directory relevant to the destination name.

nameType indicates the destination name type.
NameType == 0x0040 indicates non-8.3 filename format. All other values are reserved.

Remarks

The file specified in the source file name should be copied to the target file if possible.

The files specified may not be currently open. File system drivers must assure consistency of file allocation information and directory entries.

The file system driver returns the special CANNOT COPY error if it cannot perform the copy because:

  • it does not know how
  • the source and target are on different volumes
  • of any other reason for which it would make sense for its caller to perform the copy operation manually.

Returning ERROR_CANNOT_COPY indicates to its caller that it should attempt to perform the copy operation manually. Any other error will be returned directly to the caller of DosCopy. See the description of the DosCopy function call in the OS/2 Version 2.0 Control Program Programming Reference for other error codes that can be returned.

FS_COPY needs to check that certain types of illegal copying operations are not performed. A directory cannot be copied to itself or to one of its subdirectories. This is especially critical in situations where two different fully-qualified pathnames can refer to the same file or directory. For example, if X: is redirected to \\SERVER\SHARE, the X:\PATH and \\SERVER\SHARE\PATH refer to the same object.

The behavior of FS_COPY should match the behavior of the generic DosCopy routine.

The non-8.3 filename format attribute in the directory entry for the destination name should be set according to the value in nameType.