#define PERL_NO_GET_CONTEXT
/* We don't need any interpreter or threads interaction */
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "shlobj.h"
void SHAddToRecentDocsA(pTHX_ SV* _path) {
STRLEN len;
const char * path = SvPVbyte(_path, len);
SHAddToRecentDocs(
SHARD_PATHA,
path
);
}
void SHAddToRecentDocsU(pTHX_ SV* _path) {
STRLEN len;
char* s = SvPVutf8(_path, len);
STRLEN length = MultiByteToWideChar(CP_UTF8, 0, s, len, 0, 0);
wchar_t* path;
Newx(path, len+1, wchar_t);
if( path ) {
MultiByteToWideChar(CP_UTF8, 0, s, len, path, length);
path[length] = L'\0';
}
SHAddToRecentDocs(
SHARD_PATHW,
path
);
Safefree(path);
}
void SHAddToRecentDocsW(pTHX_ SV* _path) {
STRLEN len;
const char * bytes = SvPVbyte(_path, len);
wchar_t * path;
unsigned char *p;
Newx(path, len+2, char);
memcpy( path, bytes, len );
// add a \0 to the end of path
path[ len/2 ] = 0;
SHAddToRecentDocs(
SHARD_PATHW,
path
);
Safefree( path );
}
MODULE = Win32API::RecentFiles PACKAGE = Win32API::RecentFiles
PROTOTYPES: DISABLE
void
SHAddToRecentDocsA (path)
SV * path
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
SHAddToRecentDocsA(aTHX_ path);
if (PL_markstack_ptr != temp) {
/* truly void, because dXSARGS not invoked */
PL_markstack_ptr = temp;
XSRETURN_EMPTY; /* return empty stack */
}
/* must have used dXSARGS; list context implied */
return; /* assume stack size is correct */
void
SHAddToRecentDocsW (path)
SV * path
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
SHAddToRecentDocsW(aTHX_ path);
if (PL_markstack_ptr != temp) {
/* truly void, because dXSARGS not invoked */
PL_markstack_ptr = temp;
XSRETURN_EMPTY; /* return empty stack */
}
/* must have used dXSARGS; list context implied */
return; /* assume stack size is correct */
void
SHAddToRecentDocsU (_path)
SV * _path
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
SHAddToRecentDocsU(aTHX_ _path);
if (PL_markstack_ptr != temp) {
/* truly void, because dXSARGS not invoked */
PL_markstack_ptr = temp;
XSRETURN_EMPTY; /* return empty stack */
}
/* must have used dXSARGS; list context implied */
return; /* assume stack size is correct */