Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: Win32-Registry build failure on windows

by syphilis (Archbishop)
on Sep 17, 2012 at 07:42 UTC ( [id://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

Replies are listed 'Best First'.
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
Domain Nodelet?
Node Status?
node history
Node Type: note [id://993985]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (5)
As of 2024-03-29 00:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found