From 3b1466afd58e7cfbf5be09df8cfc52409171f5d3 Mon Sep 17 00:00:00 2001 From: epochqwert Date: Tue, 31 Mar 2015 13:38:31 -0500 Subject: moved libhashtable and libirc into their own repos. --- Makefile | 8 -- libhashtable/Makefile | 15 --- libhashtable/example.c | 25 ----- libhashtable/genheader.sh | 3 - libhashtable/hashtable.h | 27 ----- libhashtable/libhashtable.c | 165 ---------------------------- libirc/Makefile | 15 --- libirc/examples/link.c | 134 ----------------------- libirc/irc.h | 4 - libirc/libirc.c | 256 -------------------------------------------- segfault.c | 109 ++++++------------- 11 files changed, 31 insertions(+), 730 deletions(-) delete mode 100644 libhashtable/Makefile delete mode 100644 libhashtable/example.c delete mode 100755 libhashtable/genheader.sh delete mode 100644 libhashtable/hashtable.h delete mode 100644 libhashtable/libhashtable.c delete mode 100644 libirc/Makefile delete mode 100644 libirc/examples/link.c delete mode 100644 libirc/irc.h delete mode 100644 libirc/libirc.c diff --git a/Makefile b/Makefile index 2871beb..5111042 100644 --- a/Makefile +++ b/Makefile @@ -2,18 +2,10 @@ LDFLAGS=-lirc -Llibirc -lhashtable -Llibhashtable CFLAGS=-std=c99 -pedantic -Wall all: - cd libirc && $(MAKE) - cd libhashtable && $(MAKE) $(MAKE) segfault clean: - cd libirc && $(MAKE) clean - cd libhashtable && $(MAKE) clean rm -f segfault install: - cp -f libirc/libirc.so /usr/local/lib - cp -f libhashtable/libhashtable.so /usr/local/lib -# cd libirc && $(MAKE) install -# cd libhashtable && $(MAKE) install cp -f segfault /usr/local/bin/segfault diff --git a/libhashtable/Makefile b/libhashtable/Makefile deleted file mode 100644 index 6649739..0000000 --- a/libhashtable/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -LDFLAGS=-lhashtable -Llibhashtable -CFLAGS=-fpic -shared -pedantic -Wall -TARGET=libhashtable.so - -all: $(TARGET) - -$(TARGET): - $(CC) $(CFLAGS) -o $(TARGET) libhashtable.c - -clean: - rm -f libhashtable.so - -install: - cp $(TARGET) /usr/local/lib/$(TARGET) - cp hashtable.h /usr/local/include/hashtable.h diff --git a/libhashtable/example.c b/libhashtable/example.c deleted file mode 100644 index 919d75c..0000000 --- a/libhashtable/example.c +++ /dev/null @@ -1,25 +0,0 @@ -#include -#include "hashtable.h" - -extern char **environ; - -int main(int argc,char *argv[]) { - struct hashtable ht; - int i; - char *name; - char *value; - inittable(&ht,65535); - for(i=0;environ[i];i++) { - name=strdup(environ[i]); - if((value=strchr(name,'=') )){ - *value=0; - value++; - } - ht_setkey(&ht,name,value); - free(name); - } - printf("PATH='%s'\n",ht_getvalue(&ht,"PATH")); - //if you want to get a whole entry struct use ht_getnode(); - //getentry() just returns the first struct in the linked list in that bucket. - return 0; -} diff --git a/libhashtable/genheader.sh b/libhashtable/genheader.sh deleted file mode 100755 index 3995579..0000000 --- a/libhashtable/genheader.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -cat libhashtable.c | head -n 22 | tail -n 16 > hashtable.h -cat libhashtable.c | grep '(.*) *{' | egrep -v 'if|for|while' | sed 's/ {/;/' >> hashtable.h diff --git a/libhashtable/hashtable.h b/libhashtable/hashtable.h deleted file mode 100644 index a58a392..0000000 --- a/libhashtable/hashtable.h +++ /dev/null @@ -1,27 +0,0 @@ -struct entry {//linked list node. - char *original; - void *target; - struct entry *prev;// doubly linked list. why? - struct entry *next; -}; - -struct hitem { - struct entry *ll; -}; - -struct hashtable { - int kl;//number of keys in the table - struct hitem **bucket; - int *keys; -}; -unsigned short hash(char *key);//maybe use a seeded rand()? :) Thanks FreeArtMan -void inittable(struct hashtable *ht,int tsize); -void ll_delete(struct entry *ll); -void ll_destroy(struct entry *ll); -void ht_destroy(struct hashtable *ht); -void ht_freevalues(struct hashtable *ht); -int ht_setkey(struct hashtable *ht,char *key,void *value); -struct entry *ll_getentry(struct entry *start,char *msg); -struct entry *ht_getentry(struct hashtable *ht,char *key); -struct entry *ht_getnode(struct hashtable *ht,char *msg); -void *ht_getvalue(struct hashtable *ht,char *msg); diff --git a/libhashtable/libhashtable.c b/libhashtable/libhashtable.c deleted file mode 100644 index 496a3ee..0000000 --- a/libhashtable/libhashtable.c +++ /dev/null @@ -1,165 +0,0 @@ -#include -#include -#include -#include "hashtable.h" - -/* -struct entry {//linked list node. - char *original; - void *target; - struct entry *prev;// doubly linked list. why? - struct entry *next; -}; - -struct hitem { - struct entry *ll; -}; - -struct hashtable { - int kl;//number of keys in the table - struct hitem **bucket; - int *keys; -}; -*/ - -unsigned short hash(char *key) {//maybe use a seeded rand()? :) Thanks FreeArtMan - return (strlen(key)<<8)+(key[0]<<4)+key[1]; -} - -void inittable(struct hashtable *ht,int tsize) { - int i; - ht->bucket=malloc(sizeof(char *)*tsize); - ht->kl=0; - ht->keys=malloc(sizeof(int *)*tsize); - if(!ht) { - fprintf(stderr,"malloc error 6 in hash table.\n"); - return; - } - for(i=0;ibucket[i]=0; - } -} - -void ll_delete(struct entry *ll) { - //do I have to free() any of this shit? - //keys are always allocated. strdup(). - //gotta free that. anything else isn't my fault. - if(ll->prev) { - ll->prev->next=ll->next; - } else { - //I am the first node. - } - if(ll->next) { - ll->next->prev=ll->prev; - } else { - //I am the last node. - } - free(ll);//all these nodes are malloc()d. -} - -void ll_destroy(struct entry *ll) { - if(ll->next) ll_destroy(ll->next); - free(ll->original); - free(ll); - //destroy_this_node. - //ll->original //malloc()d - //ll->target //I dunno where this comes from. -} - -void ht_destroy(struct hashtable *ht) { - int i=0; - for(i=0;ikl;i++) { - ll_destroy(ht->bucket[ht->keys[i]]->ll); - } - free(ht->bucket); -} - -void ll_freevalues(struct entry *ll) {//only use if you malloc your table. - if(ll->next) ll_destroy(ll->next); - free(ll->target); -} - -void ht_freevalues(struct hashtable *ht) { - int i; - for(i=0;ikl;i++) { - ll_freevalues(ht->bucket[ht->keys[i]]->ll); - } -} - -//this seems too complicated. -int ht_setkey(struct hashtable *ht,char *key,void *value) { - unsigned short h; - struct entry *tmp; - int i; - if(!key) key="(null)"; - h=hash(key); - for(i=0;ikl;i++) { - if(ht->keys[i]==h) break; - } - ht->keys[i]=h; - ht->kl=(ht->kl)>i+1?ht->kl:i+1; - if(!ht->bucket[h]) { //empty bucket! - //add this to the list of used buckets so we can easily - //use that list later for stuff. - if(!(ht->bucket[h]=malloc(sizeof(struct hitem)))) return 1; - ht->bucket[h]->ll=0; - //we now have a valid hashtable entry and a NULL ll in it. - //don't bother with the new ll entry yet... - } - if((tmp=ll_getentry(ht->bucket[h]->ll,key)) != NULL) { - tmp->target=value; - return 0; - } - if(ht->bucket[h]->ll == NULL) { - if(!(ht->bucket[h]->ll=malloc(sizeof(struct entry)))) return 3; - ht->bucket[h]->ll->next=0; - ht->bucket[h]->ll->prev=0; - if(!(ht->bucket[h]->ll->original=strdup(key))) return 4; - ht->bucket[h]->ll->target=value; - } else { - //go to the end and add another entry to the ll. - for(tmp=ht->bucket[h]->ll;tmp->next;tmp=tmp->next); - if(!(tmp->next=malloc(sizeof(struct entry)))) return 6; - tmp->next->prev=tmp; - tmp=tmp->next; - if(!(tmp->original=strdup(key))) return 7; - tmp->target=value; - tmp->next=0; - } - return 0; -} - -struct entry *ll_getentry(struct entry *start,char *key) { - struct entry *m; - if(!key) return NULL; - if(!start) return NULL; - for(m=start;m;m=m->next) { - if(!strncmp(key,m->original,strlen(m->original)) && (key[strlen(m->original)]==' ' || key[strlen(m->original)] == 0)) {//this allows !c to get called when using !c2 if !c2 is defined after !c. >_> - return m; - } - } - return NULL; -} - -//returns the table entry (a linked list) at the key. -struct entry *ht_getentry(struct hashtable *ht,char *key) { - unsigned short h=hash(key); - if(!ht->bucket[h]) return NULL; - return ht->bucket[h]->ll; -} - -//returns the node in the linked list in the table entry that matches the key. -struct entry *ht_getnode(struct hashtable *ht,char *key) { - return ll_getentry(ht_getentry(ht,key),key); -} - -//you'll probably want to use me. -void *ht_getvalue(struct hashtable *ht,char *key) { - struct entry *tmp=ll_getentry(ht_getentry(ht,key),key); - return tmp?tmp->target:0; -} - -//delete the node in the linked list in the table entry that matches the key. -void *ht_delete(struct hashtable *ht,char *key) { - ll_delete(ht_getentry(ht,key)); -} diff --git a/libirc/Makefile b/libirc/Makefile deleted file mode 100644 index e6c38fb..0000000 --- a/libirc/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -LDFLAGS=-lirc -Llibirc -CFLAGS=-fpic -shared -pedantic -Wall -TARGET=libirc.so - -all: $(TARGET) - -$(TARGET): - $(CC) $(CFLAGS) -o $(TARGET) libirc.c - -clean: - rm -f libirc.so - -install: - cp $(TARGET) /usr/local/lib/$(TARGET) - cp irc.h /usr/local/include/irc.h diff --git a/libirc/examples/link.c b/libirc/examples/link.c deleted file mode 100644 index c175595..0000000 --- a/libirc/examples/link.c +++ /dev/null @@ -1,134 +0,0 @@ -#include -#include -#include -#include - -#define mywrite(a,b) write(a,b,strlen(b)) - -int *fds; -char **chans; - -void extra_handler(int fd) { - return; -} - -struct user { - char *nick; - char *user; - char *host; -}; - -void privmsg_others(int fd,char *msg) { - int i; - char tmp[512]; - for(i=0;fds[i] != -1;i++) { - if(fds[i] != fd) { - snprintf(tmp,sizeof(tmp)-1,"PRIVMSG %s :%s\r\n",chans[fdtoi(fds[i])],msg); - write(fds[i],tmp,strlen(tmp)); - } - } -} - -void message_handler(int fd,char *from,struct user *user,char *line) { - int i; - char tmp[512]; - if(!strcmp(from,chans[fdtoi(fd)])) {//don't want to be forwarding PMs. :P - snprintf(tmp,sizeof(tmp)-1,"<%s> %s",user->nick,line); - privmsg_others(fd,tmp); - } -} - -void line_handler(int fd,char *line) {//this should be built into the libary? - char *s=line,*t=0,*u=0; - char *temp; - char tmp[512]; - struct user *user=malloc(sizeof(struct user)); - user->nick=0; - user->user=0; - user->host=0; - if(strchr(line,'\r')) *strchr(line,'\r')=0; - if(strchr(line,'\n')) *strchr(line,'\n')=0; - printf("line: '%s'\n",line); - if(line[0]==':') { - if((user->nick=strchr(line,':'))) { - *(user->nick)=0; - (user->nick)++; - } - } - if(user->nick) { - if((s=strchr((user->nick),' '))) { - *s=0; - s++; - if((t=strchr(s,' '))) { - *t=0; - t++; - if((u=strchr(t,' '))) {//: - *u=0; - u++; - } - } - } - if(((user->user)=strchr((user->nick),'!'))) { - *(user->user)=0; - (user->user)++; - if(((user->host)=strchr((user->user),'@'))) { - *(user->host)=0; - (user->host)++; - } - } else { - user->host=user->nick; - } - } - if(!user->user && s) { - if(!strcmp(s,"004")) { - snprintf(tmp,sizeof(tmp)-1,"JOIN %s\r\n",chans[fdtoi(fd)]); - temp=strchr(chans[fdtoi(fd)],' '); - if(temp) *temp=0; - mywrite(fd,tmp); - } - } - if(s && t && u) { - if(!strcmp(s,"PRIVMSG")) { - message_handler(fd,*t=='#'?t:user->nick,user,++u); - } - } - if(s && user->nick && t) { - if(!strcmp(s,"JOIN")) { - snprintf(tmp,sizeof(tmp)-1,"%cACTION %s has joined %s%c",1,user->nick,t+(*t==':'),1); - privmsg_others(fd,tmp); - } - if(!strcmp(s,"PART")) { - snprintf(tmp,sizeof(tmp)-1,"%cACTION %s has parted %s%c",1,user->nick,t+(*t==':'),1); - privmsg_others(fd,tmp); - } - if(!strcmp(s,"QUIT")) { - snprintf(tmp,sizeof(tmp)-1,"%cACTION %s has quited %s%c",1,user->nick,t+(*t==':'),1); - privmsg_others(fd,tmp); - } - } - free(user); -} - -int fdtoi(int fd) { - int i; - for(i=0;fds[i] != -1;i++) { - if(fds[i] == fd) return i; - } - return -1; -} - -int main(int argc,char *argv[]) { - fds=malloc(sizeof(int) * (argc+3) / 3); - chans=malloc(sizeof(char *) * (argc+3) / 3); - int i=0; - printf("%d\n",argc); - for(i=0;((i*3)+3) -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//#define DEBUG "epoch" //nick or channel to send debug info to. -#define CHUNK 4096 - -int main(int argc,char *argv[]) { - return 0; -} - -#define SILLYLIMIT 256 - -int serverConnect(char *serv,char *port) { - int rv; - int fd=0; - int n=1; - int try_ipv4=0; - char buf[SILLYLIMIT]; - struct addrinfo hints, *servinfo, *p=0; - struct in_addr saddr; - struct in6_addr saddr6; - struct hostent *he; - memset(&hints,0,sizeof hints); - hints.ai_family=AF_INET; - hints.ai_socktype=SOCK_STREAM; - if((fd=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0) { - perror("socket"); - return -1; - } -/* - for(try_ipv4=0;try_ipv4 < 2;try_ipv4++) { - if(!(he=gethostbyname2( - try_ipv4 - ?inet_aton(serv,&saddr) - ?inet_ntoa(saddr) - :serv - :inet_pton(AF_INET6,serv,&saddr6) - ?inet_ntop(AF_INET6,&saddr6,buf,SILLYLIMIT) - :serv - ,try_ipv4?AF_INET:AF_INET6))) return -1; - - for(;*(he->h_addr_list);he->h_addr_list++) { - printf("trying to connect to %s:%s attempt #%d\n",serv,port,n); - n++; -*/ -// if((rv=getaddrinfo(he->h_addr_list,port,&hints,&servinfo)) != 0) { - if((rv=getaddrinfo(serv,port,&hints,&servinfo)) != 0) { - fprintf(stderr,"error resolving '%s'.\n",serv); - return -1; - } - for(p=servinfo;p;p=p->ai_next) { - if(connect(fd,p->ai_addr, p->ai_addrlen) < 0) { - perror("connect"); - continue; - } else { - return fd; - } - } - //printf("trying a differnt address...\n"); - //} - //printf("trying a different AF...\n"); - //} - //printf("well, shit. how'd I get here?\n"); - return -1; -} - -int fdlen(int *fds) { - int i; - for(i=0;fds[i] != -1;i++); - return i+1; -} - -int runem(int *fds,void (*line_handler)(),void (*extra_handler)()) { - int j; - int fdl=fdlen(fds); - fd_set master; - fd_set readfs; - struct timeval timeout; - int fdmax=0,n,s,i; - int fd; - char *backlogs[fdl]; - char *t,*line=0; - int blsize=CHUNK; - int bllen=0; - char buffers[fdl][CHUNK];//THIS IS *NOT* NULL TERMINATED. - FD_ZERO(&master); - FD_ZERO(&readfs); - for(i=0;fds[i] != -1;i++) { - //if(!backlogs[i]) return 252;//wtf is this here for? ofc they're not set! - FD_SET(fds[i],&master); - backlogs[i]=malloc(CHUNK+1); - memset(backlogs[i],0,CHUNK); - memset(buffers[i],0,CHUNK); - fdmax=fds[i]>fdmax?fds[i]:fdmax; - } - int done=0; - while(!done) { - for(fd=0;fd<=fdmax;fd++) { - if(FD_ISSET(fd,&master)) { - if(extra_handler) extra_handler(fd); - } - } - readfs=master; - timeout.tv_sec=0; - timeout.tv_usec=1000; - if( select(fdmax+1,&readfs,0,0,&timeout) == -1 ) { - printf("\n!!!It is crashing here!!!\n\n"); - perror("select"); - return 1; - } - for(i=0;fds[i] != -1;i++) { - if(FD_ISSET(fds[i],&readfs)) { - if((n=recv(fds[i],buffers[i],CHUNK,0)) <= 0) {//read CHUNK bytes - fprintf(stderr,"recv: %d\n",n); - perror("recv"); - return 2; - } else { - buffers[i][n]=0;//deff right. - if(bllen+n >= blsize) {//this is probably off... - blsize+=n; - t=malloc(blsize); - if(!t) { - printf("OH FUCK! MALLOC FAILED!\n"); - exit(253); - } - memset(t,0,blsize);//optional? - memcpy(t,backlogs[i],blsize-n+1);//??? - free(backlogs[i]); - backlogs[i]=t; - } - memcpy(backlogs[i]+bllen,buffers[i],n); - bllen+=n; - for(j=0,s=0;j bllen) { //if the ending position is after the size of the backlog... - bllen=0;//fuck shifting. :P - } else { - for(j=s;j<=bllen;j++) {//should work. - backlogs[i][j-s]=backlogs[i][j]; - } - bllen-=s; - } - } - } - } - } - return 0; -} - -//wrap runem to keep runit around :P -int runit(int fd,void (*line_handler)(),void (*extra_handler)()) { - int fds[2]; - fds[0]=fd; - fds[1]=-1; - return runem(fds,line_handler,extra_handler); -} - -//not needed? -int ircConnect(char *serv,char *port,char *nick,char *user) { - char sendstr[1024]; - int fd; - fd=serverConnect(serv,port); - if(!fd) { - return 0; - } - snprintf(sendstr,sizeof(sendstr)-1,"NICK %s\r\nUSER %s\r\n",nick,user); - write(fd,sendstr,strlen(sendstr)); - return fd; -} - -struct user { - char *nick; - char *user; - char *host; -}; - -//this function mangles the input. -//gotta free the returned pointer but not each pointer in the array. -char **line_cutter(int fd,char *line,struct user *user) { - int i; - char **a=malloc(16);//heh. - memset(a,0,sizeof(char *)*16); - if(!user) return 0; - user->nick=0; - user->user=0; - user->host=0; - - if(strchr(line,'\r')) *strchr(line,'\r')=0; - if(strchr(line,'\n')) *strchr(line,'\n')=0; - if(line[0]==':') { - if((user->nick=strchr(line,':'))) { - *(user->nick)=0; - (user->nick)++; - } - } - if(user->nick) { - if((a[0]=strchr((user->nick),' '))) { - for(i=0;a[i+1]=strchr(a[i],' ') && i<15;i++) { - *a[i]=0; - a[i]++; - if(a[i][0] == ':') {//we're done. - a[i]++; - break; - } - } - } - if(((user->user)=strchr((user->nick),'!'))) { - *(user->user)=0; - (user->user)++; - if(((user->host)=strchr((user->user),'@'))) { - *(user->host)=0; - (user->host)++; - } - } else { - user->host=user->nick; - } - } - return a; -} diff --git a/segfault.c b/segfault.c index 7df026f..bd2a427 100644 --- a/segfault.c +++ b/segfault.c @@ -12,8 +12,8 @@ #include #include -#include "libirc/irc.h" //epoch's libirc. should be included with segfault. -#include "libhashtable/hashtable.h" //epoch's also. +#include +#include /*// just in case your system doesn't have strndup char *strndup(char *s,int l) { @@ -76,12 +76,6 @@ union hack { void (*func)(int fd,...); -struct user { - char *nick; - char *user; - char *host; -}; - struct tail { FILE *fp; char *file; @@ -170,13 +164,12 @@ void privmsg(int fd,char *who,char *msg) { //try to shorten this up sometime... char *format_magic(int fd,char *from,struct user *user,char *orig_fmt,char *arg) { int i=0,j=1,sz=0,c=1; - char overflow_space[100]; char *output,*fmt,*argCopy; char **args,**notargs; char *argN[10],randC[10][2]={"0","1","2","3","4","5","6","7","8","9"}; if(!arg) arg="%s"; if(!(argCopy=strdup(arg))) return 0; - for(argN[0]=argCopy;argCopy[i];i++) { + for(argN[0]=argCopy;argCopy[i] && i<10;i++) { if(argCopy[i] == ' ') { argN[j]=argCopy+i; argN[j][0]=0; @@ -187,14 +180,21 @@ char *format_magic(int fd,char *from,struct user *user,char *orig_fmt,char *arg) for(;j<10;j++) { argN[j]="(null)";//fill up the rest to prevent null deref. } - if(!orig_fmt) exit(70); + if(!orig_fmt) return 0; if(!(fmt=strdup(orig_fmt))) return 0; - for(i=0;fmt[i];i++) - if(fmt[i] == '%') - switch(fmt[++i]) + for(i=0;fmt[i];i++) { + if(fmt[i] == '%') { + i++; + switch(fmt[i]) { case '~':case 'p':case 'n':case 'h':case 'u':case 'f':case 's': case 'm':case '%':case '0':case '1':case '2':case '3':case '4': - case '5':case '6':case '7':case '8':case '9':case 'r': c++; + case '5':case '6':case '7':case '8':case '9':case 'r': + c++; + default: + break; + } + } + } args=malloc((sizeof(char *)) * (c + 1)); notargs=malloc((sizeof(char *)) * (c + 2)); c=0; @@ -205,14 +205,14 @@ char *format_magic(int fd,char *from,struct user *user,char *orig_fmt,char *arg) case '~':case 'p':case 'n':case 'h':case 'u':case 'f':case 's': case 'm':case '%':case '0':case '1':case '2':case '3':case '4': case '5':case '6':case '7':case '8':case '9':case 'r': - args[c]=((fmt[i]=='n')?user->nick: - ((fmt[i]=='u')?user->user: + args[c]=((fmt[i]=='n')?(user->nick?user->nick:"user->nick"): + ((fmt[i]=='u')?(user->user?user->user:"user->user"): ((fmt[i]=='~')?seghome: - ((fmt[i]=='h')?user->host: - ((fmt[i]=='f')?from: + ((fmt[i]=='h')?(user->host?user->host:"user->host"): + ((fmt[i]=='f')?(from?from:"from"): ((fmt[i]=='p')?pid: - ((fmt[i]=='m')?myuser->nick://and here. - ((fmt[i]=='s')?arg: + ((fmt[i]=='m')?(myuser->nick?myuser->nick:"myuser->nick")://and here. + ((fmt[i]=='s')?(arg?arg:"arg"): ((fmt[i]=='0')?argN[0]: ((fmt[i]=='1')?argN[1]: ((fmt[i]=='2')?argN[2]: @@ -228,6 +228,7 @@ char *format_magic(int fd,char *from,struct user *user,char *orig_fmt,char *arg) fmt[i-1]=0; if(!(fmt+j)) exit(68); if(!(notargs[c]=strdup(fmt+j))) exit(66); + if(!args[c]) exit(200+c); sz+=strlen(args[c]); sz+=strlen(notargs[c]); c++; @@ -272,12 +273,12 @@ void extra_handler(int fd) { int tmpo,i; char tmp[BS+1]; char *tmp2; - if(oldtime == time(0) && lines_sent > LINES_SENT_LIMIT) {//if it is still the same second, skip this function. - return; - } else { - lines_sent=0; - } - oldtime=time(0);//this might fix it? + //if(oldtime == time(0) && lines_sent > LINES_SENT_LIMIT) {//if it is still the same second, skip this function. + // return; + //} else { + // lines_sent=0; + //} + //oldtime=time(0);//this might fix it? if(redirect_to_fd != -1) { fd=redirect_to_fd; } @@ -1016,13 +1017,13 @@ void message_handler(int fd,char *from,struct user *user,char *msg,int redones) *args=0; args++; } - if(!strncmp(command,"lambda",6)) { + while(!strncmp(command,"lambda",6)) { command+=8; if((args=strchr(command,' '))) { *args=0; args++; } - args=format_magic(fd,from,user,args,":/"); + args=format_magic(fd,from,user,args,args); lambdad=1; } if((lol.data=ht_getvalue(&builtin,command))) { @@ -1063,54 +1064,6 @@ void line_handler(int fd,char *line) {//this should be built into the libary? } //line will be mangled by the cutter. char **a=line_cutter(fd,line,user); - -//stuff covered by line_cutter below here. -/* - user->nick=0; - user->user=0; - user->host=0; - if(strchr(line,'\r')) *strchr(line,'\r')=0; - if(strchr(line,'\n')) *strchr(line,'\n')=0; - printf("line: '%s'\n",line); - //:nick!user@host MERP DERP :message - //:nick!user@host s t :u - //:armitage.hacking.allowed.org MERP DERP :message - //:nickhost s t :u - //only sub-parse nickuserhost stuff if starts with : - //strchr doesn't like null pointers. :/ why not just take them and return null? - //check that I haven't gone past the end of the string? nah. it should take care of itself. - if(line[0]==':') { - if((user->nick=strchr(line,':'))) { - *(user->nick)=0; - (user->nick)++; - } - } - if(user->nick) { - if((s=strchr((user->nick),' '))) { - *s=0; - s++; - if((t=strchr(s,' '))) { - *t=0; - t++; - if((u=strchr(t,' '))) {//: - *u=0; - u++; - } - } - } - if(((user->user)=strchr((user->nick),'!'))) { - *(user->user)=0; - (user->user)++; - if(((user->host)=strchr((user->user),'@'))) { - *(user->host)=0; - (user->host)++; - } - } else { - user->host=user->nick; - } - } -*/ -//end of stuff covered by line_cutter if(!user->user && a[0]) { //server message //:armitage.hacking.allowed.org 353 asdf = #default :@SegFault @FreeArtMan @foobaz @wall @Lamb3_13 @gizmore @blackh0le strcpy(tmp,"!"); @@ -1134,7 +1087,7 @@ void line_handler(int fd,char *line) {//this should be built into the libary? if(a[0] && a[1] && a[2]) { if(!strcmp(a[0],"PRIVMSG") && strcmp(user->nick,myuser->nick)) { if(strcmp(user->nick,myuser->nick)) { - message_handler(fd,*a[1]=='#'?a[1]:user->nick,user,++a[2],0); + message_handler(fd,*a[1]=='#'?a[1]:user->nick,user,a[2],0); } else { if(debug) privmsg(fd,*a[2]=='#'?a[2]:user->nick,"This server has an echo"); -- cgit v1.2.3