/*
* VMS::Stat.xs - VMS extensions to stat.h
*
* Version 0.01
* Peter Prymmer
* Revision: 26-APR-2004
*/
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include <libdef.h> /* LIB$_INVARG */
#include "ppport.h"
#include <stat.h>
MODULE = VMS::Stat PACKAGE = VMS::Stat
void
vmsmkdir(dir_spec,...)
char * dir_spec
PROTOTYPE: @
CODE:
mode_t mode;
mode_t default_mode = 0777;
unsigned int uic;
unsigned short max_versions;
unsigned short r_v_number;
int rc;
if (!dir_spec || !*dir_spec) {
SETERRNO(EINVAL,LIB$_INVARG);
XSRETURN_UNDEF;
}
if (items > 5) croak("too many args");
/* This hack stolen right out of vmsopen() */
switch (items) {
case 1:
rc = mkdir(dir_spec,default_mode);
break;
case 2:
mode = (mode_t)SvIV(ST(1));
rc = mkdir(dir_spec,mode);
break;
case 3:
mode = (mode_t)SvIV(ST(1));
uic = (unsigned int)SvIV(ST(2));
rc = mkdir(dir_spec,mode,uic);
break;
case 4:
mode = (mode_t)SvIV(ST(1));
uic = (unsigned int)SvIV(ST(2));
max_versions = (unsigned short)SvIV(ST(3));
rc = mkdir(dir_spec,mode,uic,max_versions);
break;
case 5:
mode = (mode_t)SvIV(ST(1));
uic = (unsigned int)SvIV(ST(2));
max_versions = (unsigned short)SvIV(ST(3));
r_v_number = (unsigned short)SvIV(ST(4));
rc = mkdir(dir_spec,mode,uic,max_versions,r_v_number);
break;
}
ST(0) = (rc == 0) ? &PL_sv_yes : &PL_sv_undef;