aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-10-01 13:49:29 +0000
committerChristian Grothoff <christian@grothoff.org>2016-10-01 13:49:29 +0000
commitf09a4d698071f513aa3892365faa79db21bc40e9 (patch)
tree9a4f085894bb76e20433dd0d99ea16fa4f95879b /src/util
parentf7fac7f6736df4e350a8b5ed7d9f51782d7e039e (diff)
downloadgnunet-f09a4d698071f513aa3892365faa79db21bc40e9.tar.gz
gnunet-f09a4d698071f513aa3892365faa79db21bc40e9.zip
fix #4619
Diffstat (limited to 'src/util')
-rw-r--r--src/util/strings.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/util/strings.c b/src/util/strings.c
index 8d10a81b8..6a6cad6fe 100644
--- a/src/util/strings.c
+++ b/src/util/strings.c
@@ -545,7 +545,6 @@ GNUNET_STRINGS_filename_expand (const char *fil)
545 char *buffer; 545 char *buffer;
546#ifndef MINGW 546#ifndef MINGW
547 size_t len; 547 size_t len;
548 size_t n;
549 char *fm; 548 char *fm;
550 const char *fil_ptr; 549 const char *fil_ptr;
551#else 550#else
@@ -602,7 +601,8 @@ GNUNET_STRINGS_filename_expand (const char *fil)
602 } 601 }
603 if (fm == NULL) 602 if (fm == NULL)
604 { 603 {
605 LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "getcwd"); 604 LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING,
605 "getcwd");
606 buffer = getenv ("PWD"); /* alternative */ 606 buffer = getenv ("PWD"); /* alternative */
607 if (buffer != NULL) 607 if (buffer != NULL)
608 fm = GNUNET_strdup (buffer); 608 fm = GNUNET_strdup (buffer);
@@ -610,9 +610,9 @@ GNUNET_STRINGS_filename_expand (const char *fil)
610 if (fm == NULL) 610 if (fm == NULL)
611 fm = GNUNET_strdup ("./"); /* give up */ 611 fm = GNUNET_strdup ("./"); /* give up */
612 } 612 }
613 n = strlen (fm) + 1 + strlen (fil_ptr) + 1; 613 GNUNET_asprintf (&buffer,
614 buffer = GNUNET_malloc (n); 614 "%s%s%s",
615 GNUNET_snprintf (buffer, n, "%s%s%s", fm, 615 fm,
616 (fm[strlen (fm) - 1] == 616 (fm[strlen (fm) - 1] ==
617 DIR_SEPARATOR) ? "" : DIR_SEPARATOR_STR, fil_ptr); 617 DIR_SEPARATOR) ? "" : DIR_SEPARATOR_STR, fil_ptr);
618 GNUNET_free (fm); 618 GNUNET_free (fm);
@@ -623,23 +623,29 @@ GNUNET_STRINGS_filename_expand (const char *fil)
623 if ((lRet = plibc_conv_to_win_path (fil, fn)) != ERROR_SUCCESS) 623 if ((lRet = plibc_conv_to_win_path (fil, fn)) != ERROR_SUCCESS)
624 { 624 {
625 SetErrnoFromWinError (lRet); 625 SetErrnoFromWinError (lRet);
626 LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "plibc_conv_to_win_path"); 626 LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING,
627 "plibc_conv_to_win_path");
627 return NULL; 628 return NULL;
628 } 629 }
629 /* is the path relative? */ 630 /* is the path relative? */
630 if ((strncmp (fn + 1, ":\\", 2) != 0) && (strncmp (fn, "\\\\", 2) != 0)) 631 if ( (0 != strncmp (fn + 1, ":\\", 2)) &&
632 (0 != strncmp (fn, "\\\\", 2)) )
631 { 633 {
632 char szCurDir[MAX_PATH + 1]; 634 char szCurDir[MAX_PATH + 1];
633 635
634 lRet = GetCurrentDirectory (MAX_PATH + 1, szCurDir); 636 lRet = GetCurrentDirectory (MAX_PATH + 1,
637 szCurDir);
635 if (lRet + strlen (fn) + 1 > (MAX_PATH + 1)) 638 if (lRet + strlen (fn) + 1 > (MAX_PATH + 1))
636 { 639 {
637 SetErrnoFromWinError (ERROR_BUFFER_OVERFLOW); 640 SetErrnoFromWinError (ERROR_BUFFER_OVERFLOW);
638 LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "GetCurrentDirectory"); 641 LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING,
642 "GetCurrentDirectory");
639 return NULL; 643 return NULL;
640 } 644 }
641 buffer = GNUNET_malloc (MAX_PATH + 1); 645 GNUNET_asprintf (&buffer,
642 GNUNET_snprintf (buffer, MAX_PATH + 1, "%s\\%s", szCurDir, fn); 646 "%s\\%s",
647 szCurDir,
648 fn);
643 GNUNET_free (fn); 649 GNUNET_free (fn);
644 fn = buffer; 650 fn = buffer;
645 } 651 }