applied a couple of patches from Brian D Ripley. removed the last exit()

* nanoftp.c: applied a couple of patches from Brian D Ripley.
* parserInternals.c: removed the last exit() call. Print an
  unmaskable error on stderr instead (library mismatch detection)
Daniel
diff --git a/nanoftp.c b/nanoftp.c
index c7d76c7..7224a5a 100644
--- a/nanoftp.c
+++ b/nanoftp.c
@@ -261,6 +261,31 @@
     if (*cur == 0) return;
 
     buf[indx] = 0;
+    /* allow user@ and user:pass@ forms */
+    {
+	const char *p = strchr(cur, '@');
+	if(p) {
+	    while(1) {
+		if(cur[0] == ':' || cur[0] == '@') break;
+		buf[indx++] = *cur++;
+	    }
+	    buf[indx] = 0;
+	    ctxt->user = xmlMemStrdup(buf);
+	    indx = 0;
+	    if(cur[0] == ':') {
+		cur++;
+		while(1) {
+		    if(cur[0] == '@') break;
+		    buf[indx++] = *cur++;
+		}
+		buf[indx] = 0;
+		ctxt->passwd = xmlMemStrdup(buf);
+		indx = 0;
+	    }
+	    cur = p+1;
+	}
+    }
+
     while (1) {
         if (cur[0] == ':') {
 	    buf[indx] = 0;
@@ -480,6 +505,7 @@
     ret->returnValue = 0;
     ret->controlBufIndex = 0;
     ret->controlBufUsed = 0;
+    ret->controlFd = -1;
 
     if (URL != NULL)
 	xmlNanoFTPScanURL(ret, URL);