Dolda2000 GitWeb
/
doldaconnect.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of git://git.dolda2000.com/doldaconnect
[doldaconnect.git]
/
daemon
/
fnet-dc.c
diff --git
a/daemon/fnet-dc.c
b/daemon/fnet-dc.c
index
fd7a79d
..
85ba9a0
100644
(file)
--- a/
daemon/fnet-dc.c
+++ b/
daemon/fnet-dc.c
@@
-553,6
+553,8
@@
static char **parseadc(char *args)
state = 3;
else if(*args != ' ')
state = 1;
state = 3;
else if(*args != ' ')
state = 1;
+ else
+ args++;
break;
case 1:
if((*args == ' ') || (*args == 0))
break;
case 1:
if((*args == ' ') || (*args == 0))
@@
-1123,7
+1125,7
@@
static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char *
int minsize, maxsize;
int dotth;
size_t buflen;
int minsize, maxsize;
int dotth;
size_t buflen;
- int termnum, satisfied,
skipcheck
;
+ int termnum, satisfied,
matches, skipcheck, proper
;
int level, tersat[32];
wchar_t *terms[32], *lname;
char hashtth[24];
int level, tersat[32];
wchar_t *terms[32], *lname;
char hashtth[24];
@@
-1192,6
+1194,7
@@
static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char *
termnum = 0;
p2 = p;
done = 0;
termnum = 0;
p2 = p;
done = 0;
+ proper = 0;
while(!done)
{
if((*p2 == 0) || (*p2 == '$'))
while(!done)
{
if((*p2 == 0) || (*p2 == '$'))
@@
-1215,6
+1218,8
@@
static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char *
} else {
if((terms[termnum] = icmbstowcs(p, hub->charset)) != NULL) {
wcslower(terms[termnum]);
} else {
if((terms[termnum] = icmbstowcs(p, hub->charset)) != NULL) {
wcslower(terms[termnum]);
+ if(wcslen(terms[termnum]) > 1)
+ proper = 1;
termnum++;
}
}
termnum++;
}
}
@@
-1225,12
+1230,15
@@
static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char *
}
p2++;
}
}
p2++;
}
+ if(!proper)
+ goto out;
node = shareroot->child;
level = 0;
for(i = 0; i < termnum; i++)
tersat[i] = -1;
satisfied = 0;
node = shareroot->child;
level = 0;
for(i = 0; i < termnum; i++)
tersat[i] = -1;
satisfied = 0;
+ matches = 0;
while(1)
{
skipcheck = 0;
while(1)
{
skipcheck = 0;
@@
-1277,6
+1285,8
@@
static void cmd_search(struct socket *sk, struct fnetnode *fn, char *cmd, char *
qstrf(dsk, "%s%s\005%ji%s%s%s", prefix, buf, (intmax_t)node->size, infix, hub->nativename, postfix);
}
free(buf);
qstrf(dsk, "%s%s\005%ji%s%s%s", prefix, buf, (intmax_t)node->size, infix, hub->nativename, postfix);
}
free(buf);
+ if(++matches >= 20)
+ break;
}
}
if((!skipcheck && (satisfied == termnum)) || (node->child == NULL))
}
}
if((!skipcheck && (satisfied == termnum)) || (node->child == NULL))
@@
-1616,7
+1626,7
@@
static void cmd_direction(struct socket *sk, struct dcpeer *peer, char *cmd, cha
if(peer->direction == TRNSD_DOWN)
requestfile(peer);
} else {
if(peer->direction == TRNSD_DOWN)
requestfile(peer);
} else {
- if(
peer->wcsname == NULL
)
+ if(
(peer->wcsname == NULL) || (peer->transfer != NULL)
)
{
peer->close = 1;
return;
{
peer->close = 1;
return;