#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#include <windows.h>
MODULE = Win32::Unicode::Dir PACKAGE = Win32::Unicode::Dir
PROTOTYPES: DISABLE
bool
create_directory(WCHAR *dirname)
CODE:
RETVAL = CreateDirectoryW(dirname, NULL);
OUTPUT:
RETVAL
SV*
get_current_directory()
CODE:
WCHAR cur[MAX_PATH];
GetCurrentDirectoryW(sizeof(cur), cur);
RETVAL = newSVpvn((char *)cur, wcslen(cur) * sizeof(WCHAR));
OUTPUT:
RETVAL
bool
set_current_directory(WCHAR *dirname)
CODE:
RETVAL = SetCurrentDirectoryW(dirname);
OUTPUT:
RETVAL
bool
remove_directory(WCHAR *dirname)
CODE:
RETVAL = RemoveDirectoryW(dirname);
OUTPUT:
RETVAL
void
find_first_file(SV* self, WCHAR *dirname)
CODE:
WIN32_FIND_DATAW info;
HANDLE handle = FindFirstFileW(dirname, &info);
HV* hv = (HV*)SvRV(self);
hv_stores(hv, "handle", newSVuv((DWORD)handle));
hv_stores(hv, "first", newSVpvn(info.cFileName, wcslen(info.cFileName) * sizeof(WCHAR)));
SV*
find_next_file(SV* self)
CODE:
WIN32_FIND_DATAW info;
HV* hv = (HV*)SvRV(self);
HANDLE handle = (HANDLE)SvUVx(*hv_fetchs(hv, "handle", 1));
if(FindNextFileW(handle, &info) == 0) {
XSRETURN_EMPTY;
}
RETVAL = newSVpvn((char *)info.cFileName, wcslen(info.cFileName) * sizeof(WCHAR));
OUTPUT:
RETVAL
bool
find_close(SV* self)
CODE:
HV* hv = (HV*)SvRV(self);
HANDLE handle = (HANDLE)SvUVx(*hv_fetchs(hv, "handle", 1));
RETVAL = FindClose(handle);
OUTPUT:
RETVAL