# define RSPAMD_ALIGNED(x) __declspec(align(x))
# define RSPAMD_OPTIMIZE(x)
# define RSPAMD_ALWAYS_INLINE
+# define RSPAMD_PURE_FUNCTION
#elif defined(__GNUC__)
# define RSPAMD_ALIGNED(x) __attribute__((aligned(x)))
# define RSPAMD_ALWAYS_INLINE __attribute__((always_inline))
+# define RSPAMD_PURE_FUNCTION __attribute__((pure))
#ifndef __clang__
# define RSPAMD_OPTIMIZE(x) __attribute__((__optimize__ (x)))
#else
# define RSPAMD_OPTIMIZE(x)
#endif
#else
+/* Unknown compiler */
# define RSPAMD_ALIGNED(x)
# define RSPAMD_OPTIMIZE(x)
# define RSPAMD_ALWAYS_INLINE
+# define RSPAMD_PURE_FUNCTION
#endif
#endif
*/
int rspamd_url_cmp_qsort(const void *u1, const void *u2);
-static inline uint16_t rspamd_url_get_port(struct rspamd_url *u)
+/**
+ * Returns a port for some url
+ * @param u
+ * @return
+ */
+static RSPAMD_PURE_FUNCTION inline uint16_t rspamd_url_get_port(struct rspamd_url *u)
{
- if (u->flags & RSPAMD_URL_FLAG_HAS_PORT && u->ext) {
+ if ((u->flags & RSPAMD_URL_FLAG_HAS_PORT) && u->ext) {
return u->ext->port;
}
else {
}
}
+/**
+ * Returns a port for some url if it is set
+ * @param u
+ * @return
+ */
+static RSPAMD_PURE_FUNCTION inline uint16_t rspamd_url_get_port_if_special(struct rspamd_url *u)
+{
+ if ((u->flags & RSPAMD_URL_FLAG_HAS_PORT) && u->ext) {
+ return u->ext->port;
+ }
+
+ return 0;
+}
+
/**
* Normalize unicode input and set out url flags as appropriate
* @param pool
struct rspamd_lua_url *url = lua_check_url (L, 1);
if (url != NULL) {
- lua_pushinteger (L, rspamd_url_get_port(url->url));
+ if (rspamd_url_get_port_if_special(url->url) == 0) {
+ lua_pushnil (L);
+ }
+ else {
+ lua_pushinteger (L, rspamd_url_get_port_if_special(url->url));
+ }
}
else {
lua_pushnil (L);
lua_settable (L, -3);
}
- lua_pushstring (L, "port");
- lua_pushinteger (L, rspamd_url_get_port(u));
- lua_settable (L, -3);
+ if (rspamd_url_get_port_if_special(u) != 0) {
+ lua_pushstring (L, "port");
+ lua_pushinteger (L, rspamd_url_get_port_if_special(u));
+ lua_settable (L, -3);
+ }
if (u->tldlen > 0) {
lua_pushstring (L, "tld");