diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-10-01 13:49:29 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-10-01 13:49:29 +0000 |
commit | f09a4d698071f513aa3892365faa79db21bc40e9 (patch) | |
tree | 9a4f085894bb76e20433dd0d99ea16fa4f95879b | |
parent | f7fac7f6736df4e350a8b5ed7d9f51782d7e039e (diff) | |
download | gnunet-f09a4d698071f513aa3892365faa79db21bc40e9.tar.gz gnunet-f09a4d698071f513aa3892365faa79db21bc40e9.zip |
fix #4619
-rw-r--r-- | src/util/strings.c | 28 |
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 | } |