Jump to content

DosMkDir2

From EDM2
Revision as of 09:43, 24 November 2019 by Ak120 (talk | contribs)
Legacy Function Warning
It is recommended to use a newer replacement for this function.
Replacement: DosCreateDir
Remarks: This function was renamed to DosCreateDir on OS/2 2.0.

This call creates a subdirectory that has extended attributes associated with it.

Syntax

DosMkDir2 (DirName, EABuf, Reserved)

Parameters

DirName (PSZ) - input
Address of the ASCIIZ directory path name, which may or may not contain a drive specification. If no drive is specified, the current drive is assumed.
DosQSysInfo is called by an application during initialization to determine the maximum path length allowed by OS/2.
EABuf (PEAOP) - input/output
Address of the extended attribute buffer, which contains an EAOP structure.
Reserved (ULONG) - input
Reserved and must be set to zero.

Return Code

rc (USHORT) - return
Return code descriptions are:
  • 0 NO_ERROR
  • 3 ERROR_PATH_NOT_FOUND
  • 5 ERROR_ACCESS_DENIED
  • 26 ERROR_NOT_DOS_DISK
  • 87 ERROR_INVALID_PARAMETER
  • 108 ERROR_DRIVE_LOCKED
  • 206 ERROR_FILENAME_EXCED_RANGE
  • 254 ERROR_INVALID_EA_NAME
  • 255 ERROR_EA_LIST_INCONSISTENT

Remarks

DosMkDir2 allows an application to define extended attributes for a subdirectory at the time of its creation.

If any subdirectory names in the path do not exist, the subdirectory is not created. Upon return, a subdirectory is created at the end of the specified path.

DosQSysInfo must be used by an application to determine the maximum path length supported by OS/2. The returned value should be used to dynamically allocate buffers that are to be used to store paths.

If a program running with the NEWFILES bit set tries to create a directory with blanks immediately preceding the dot on a FAT drive, the system rejects the name. For example, if c: is a FAT drive, the name "file .txt" is rejected and the name "file.txt" is accepted.

Bindings

C

typedef struct _GEA {       /* gea */
 
  BYTE cbName;            /* name length not including NULL */
  CHAR szName[1];         /* attribute name */
 
} GEA;

typedef struct _GEALIST {   /* geal */
 
  ULONG  cbList;          /* total bytes of structure including full list */
  GEA list[1];            /* variable length GEA structures */
 
} GEALIST;

typedef struct _FEA {       /* fea */
 
  BYTE fEA;               /* flags */
  BYTE cbName;            /* name length not including NULL */
  USHORT cbValue;         /* value length */
 
} FEA;

typedef struct _FEALIST {   /* feal */
 
  ULONG  cbList;          /* total bytes of structure including full list */
  FEA list[1];            /* variable length FEA structures */
 
} FEALIST;

typedef struct _EAOP {      /* eaop */
 
  PGEALIST fpGEAList;     /* general EA list */
  PFEALIST fpFEAList;     /* full EA list */
  ULONG  oError;
 
} EAOP;

#define INCL_DOSFILEMGR

USHORT  rc = DosMkDir2(DirName, EABuf, Reserved);

PSZ     DirName;       /* New directory name string */
PEAOP   EABuf;         /* Extended attribute buffer */
ULONG   0;             /* Reserved (must be zero) */

USHORT  rc;            /* return code */

MASM

GEA    struc
  gea_cbName      db  ?          ;name length not including NULL
  gea_szName      db  1 dup (?)  ;attribute name
GEA    ends

GEALIST    struc
  geal_cbList     dd  ?      ;total bytes of structure including full list
  geal_list       db  size GEA * 1 dup (?) ;variable length GEA structures
GEALIST    ends

FEA   struc
  fea_fEA         db  ? ;flags
  fea_cbName      db  ? ;name length not including NULL
  fea_cbValue     dw  ? ;value length
FEA   ends

FEALIST struc
  feal_cbList     dd  ?      ;total bytes of structure including full list
  feal_list       db  size FEA * 1 dup (?) ;variable length FEA structures
FEALIST ends

EAOP    struc
  eaop_fpGEAList  dd  ? ;general EA list
  eaop_fpFEAList  dd  ? ;full EA list
  eaop_oError     dd  ? ;
EAOP    ends

EXTRN  DosMkDir2:FAR
INCL_DOSFILEMGR     EQU 1

PUSH@  ASCIIZ  DirName       ;New directory name string
PUSH@  OTHER   EABuf         ;Extended attribute buffer
PUSH   DWORD   0             ;Reserved (must be zero)
CALL   DosMkDir2

Returns WORD

Related Functions