diff --git a/src/zeroconf/ZeroconfGlue.cxx b/src/zeroconf/ZeroconfGlue.cxx index 710154f72..2514e6b86 100644 --- a/src/zeroconf/ZeroconfGlue.cxx +++ b/src/zeroconf/ZeroconfGlue.cxx @@ -27,9 +27,10 @@ #include "util/Domain.hxx" #include "Log.hxx" #include "util/Compiler.h" + +#include #include #include -#include static constexpr Domain zeroconf_domain("zeroconf"); @@ -62,10 +63,17 @@ ZeroconfInit(const ConfigData &config, gcc_unused EventLoop &loop) serviceName = config.GetString(ConfigOption::ZEROCONF_NAME, SERVICE_NAME); - char hostname[HOST_NAME_MAX+1]; - gethostname(hostname, HOST_NAME_MAX); - std::string sName = std::regex_replace(serviceName, std::regex("%h"), hostname); - serviceName = sName.c_str(); + /* replace "%h" with the host name */ + const char *h = strstr(serviceName, "%h"); + std::string buffer; + if (h != nullptr) { + char hostname[HOST_NAME_MAX+1]; + if (gethostname(hostname, HOST_NAME_MAX) == 0) { + buffer = serviceName; + buffer.replace(h - serviceName, 2, hostname); + serviceName = buffer.c_str(); + } + } #ifdef HAVE_AVAHI AvahiInit(loop, serviceName);