in reply to Re^3: odd line in windows
in thread odd line in windows

You only need do one or the other. Not both.

That is, if you are going to copy the string into an SV in order to return it, there is no reason not to allocate the local copy on the stack:

char* get_proc_name( int processID ) { TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>"); SV * outsv; ... outsv = newSVpv(szProcessName, 0); return outsv; }

You save an alloc and free that way.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^5: odd line in windows
by syphilis (Archbishop) on Sep 07, 2011 at 16:30 UTC
    You save an alloc and free that way

    Yes - I think that's a better approach.
    (However, specifying a return type of char * and then returning an SV * is something that doesn't work well for me ;-)
    I find the following works as expected (without any need to dynamically allocate/free memory) , and doesn't throw any warnings:
    SV * get_proc_name( int processID ) { char szProcessName[MAX_PATH] = {0}; HANDLE hProcess = OpenProcess ( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID ); if (NULL != hProcess ) { HMODULE hMod; DWORD cbNeeded; if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNee +ded) ) { GetModuleBaseName( hProcess, hMod, szProcessName, MAX_PATH + - 1); } else { szProcessName[0] = '#'; szProcessName[1] = 0; } } else { szProcessName[0] = '*'; szProcessName[1] = 0; } CloseHandle( hProcess ); return newSVpv(szProcessName, 0); }
    Cheers,
    Rob