UriUtil: uri_remove_auth() returns std::string

This commit is contained in:
Max Kellermann
2013-10-23 21:38:07 +02:00
parent c3e720279c
commit 3d12f8d246
6 changed files with 25 additions and 38 deletions

View File

@@ -19,8 +19,6 @@
#include "UriUtil.hxx"
#include <glib.h>
#include <assert.h>
#include <string.h>
@@ -80,11 +78,10 @@ uri_safe_local(const char *uri)
}
}
char *
std::string
uri_remove_auth(const char *uri)
{
const char *auth, *slash, *at;
char *p;
if (memcmp(uri, "http://", 7) == 0)
auth = uri + 7;
@@ -92,7 +89,7 @@ uri_remove_auth(const char *uri)
auth = uri + 8;
else
/* unrecognized URI */
return nullptr;
return std::string();
slash = strchr(auth, '/');
if (slash == nullptr)
@@ -101,13 +98,11 @@ uri_remove_auth(const char *uri)
at = (const char *)memchr(auth, '@', slash - auth);
if (at == nullptr)
/* no auth info present, do nothing */
return nullptr;
return std::string();
/* duplicate the full URI and then delete the auth
information */
p = g_strdup(uri);
memmove(p + (auth - uri), p + (at + 1 - uri),
strlen(at));
return p;
std::string result(uri);
result.erase(auth - uri, at + 1 - auth);
return result;
}

View File

@@ -22,6 +22,8 @@
#include "Compiler.h"
#include <string>
/**
* Checks whether the specified URI has a scheme in the form
* "scheme://".
@@ -48,11 +50,11 @@ uri_safe_local(const char *uri);
/**
* Removes HTTP username and password from the URI. This may be
* useful for displaying an URI without disclosing secrets. Returns
* NULL if nothing needs to be removed, or if the URI is not
* recognized.
* an empty string if nothing needs to be removed, or if the URI is
* not recognized.
*/
gcc_malloc
char *
gcc_pure
std::string
uri_remove_auth(const char *uri);
#endif