* Re: mkshortcut debugging problem @ 2002-03-02 19:49 Joshua Daniel Franklin 2002-03-04 4:50 ` Jason Tishler 2002-03-12 23:33 ` Charles Wilson 0 siblings, 2 replies; 11+ messages in thread From: Joshua Daniel Franklin @ 2002-03-02 19:49 UTC (permalink / raw) To: Jason Tishler; +Cc: cygwin Thanks much, I'll take a look. Sure is easy to read...looks almost like Python. :) __________________________________________________ Do You Yahoo!? Yahoo! Sports - sign up for Fantasy Baseball http://sports.yahoo.com -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: mkshortcut debugging problem 2002-03-02 19:49 mkshortcut debugging problem Joshua Daniel Franklin @ 2002-03-04 4:50 ` Jason Tishler 2002-03-12 23:33 ` Charles Wilson 1 sibling, 0 replies; 11+ messages in thread From: Jason Tishler @ 2002-03-04 4:50 UTC (permalink / raw) To: Joshua Daniel Franklin; +Cc: cygwin Joshua, On Sat, Mar 02, 2002 at 07:49:11PM -0800, Joshua Daniel Franklin wrote: > Thanks much, I'll take a look. No problem. Sorry for not directly trying to help debug your problem. And sorry for not coming forward with (and/or contributing) my code sooner. Jason -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: mkshortcut debugging problem 2002-03-02 19:49 mkshortcut debugging problem Joshua Daniel Franklin 2002-03-04 4:50 ` Jason Tishler @ 2002-03-12 23:33 ` Charles Wilson 2002-03-13 6:37 ` Joshua Daniel Franklin 1 sibling, 1 reply; 11+ messages in thread From: Charles Wilson @ 2002-03-12 23:33 UTC (permalink / raw) To: Joshua Daniel Franklin; +Cc: cygwin Joshua Daniel Franklin wrote: > Thanks much, I'll take a look. Sure is easy to read...looks almost like > Python. > Any progress tracking down this bug? Joshua?? --Chuck (wanting to release cygutils-1.0.0) -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: mkshortcut debugging problem 2002-03-12 23:33 ` Charles Wilson @ 2002-03-13 6:37 ` Joshua Daniel Franklin 0 siblings, 0 replies; 11+ messages in thread From: Joshua Daniel Franklin @ 2002-03-13 6:37 UTC (permalink / raw) To: Charles Wilson; +Cc: cygwin Let me know if you can't get the attachment, or need anything else. http://cygwin.com/ml/cygwin/2002-03/msg00470.html --- Charles Wilson <cwilson@ece.gatech.edu> wrote: > Joshua Daniel Franklin wrote: > > > Thanks much, I'll take a look. Sure is easy to read...looks almost like > > Python. > > > > > Any progress tracking down this bug? Joshua?? > > --Chuck > (wanting to release cygutils-1.0.0) > __________________________________________________ Do You Yahoo!? Try FREE Yahoo! Mail - the world's greatest free email! http://mail.yahoo.com/ -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: mkshortcut debugging problem @ 2002-03-07 23:03 Joshua Daniel Franklin 0 siblings, 0 replies; 11+ messages in thread From: Joshua Daniel Franklin @ 2002-03-07 23:03 UTC (permalink / raw) To: cygwin [-- Attachment #1: Type: text/plain, Size: 869 bytes --] Well, after going over hoards of MSDN documents and adjusting my code, I realized what most developers' first guess might have been... I followed the null pointer. Madness overtook me. I corrected this (char *)problem and my util actually passed all my tests, no matter which directory it was in. I also ran it through GNU indent a few times (just to make sure :) Features of this version include: --Prettier code, thanks to indent --Better error checking --Works ;) Because of the indent the patch is bigger than the actual file, so here's the whole thing. (Chuck, this should be drop-in replacement for the one in cygutils-0.9.9. I apologize for the inconvenience.) Thanks again to Corinna and Jason for the help. __________________________________________________ Do You Yahoo!? Try FREE Yahoo! Mail - the world's greatest free email! http://mail.yahoo.com/ [-- Attachment #2: mkshortcut.c.bz2 --] [-- Type: application/octet-stream, Size: 3491 bytes --] [-- Attachment #3: Type: text/plain, Size: 214 bytes --] -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: mkshortcut debugging problem
@ 2002-03-01 17:00 Joshua Daniel Franklin
2002-03-02 8:08 ` Jason Tishler
0 siblings, 1 reply; 11+ messages in thread
From: Joshua Daniel Franklin @ 2002-03-01 17:00 UTC (permalink / raw)
To: cygwin
> On Thu, Feb 28, 2002 at 04:03:34PM -0800, Joshua Daniel Franklin wrote:
> > The code that produces this error is:
> >
> > MultiByteToWideChar (CP_ACP, 0, lname, -1, widepath, MAX_PATH);
> > hres = pf->lpVtbl->Save (pf, widepath, TRUE);
> > if (!SUCCEEDED(hres))
> > {
> > fprintf(stderr, "%s: Save to persistant storage failed (Does the
> > directo
> > ry you are writing to exist?)\n", prog_name);
> > exit(3);
> > }
>
> Try the following before calling pf->lpVtbl->Save():
>
> GetCurrentDirectory(dir);
> pf->lpVtbl->SetRelativePath(dir);
>
> This is just basically as it should work. Look in MSDN for the
> exact usage.
>
> Corinna
>
Tried this, no difference:
/usr/src/cygutils-0.9.9/src-gpl$ ./mkshortcut -P http://www.cygwin.com #works
/usr/src/cygutils-0.9.9/src-gpl$ cp ./mkshortcut.exe /bin/
/usr/src/cygutils-0.9.9/src-gpl$ /bin/mkshortcut -P http://www.cygwin.com
mkshortcut: Save to persistant storage failed (Does the directory you are
writing to exist?)
Has anyone even seen something like this before?
__________________________________________________
Do You Yahoo!?
Yahoo! Sports - sign up for Fantasy Baseball
http://sports.yahoo.com
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: mkshortcut debugging problem 2002-03-01 17:00 Joshua Daniel Franklin @ 2002-03-02 8:08 ` Jason Tishler 0 siblings, 0 replies; 11+ messages in thread From: Jason Tishler @ 2002-03-02 8:08 UTC (permalink / raw) To: Joshua Daniel Franklin; +Cc: cygwin [-- Attachment #1: Type: text/plain, Size: 322 bytes --] Joshua, On Fri, Mar 01, 2002 at 05:00:36PM -0800, Joshua Daniel Franklin wrote: > Has anyone even seen something like this before? No, but see attached for my version of mkshortcut -- mksc. Note that mksc.cpp needs to be compiled with MS cl.exe, but hopefully perusing the code will help you debug your problem. Jason [-- Attachment #2: mksc.cpp --] [-- Type: text/plain, Size: 6705 bytes --] /* * Copyright (c) 2000, 2002, Jason Tishler. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * A copy of the GNU General Public License can be found at * http://www.gnu.org/ * * Written by Jason Tishler <jason@tishler.net> * * $Id: mksc.cpp,v 1.3 2002/03/02 16:12:11 jt Exp $ */ #include <windows.h> #include <iostream> #include <string> #include <shlguid.h> #include <shlobj.h> using namespace std; DWORD MakeShortcut( const string& aPath, const string& anArguments, const string& aWorkingDirectory, const string& anIconLocation, int anIconIndex, const string& aShortcutPath); void ParseArgs( int argc, char* argv[], string& aPath, string& anArguments, string& aWorkingDirectory, string& anIconLocation, int& anIconIndex, string& aShortcutPath); void PrintUsage(); string CollapseBackslashes(const char* aString); int main(int argc, char* argv[]) { string aPath; string anArguments; string aWorkingDirectory; string anIconLocation; int anIconIndex = 0; string aShortcutPath; // Parse command line arguments ParseArgs( argc, argv, aPath, anArguments, aWorkingDirectory, anIconLocation, anIconIndex, aShortcutPath); // Create shortcut DWORD aStatus = MakeShortcut( aPath, anArguments, aWorkingDirectory, anIconLocation, anIconIndex, aShortcutPath); if (aStatus != ERROR_SUCCESS) { cerr << "MakeShortcut failed with error = " << aStatus << endl; } return (aStatus == ERROR_SUCCESS) ? 0 : 2; } DWORD MakeShortcut( const string& aPath, const string& anArguments, const string& aWorkingDirectory, const string& anIconLocation, int anIconIndex, const string& aShortcutPath) { // Variable definitions located here due to use of gotos IShellLink *aShellLink = 0; IPersistFile* aPersistFile = 0; int aStatus2 = 0; DWORD aReturnCode = ERROR_SUCCESS; // Initialize COM HRESULT aStatus = CoInitialize(0); if (FAILED(aStatus)) { aReturnCode = GetLastError(); cerr << "CoInitialize failed with error = " << aReturnCode << endl; goto exit; } // Create shell link instance aStatus = CoCreateInstance( CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **) &aShellLink); if (FAILED(aStatus)) { aReturnCode = GetLastError(); cerr << "CoCreateInstance failed with error = " << aReturnCode << endl; goto exit; } // Set the shell link's command path aStatus = aShellLink->SetPath(aPath.c_str()); if (FAILED(aStatus)) { aReturnCode = aStatus; cerr << "IShellLink::SetPath failed with HRESULT = " << aStatus << endl; goto exit; } // Set the shell link's command arguments aStatus = aShellLink->SetArguments(anArguments.c_str()); if (FAILED(aStatus)) { aReturnCode = aStatus; cerr << "IShellLink::SetArguments failed with HRESULT = " << aStatus << endl; goto exit; } // Set the shell link's working directory, if necessary if (aWorkingDirectory.size() > 0) { aStatus = aShellLink->SetWorkingDirectory(aWorkingDirectory.c_str()); if (FAILED(aStatus)) { aReturnCode = aStatus; cerr << "IShellLink::SetWorkingDirectory failed with HRESULT = " << aStatus << endl; goto exit; } } // Set the shell link's icon, if necessary if (anIconLocation.size() > 0) { aStatus = aShellLink->SetIconLocation(anIconLocation.c_str(), anIconIndex); if (FAILED(aStatus)) { aReturnCode = aStatus; cerr << "IShellLink::SetIconLocation failed with HRESULT = " << aStatus << endl; goto exit; } } // Get the shell link's persist file interface aStatus = aShellLink->QueryInterface( IID_IPersistFile, (void **) &aPersistFile); if (FAILED(aStatus)) { aReturnCode = GetLastError(); cerr << "IShellLink::QueryInterface failed with error = " << aReturnCode << endl; goto exit; } // Convert the shortcut path to Unicode WCHAR aWideShortcutPath[MAX_PATH]; aStatus2 = MultiByteToWideChar( CP_ACP, 0, aShortcutPath.c_str(), -1, aWideShortcutPath, MAX_PATH); if (aStatus2 == 0) { aReturnCode = GetLastError(); cerr << "MultiByteToWideChar failed with error = " << aReturnCode << endl; goto exit; } // Save the shell link to the filesytem aStatus = aPersistFile->Save(aWideShortcutPath, TRUE); if (FAILED(aStatus)) { aReturnCode = GetLastError(); cerr << "IPersistFile::Save failed with error = " << aReturnCode << endl; goto exit; } exit: // Clean up if (aPersistFile) aPersistFile->Release(); if (aShellLink) aShellLink->Release(); CoUninitialize(); return aReturnCode; } void ParseArgs( int argc, char* argv[], string& aPath, string& anArguments, string& aWorkingDirectory, string& anIconLocation, int& anIconIndex, string& aShortcutPath) { // Print usage, if appropriate if (argc == 1) { PrintUsage(); exit(1); } // Process arguments for (int i = 1; i < argc; i += 2) { if (i + 1 >= argc) { PrintUsage(); exit(1); } if (strcmp(argv[i], "--cmd") == 0) { aPath = CollapseBackslashes(argv[i + 1]); } else if (strcmp(argv[i], "--args") == 0) { anArguments = CollapseBackslashes(argv[i + 1]); } else if (strcmp(argv[i], "--dir") == 0) { aWorkingDirectory = CollapseBackslashes(argv[i + 1]); } else if (strcmp(argv[i], "--icon") == 0) { anIconLocation = CollapseBackslashes(argv[i + 1]); } else if (strcmp(argv[i], "--index") == 0) { anIconIndex = atoi(argv[i + 1]); } else if (strcmp(argv[i], "--shortcut") == 0) { aShortcutPath = CollapseBackslashes(argv[i + 1]); } else { PrintUsage(); exit(1); } } // Check for mandatory arguments if (aPath.size() == 0 || anArguments.size() == 0 || aShortcutPath.size() == 0) { PrintUsage(); exit(1); } } void PrintUsage() { cerr << "usage: mksc --cmd CommandPath --args CommandArguments" << endl; cerr << " --shortcut ShortcutPath [--dir WorkingDirectory]" << endl; cerr << " [--icon IconPath] [--index IconIndex]" << endl; } string CollapseBackslashes(const char* aString) { const string theDoubleBackslashRe = "\\\\"; const string theSpaceRe = " "; string aFixedString = aString; // Determine if string does not contains any spaces, if so just return if (string::size_type i = aFixedString.find(theSpaceRe) == string::npos) return aFixedString; // Collapse double backslashes into single for (string::size_type i = aFixedString.find(theDoubleBackslashRe); i != string::npos; i = aFixedString.find(theDoubleBackslashRe, i)) { i++; aFixedString.erase(i, 1); } return aFixedString; } [-- Attachment #3: Type: text/plain, Size: 214 bytes --] -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: mkshortcut debugging problem
@ 2002-02-28 22:50 Joshua Daniel Franklin
0 siblings, 0 replies; 11+ messages in thread
From: Joshua Daniel Franklin @ 2002-02-28 22:50 UTC (permalink / raw)
To: cygwin
>Permissions or ACLs on the two different directories? Try
>
>getfacl {dir1}
>getfacl {dir2}
>
>Same? Different?
Well, it's writing to the same directory in both cases, but the ACLs are:
$ getfacl.exe /c/Documents\ and\ Settings/All\ Users/Desktop/
# file: /c/Documents and Settings/All Users/Desktop/
# owner: Administrator
# group: None
user::rwx
group::rwx
group:Users:r-x
group:Power Users:rwx
mask::rwx
other::r-x
default:user::---
default:group::---
default:group:Users:---
default:group:Power Users:rwx
default:mask::---
default:other::---
Or did you mean the ACLs on /bin and /usr/src...? Those look identical.
__________________________________________________
Do You Yahoo!?
Yahoo! Greetings - Send FREE e-cards for every occasion!
http://greetings.yahoo.com
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
^ permalink raw reply [flat|nested] 11+ messages in thread
* mkshortcut debugging problem @ 2002-02-28 17:33 Joshua Daniel Franklin 2002-02-28 19:30 ` Charles Wilson 2002-03-01 5:00 ` Corinna Vinschen 0 siblings, 2 replies; 11+ messages in thread From: Joshua Daniel Franklin @ 2002-02-28 17:33 UTC (permalink / raw) To: cygwin I updated to cygutils 0.9.9 yesterday which included the utility 'mkshortcut', which I wrote. I was horrified to find that it dumps the stack when attempting to set the name for a shortcut (the -n option). I *did* make sure it worked before sending Chuck the code, after all. My first thought was that I accidentally sent an old version, so I got the source and found that it did indeed crash when built as I had been doing it. I freely acknowledge that the code, especially string-handling, is a mess, and after making what seem to be arbitary changes it again works...but only from the current directory. When I copy the new version to /bin (or /usr/bin) this is what happens: /usr/src/cygutils-0.9.9/src-gpl$ /usr/src/cygutils-0.9.9/src-gpl/mkshortcut.exe -DA /usr/local/bin/ [This works, producing bin.lnk in the All Users\Desktop\ dir] /usr/src/cygutils-0.9.9/src-gpl$ rm /c/Documents\ and\ Settings/All\ Users/Desktop/bin.lnk /usr/src/cygutils-0.9.9/src-gpl$ cp /usr/src/cygutils-0.9.9/src-gpl/mkshortcut.exe /usr/bin/ /usr/src/cygutils-0.9.9/src-gpl$ mkshortcut.exe -DA /usr/local/bin/ mkshortcut.exe: Save to persistant storage failed (Does the directory you are writing to exist?) The code that produces this error is: MultiByteToWideChar (CP_ACP, 0, lname, -1, widepath, MAX_PATH); hres = pf->lpVtbl->Save (pf, widepath, TRUE); if (!SUCCEEDED(hres)) { fprintf(stderr, "%s: Save to persistant storage failed (Does the directo ry you are writing to exist?)\n", prog_name); exit(3); } I'm afraid I have no idea how to debug this, and I've begun to make what seem like arbitrary changes. Why would it work from one directory and not another? (BTW, I tried printf'ing the lname string and it is identical in both cases.) Anyone have any suggestions? Thanks. Joshua Daniel Franklin __________________________________________________ Do You Yahoo!? Yahoo! Greetings - Send FREE e-cards for every occasion! http://greetings.yahoo.com -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: mkshortcut debugging problem 2002-02-28 17:33 Joshua Daniel Franklin @ 2002-02-28 19:30 ` Charles Wilson 2002-03-01 5:00 ` Corinna Vinschen 1 sibling, 0 replies; 11+ messages in thread From: Charles Wilson @ 2002-02-28 19:30 UTC (permalink / raw) To: Joshua Daniel Franklin; +Cc: cygwin Joshua Daniel Franklin wrote: > > The code that produces this error is: > > MultiByteToWideChar (CP_ACP, 0, lname, -1, widepath, MAX_PATH); > hres = pf->lpVtbl->Save (pf, widepath, TRUE); > if (!SUCCEEDED(hres)) > { > fprintf(stderr, "%s: Save to persistant storage failed (Does the > directo > ry you are writing to exist?)\n", prog_name); > exit(3); > } > > I'm afraid I have no idea how to debug this, and I've begun to make what > seem like arbitrary changes. Why would it work from one directory and not > another? (BTW, I tried printf'ing the lname string and it is identical in > both cases.) Anyone have any suggestions? Permissions or ACLs on the two different directories? Try getfacl {dir1} getfacl {dir2} Same? Different? --Chuck -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: mkshortcut debugging problem 2002-02-28 17:33 Joshua Daniel Franklin 2002-02-28 19:30 ` Charles Wilson @ 2002-03-01 5:00 ` Corinna Vinschen 1 sibling, 0 replies; 11+ messages in thread From: Corinna Vinschen @ 2002-03-01 5:00 UTC (permalink / raw) To: cygwin On Thu, Feb 28, 2002 at 04:03:34PM -0800, Joshua Daniel Franklin wrote: > The code that produces this error is: > > MultiByteToWideChar (CP_ACP, 0, lname, -1, widepath, MAX_PATH); > hres = pf->lpVtbl->Save (pf, widepath, TRUE); > if (!SUCCEEDED(hres)) > { > fprintf(stderr, "%s: Save to persistant storage failed (Does the > directo > ry you are writing to exist?)\n", prog_name); > exit(3); > } Try the following before calling pf->lpVtbl->Save(): GetCurrentDirectory(dir); pf->lpVtbl->SetRelativePath(dir); This is just basically as it should work. Look in MSDN for the exact usage. Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Developer mailto:cygwin@cygwin.com Red Hat, Inc. -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2002-03-13 14:08 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2002-03-02 19:49 mkshortcut debugging problem Joshua Daniel Franklin 2002-03-04 4:50 ` Jason Tishler 2002-03-12 23:33 ` Charles Wilson 2002-03-13 6:37 ` Joshua Daniel Franklin -- strict thread matches above, loose matches on Subject: below -- 2002-03-07 23:03 Joshua Daniel Franklin 2002-03-01 17:00 Joshua Daniel Franklin 2002-03-02 8:08 ` Jason Tishler 2002-02-28 22:50 Joshua Daniel Franklin 2002-02-28 17:33 Joshua Daniel Franklin 2002-02-28 19:30 ` Charles Wilson 2002-03-01 5:00 ` Corinna Vinschen
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).