comparison pidgin/win32/winpidgin.c @ 23669:85189641a970

This should have been part of the previous commit related to no longer installing our own MIT Kerberos libraries. This also tries to fix the PATH at runtime if MIT Kerberos is installed.
author Daniel Atallah <daniel.atallah@gmail.com>
date Wed, 30 Jul 2008 21:09:51 +0000
parents bd789c20f577
children 40d03c5388ad
comparison
equal deleted inserted replaced
23668:c014c3fe0de9 23669:85189641a970
439 _snprintf(envstr, 25, "LANG=%s", locale); 439 _snprintf(envstr, 25, "LANG=%s", locale);
440 printf("Setting locale: %s\n", envstr); 440 printf("Setting locale: %s\n", envstr);
441 _putenv(envstr); 441 _putenv(envstr);
442 } 442 }
443 443
444 static void winpidgin_add_perl_to_path() { 444
445 static void winpidgin_add_stuff_to_path() {
445 char perl_path[MAX_PATH + 1]; 446 char perl_path[MAX_PATH + 1];
446 DWORD plen = sizeof(perl_path); 447 char *ppath = NULL;
448 char mit_kerberos_path[MAX_PATH + 1];
449 char *mpath = NULL;
450 DWORD plen;
447 451
448 printf("%s", "Looking for Perl... "); 452 printf("%s", "Looking for Perl... ");
449 453
454 plen = sizeof(perl_path);
450 if (read_reg_string(HKEY_LOCAL_MACHINE, "SOFTWARE\\Perl", "", 455 if (read_reg_string(HKEY_LOCAL_MACHINE, "SOFTWARE\\Perl", "",
451 (LPBYTE) &perl_path, &plen)) { 456 (LPBYTE) &perl_path, &plen)) {
457 /* We *could* check for perl510.dll, but it seems unnecessary. */
458 printf("found in '%s'.\n", perl_path);
459
460 if (perl_path[strlen(perl_path) - 1] != '\\')
461 strcat(perl_path, "\\");
462 strcat(perl_path, "bin");
463
464 ppath = perl_path;
465 } else
466 printf("%s", "not found.\n");
467
468 printf("%s", "Looking for MIT Kerberos... ");
469
470 plen = sizeof(mit_kerberos_path);
471 if (read_reg_string(HKEY_LOCAL_MACHINE, "SOFTWARE\\MIT\\Kerberos", "InstallDir",
472 (LPBYTE) &mit_kerberos_path, &plen)) {
473 /* We *could* check for gssapi32.dll */
474 printf("found in '%s'.\n", mit_kerberos_path);
475
476 if (mit_kerberos_path[strlen(mit_kerberos_path) - 1] != '\\')
477 strcat(mit_kerberos_path, "\\");
478 strcat(mit_kerberos_path, "bin");
479
480 mpath = mit_kerberos_path;
481 } else
482 printf("%s", "not found.\n");
483
484 if (ppath != NULL || mpath != NULL) {
452 const char *path = getenv("PATH"); 485 const char *path = getenv("PATH");
453 /* Enough to add "PATH=" + ";" + perl_path + "\\bin" + \0 */ 486 BOOL add_ppath = ppath != NULL && (path == NULL || !strstr(path, ppath));
454 487 BOOL add_mpath = mpath != NULL && (path == NULL || !strstr(path, mpath));
455 /* We *could* check for perl510.dll, but it seems unnecessary. */ 488 char *newpath;
456 489 int newlen;
457 printf("found in '%s'.\n", perl_path); 490
458 491 if (add_ppath || add_mpath) {
459 if (perl_path[strlen(perl_path) - 1] != '\\') { 492 /* Enough to add "PATH=" + path + ";" + ppath + ";" + mpath + \0 */
460 strcat(perl_path, "\\"); 493 newlen = 6 + (path ? strlen(path) + 1 : 0);
461 } 494 if (add_ppath)
462 strcat(perl_path, "bin"); 495 newlen += strlen(ppath) + 1;
463 496 if (add_mpath)
464 if (path == NULL || !strstr(path, perl_path)) { 497 newlen += strlen(mpath) + 1;
465 int newlen = (path ? strlen(path) : 0) + strlen(perl_path) + 10; 498 newpath = malloc(newlen);
466 char *newpath = malloc(newlen);
467 *newpath = '\0'; 499 *newpath = '\0';
468 500
469 _snprintf(newpath, newlen, "PATH=%s%s%s", 501 _snprintf(newpath, newlen, "PATH=%s%s%s%s%s%s",
470 path ? path : "", 502 path ? path : "",
471 path ? ";" : "", 503 path ? ";" : "",
472 perl_path); 504 add_ppath ? ppath : "",
473 505 add_ppath ? ";" : "",
474 printf("Adding Perl to PATH: %s\n", newpath); 506 add_mpath ? mpath : "",
507 add_mpath ? ";" : "");
508
509 printf("New PATH: %s\n", newpath);
475 510
476 _putenv(newpath); 511 _putenv(newpath);
477 free(newpath); 512 free(newpath);
478 } else 513 }
479 printf("%s\n", "Perl already in PATH."); 514 }
480 } else
481 printf("%s", "not found.\n");
482
483 } 515 }
484 516
485 #define PIDGIN_WM_FOCUS_REQUEST (WM_APP + 13) 517 #define PIDGIN_WM_FOCUS_REQUEST (WM_APP + 13)
486 #define PIDGIN_WM_PROTOCOL_HANDLE (WM_APP + 14) 518 #define PIDGIN_WM_PROTOCOL_HANDLE (WM_APP + 14)
487 519
670 else if (!getenv("PIDGIN_NO_DLL_CHECK")) 702 else if (!getenv("PIDGIN_NO_DLL_CHECK"))
671 dll_prep(); 703 dll_prep();
672 704
673 winpidgin_set_locale(); 705 winpidgin_set_locale();
674 706
675 winpidgin_add_perl_to_path(); 707 winpidgin_add_stuff_to_path();
676 708
677 /* If help, version or multiple flag used, do not check Mutex */ 709 /* If help, version or multiple flag used, do not check Mutex */
678 if (!strstr(lpszCmdLine, "-h") && !strstr(lpszCmdLine, "-v")) 710 if (!strstr(lpszCmdLine, "-h") && !strstr(lpszCmdLine, "-v"))
679 if (!winpidgin_set_running(getenv("PIDGIN_MULTI_INST") == NULL && strstr(lpszCmdLine, "-m") == NULL)) 711 if (!winpidgin_set_running(getenv("PIDGIN_MULTI_INST") == NULL && strstr(lpszCmdLine, "-m") == NULL))
680 return 0; 712 return 0;