build: update default CXXFLAGS.
* Add -std=c++03 and -pedantic, and fix the resulting warnings. The
long-long-int warning is explicitly suppressed because it's not
trivial to workaround in a platform-independent and ISO-conformant
way without using C++11.
* Initial support for building with -std=c++11 (experimental).
* Prefer -Og optimization level in debug builds if supported by the
compiler.
Change-Id: I744a25c8b52842dc3ea3a733d6ab2fa66171e6f8
diff --git a/daemon/core/face-uri.cpp b/daemon/core/face-uri.cpp
index 5da35cd..5cfaf72 100644
--- a/daemon/core/face-uri.cpp
+++ b/daemon/core/face-uri.cpp
@@ -24,6 +24,7 @@
#include "face-uri.hpp"
#include "core/logger.hpp"
+
#ifdef HAVE_PCAP
#include "face/ethernet.hpp"
#endif // HAVE_PCAP
diff --git a/daemon/core/logger.hpp b/daemon/core/logger.hpp
index 552cb11..907ce7e 100644
--- a/daemon/core/logger.hpp
+++ b/daemon/core/logger.hpp
@@ -41,7 +41,7 @@
LOG_DEBUG = 4, // debug messages
LOG_TRACE = 5, // trace messages (most verbose)
// LOG_FATAL is not a level and is logged unconditionally
- LOG_ALL = 255, // all messages
+ LOG_ALL = 255 // all messages
};
class Logger
@@ -81,7 +81,6 @@
m_moduleName = name;
}
-
/// \brief return a string representation of time since epoch: seconds.microseconds
static std::string
now()
@@ -89,13 +88,11 @@
using namespace ndn::time;
static const microseconds::rep ONE_SECOND = 1000000;
-
- // 10 (whole seconds) + '.' + 6 (fraction) + 1 (\0)
- char buffer[10 + 1 + 6 + 1];
-
microseconds::rep microseconds_since_epoch =
duration_cast<microseconds>(system_clock::now().time_since_epoch()).count();
+ // 10 (whole seconds) + '.' + 6 (fraction) + 1 (\0)
+ char buffer[10 + 1 + 6 + 1];
::snprintf(buffer, sizeof(buffer), "%lld.%06lld",
static_cast<long long int>(microseconds_since_epoch / ONE_SECOND),
static_cast<long long int>(microseconds_since_epoch % ONE_SECOND));
@@ -126,26 +123,26 @@
namespace nfd {
-#define NFD_LOG_INIT(name) \
-static nfd::Logger& g_logger = nfd::LoggerFactory::create(name);
+#define NFD_LOG_INIT(name) \
+static nfd::Logger& g_logger = nfd::LoggerFactory::create(name)
-#define NFD_LOG_INCLASS_DECLARE() \
-static nfd::Logger& g_logger;
+#define NFD_LOG_INCLASS_DECLARE() \
+static nfd::Logger& g_logger
-#define NFD_LOG_INCLASS_DEFINE(cls, name) \
-nfd::Logger& cls::g_logger = nfd::LoggerFactory::create(name);
+#define NFD_LOG_INCLASS_DEFINE(cls, name) \
+nfd::Logger& cls::g_logger = nfd::LoggerFactory::create(name)
-#define NFD_LOG_INCLASS_TEMPLATE_DEFINE(cls, name) \
-template<class T> \
-nfd::Logger& cls<T>::g_logger = nfd::LoggerFactory::create(name);
+#define NFD_LOG_INCLASS_TEMPLATE_DEFINE(cls, name) \
+template<class T> \
+nfd::Logger& cls<T>::g_logger = nfd::LoggerFactory::create(name)
#define NFD_LOG_INCLASS_TEMPLATE_SPECIALIZATION_DEFINE(cls, specialization, name) \
-template<> \
-nfd::Logger& cls<specialization>::g_logger = nfd::LoggerFactory::create(name);
+template<> \
+nfd::Logger& cls<specialization>::g_logger = nfd::LoggerFactory::create(name)
#define NFD_LOG_INCLASS_2TEMPLATE_SPECIALIZATION_DEFINE(cls, s1, s2, name) \
-template<> \
-nfd::Logger& cls<s1, s2>::g_logger = nfd::LoggerFactory::create(name);
+template<> \
+nfd::Logger& cls<s1, s2>::g_logger = nfd::LoggerFactory::create(name)
#define NFD_LOG(level, expression) \
diff --git a/daemon/core/network-interface.cpp b/daemon/core/network-interface.cpp
index c8e4046..df47ac5 100644
--- a/daemon/core/network-interface.cpp
+++ b/daemon/core/network-interface.cpp
@@ -40,9 +40,9 @@
#error Platform not supported
#endif
-namespace nfd {
+NFD_LOG_INIT("NetworkInterfaceInfo");
-NFD_LOG_INIT("NetworkInterfaceInfo")
+namespace nfd {
std::list< shared_ptr<NetworkInterfaceInfo> >
listNetworkInterfaces()
diff --git a/daemon/face/datagram-face.hpp b/daemon/face/datagram-face.hpp
index 7669e72..7815eae 100644
--- a/daemon/face/datagram-face.hpp
+++ b/daemon/face/datagram-face.hpp
@@ -94,12 +94,12 @@
protected:
shared_ptr<typename protocol::socket> m_socket;
uint8_t m_inputBuffer[MAX_NDN_PACKET_SIZE];
-
bool m_hasBeenUsedRecently;
NFD_LOG_INCLASS_DECLARE();
};
+
template <class T>
inline
DatagramFace<T>::DatagramFace(const FaceUri& remoteUri, const FaceUri& localUri,
diff --git a/daemon/face/ethernet-face.cpp b/daemon/face/ethernet-face.cpp
index 02cc041..fb278d3 100644
--- a/daemon/face/ethernet-face.cpp
+++ b/daemon/face/ethernet-face.cpp
@@ -38,7 +38,7 @@
namespace nfd {
-NFD_LOG_INIT("EthernetFace")
+NFD_LOG_INIT("EthernetFace");
EthernetFace::EthernetFace(const shared_ptr<boost::asio::posix::stream_descriptor>& socket,
const shared_ptr<NetworkInterfaceInfo>& interface,
diff --git a/daemon/face/ethernet-factory.cpp b/daemon/face/ethernet-factory.cpp
index 894f769..6809e6c 100644
--- a/daemon/face/ethernet-factory.cpp
+++ b/daemon/face/ethernet-factory.cpp
@@ -32,7 +32,7 @@
namespace nfd {
-NFD_LOG_INIT("EthernetFactory")
+NFD_LOG_INIT("EthernetFactory");
shared_ptr<EthernetFace>
EthernetFactory::createMulticastFace(const shared_ptr<NetworkInterfaceInfo> &interface,
diff --git a/daemon/face/ethernet.cpp b/daemon/face/ethernet.cpp
index ee30aca..1aeaca6 100644
--- a/daemon/face/ethernet.cpp
+++ b/daemon/face/ethernet.cpp
@@ -42,22 +42,34 @@
Address
Address::fromString(const std::string& str)
{
+ unsigned short temp[ADDR_LEN];
+ char sep[5][2]; // 5 * (1 separator char + 1 null terminator)
+ int n = 0; // num of chars read from the input string
+
+ // ISO C++98 does not support the 'hh' type modifier
+ /// \todo use SCNx8 (cinttypes) when we enable C++11
+ int ret = ::sscanf(str.c_str(), "%2hx%1[:-]%2hx%1[:-]%2hx%1[:-]%2hx%1[:-]%2hx%1[:-]%2hx%n",
+ &temp[0], &sep[0][0], &temp[1], &sep[1][0], &temp[2], &sep[2][0],
+ &temp[3], &sep[3][0], &temp[4], &sep[4][0], &temp[5], &n);
+
+ if (ret < 11 || static_cast<size_t>(n) != str.length())
+ return Address();
+
Address a;
- int n, ret;
+ for (size_t i = 0; i < ADDR_LEN; ++i)
+ {
+ // check that all separators are actually the same char (: or -)
+ if (i < 5 && sep[i][0] != sep[0][0])
+ return Address();
- // colon-separated
- ret = ::sscanf(str.c_str(), "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx%n",
- &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &n);
- if (ret >= 6 && str.c_str()[n] == '\0')
- return a;
+ // check that each value fits into a uint8_t
+ if (temp[i] > 0xFF)
+ return Address();
- // dash-separated
- ret = ::sscanf(str.c_str(), "%hhx-%hhx-%hhx-%hhx-%hhx-%hhx%n",
- &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &n);
- if (ret >= 6 && str.c_str()[n] == '\0')
- return a;
+ a[i] = static_cast<uint8_t>(temp[i]);
+ }
- return Address();
+ return a;
}
std::ostream&
diff --git a/daemon/face/face.cpp b/daemon/face/face.cpp
index d4d198f..d0d42db 100644
--- a/daemon/face/face.cpp
+++ b/daemon/face/face.cpp
@@ -27,8 +27,6 @@
namespace nfd {
-NFD_LOG_INIT("Face")
-
static inline void
increaseCounter(FaceCounter& counter)
{