Convert sizeof foo to sizeof(foo).
[tinc] / src / utils.c
index 8fbc710..940bc6e 100644 (file)
@@ -158,7 +158,7 @@ int b64encode_urlsafe(const void *src, char *dst, int length) {
 const char *winerror(int err) {
        static char buf[1024], *ptr;
 
-       ptr = buf + sprintf(buf, "(%d) ", err);
+       ptr = buf + snprintf(buf, sizeof(buf), "(%d) ", err);
 
        if (!FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
                NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), ptr, sizeof(buf) - (ptr - buf), NULL)) {
@@ -174,8 +174,8 @@ const char *winerror(int err) {
 
 unsigned int bitfield_to_int(const void *bitfield, size_t size) {
        unsigned int value = 0;
-       if(size > sizeof value)
-               size = sizeof value;
+       if(size > sizeof(value))
+               size = sizeof(value);
        memcpy(&value, bitfield, size);
        return value;
 }
@@ -191,6 +191,27 @@ bool check_id(const char *id) {
        return true;
 }
 
+bool check_netname(const char *netname, bool strict) {
+       if(!netname || !*netname || *netname == '.')
+               return false;
+
+       for(const char *c = netname; *c; c++) {
+               if(iscntrl(*c))
+                       return false;
+               if(*c == '/' || *c == '\\')
+                       return false;
+               if(strict && strchr(" $%<>:`\"|?*", *c))
+                       return false;
+       }
+
+       return true;
+}
+
+/* Windows doesn't define HOST_NAME_MAX. */
+#ifndef HOST_NAME_MAX
+#define HOST_NAME_MAX 255
+#endif
+
 char *replace_name(const char *name) {
        char *ret_name;
 
@@ -202,7 +223,7 @@ char *replace_name(const char *name) {
                                logger(DEBUG_ALWAYS, LOG_ERR, "Invalid Name: environment variable %s does not exist\n", name + 1);
                                return NULL;
                        }
-                       if (gethostname(hostname, sizeof hostname) || !*hostname) {
+                       if (gethostname(hostname, sizeof(hostname)) || !*hostname) {
                                logger(DEBUG_ALWAYS, LOG_ERR, "Could not get hostname: %s\n", sockstrerror(sockerrno));
                                return NULL;
                        }