+
+/*********************************************************************
+ *
+ * Function : compile_url_pattern
+ *
+ * Description : Compiles the three parts of an URL pattern.
+ *
+ * Parameters :
+ * 1 : url = Target url_spec to be filled in.
+ * 2 : buf = The url pattern to compile. Will be messed up.
+ *
+ * Returns : JB_ERR_OK - Success
+ * JB_ERR_MEMORY - Out of memory
+ * JB_ERR_PARSE - Cannot parse regex
+ *
+ *********************************************************************/
+static jb_err compile_url_pattern(struct url_spec *url, char *buf)
+{
+ char *p;
+
+ p = strchr(buf, '/');
+ if (NULL != p)
+ {
+ /*
+ * Only compile the regex if it consists of more than
+ * a single slash, otherwise it wouldn't affect the result.
+ */
+ if (p[1] != '\0')
+ {
+ /*
+ * XXX: does it make sense to compile the slash at the beginning?
+ */
+ jb_err err = compile_pattern(p, LEFT_ANCHORED, url, &url->preg);
+
+ if (JB_ERR_OK != err)
+ {
+ return err;
+ }
+ }
+ *p = '\0';
+ }
+
+ p = strchr(buf, ':');
+ if (NULL != p)
+ {
+ *p++ = '\0';
+ url->port_list = strdup(p);
+ if (NULL == url->port_list)
+ {
+ return JB_ERR_MEMORY;
+ }
+ }
+ else
+ {
+ url->port_list = NULL;
+ }
+
+ if (buf[0] != '\0')
+ {
+ return compile_host_pattern(url, buf);
+ }
+
+ return JB_ERR_OK;
+
+}
+
+