Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: Win32-Registry build failure on windows

by syphilis (Canon)
on Sep 17, 2012 at 07:42 UTC ( #993985=note: print w/ replies, xml ) Need Help??


in reply to Win32-Registry build failure on windows

One simple fix is to open the 'typemap' file that ships with the Win32::Registry source, and insert the following line at the beginning of that file:

FILETIME ANYTHING_YOU_WANT
The correct fix is (I think) to apply this patch to Registry.xs:
C:\sisyphusion\Win32-Registry-0.10>diff -u Registry.xs_orig Registry.x +s --- Registry.xs_orig 2012-05-22 19:19:27 +1000 +++ Registry.xs 2012-05-22 19:15:18 +1000 @@ -545,7 +545,7 @@ DWORD idx char *subkey = NO_INIT char *classname = NO_INIT - FILETIME lastwritetime = NO_INIT + SV * lastwritetime = NO_INIT CODE: char keybuffer[TMPBUFSZ]; DWORD keybuffersz = TMPBUFSZ; @@ -775,7 +775,7 @@ DWORD maxvalnamelen = NO_INIT DWORD maxvaldatalen = NO_INIT DWORD secdesclen = NO_INIT - FILETIME lastwritetime = NO_INIT + SV * lastwritetime = NO_INIT CODE: char keyclass[TMPBUFSZ]; FILETIME ft;
Cheers,
Rob


Comment on Re: Win32-Registry build failure on windows
Select or Download Code
Re^2: Win32-Registry build failure on windows
by bulk88 (Priest) on Sep 17, 2012 at 09:01 UTC
    It is used in some places sortof. I added "FILETIME T_IV" to the typemap. It works, but it isn't correct. For the record, Win32API::Registry treats FILETIMEs as 8 byte strings.
    bool RegQueryInfoKey(hkey,kclass,classsz,reserved,numsubkeys,maxsubkeylen,m +axclasslen,numvalues,maxvalnamelen,maxvaldatalen,secdesclen,lastwrite +time) HKEY hkey char *kclass = NO_INIT DWORD classsz = NO_INIT DWORD reserved = NO_INIT DWORD numsubkeys = NO_INIT DWORD maxsubkeylen = NO_INIT DWORD maxclasslen = NO_INIT DWORD numvalues = NO_INIT DWORD maxvalnamelen = NO_INIT DWORD maxvaldatalen = NO_INIT DWORD secdesclen = NO_INIT FILETIME lastwritetime = NO_INIT CODE: char keyclass[TMPBUFSZ]; FILETIME ft; LONG result; /* supress unreferenced variable warning */ (void)kclass; (void)reserved; (void)lastwritetime; classsz = sizeof(keyclass); result = RegQueryInfoKey(hkey, keyclass, &classsz, 0, &numsubkeys, &maxsubkeylen, &maxclasslen, &numvalues, &maxvalnamelen, &maxvaldatalen, &secdesclen, &ft); RETVAL = SUCCESS(result); if (!RETVAL) SetLastError(result); OUTPUT: RETVAL kclass SETPV(1, keyclass); numsubkeys maxsubkeylen maxclasslen numvalues maxvalnamelen maxvaldatalen secdesclen lastwritetime if (RETVAL) { ft2timet(&ft); } //////////////////////////////// bool RegEnumKeyEx(hkey,idx,subkey,classname,lastwritetime) HKEY hkey DWORD idx char *subkey = NO_INIT char *classname = NO_INIT FILETIME lastwritetime = NO_INIT CODE: char keybuffer[TMPBUFSZ]; DWORD keybuffersz = TMPBUFSZ; char classbuffer[TMPBUFSZ]; DWORD classbuffersz = TMPBUFSZ; FILETIME ft; LONG result = RegEnumKeyEx(hkey, idx, keybuffer, &keybuffersz, 0, classbuffer, &classbuffersz, &ft); /* supress unreferenced variable warning */ (void)subkey; (void)classname; (void)lastwritetime; RETVAL = SUCCESS(result); if (!RETVAL) SetLastError(result); OUTPUT: RETVAL subkey if (RETVAL) { SETPV(2, keybuffer); } classname if (RETVAL) { SETPV(3, classbuffer); } lastwritetime if (RETVAL) { SETNV(4, ft2timet(&ft)); }
    Notice lastwritetime output is broken in RegQueryInfoKey.
      I added "FILETIME T_IV" to the typemap

      You can actually specify whatever you like for "FILETIME" and it "will work" :-)
      Perl is satisfied if it can find a typemap entry - it doesn't care what type that entry specifies, or even if the specified type is one that it knows about.

      Of course, there should be no need for the typemap to mention FILETIME at all - and there isn't if Registry.xs is fixed.
      (I'm not sure that I made that clear.)

      Cheers,
      Rob

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://993985]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (3)
As of 2014-09-20 00:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (151 votes), past polls