From ca97dc3913735ac0aed03974ada43aede82bec02 Mon Sep 17 00:00:00 2001 From: epochqwert Date: Sun, 8 Mar 2015 06:04:41 -0500 Subject: added a linkbot example to libirc, bunch of random shit in segfault I guess. I don't remember. I should commit more. --- libirc/libirc.c | 158 ++++++++++++++++++++++++++------------------------------ 1 file changed, 74 insertions(+), 84 deletions(-) (limited to 'libirc/libirc.c') diff --git a/libirc/libirc.c b/libirc/libirc.c index d2bff54..7968f76 100644 --- a/libirc/libirc.c +++ b/libirc/libirc.c @@ -132,15 +132,14 @@ int runit(int fd,void (*line_handler)(),void (*extra_handler)()) { return 0; } -#if 0 //yeah. this is a copy of the previous function. //with a bit of different stuff. didn't want to break anything yet. -int runem(int *fd,void (*line_handler)(),void (*extra_handler)()) { - FILE *fp; +int runem(int *fds,void (*line_handler)(),void (*extra_handler)()) { fd_set master; fd_set readfs; struct timeval timeout; int fdmax=0,n,s,i; + int fd; char *backlog=malloc(CHUNK+1); char *t,*line=0; int blsize=CHUNK; @@ -149,92 +148,89 @@ int runem(int *fd,void (*line_handler)(),void (*extra_handler)()) { if(!backlog) return 252; FD_ZERO(&master); FD_ZERO(&readfs); - for(i=0;fd[i] != -1;i++) { - FD_SET(fd,&master); - fdmax=fd>fdmax?fd:fdmax; + for(i=0;fds[i] != -1;i++) { + FD_SET(fds[i],&master); + fdmax=fds[i]>fdmax?fds[i]:fdmax; } - fp=fdopen(fd,"rw"); memset(backlog,0,CHUNK); memset(buffer,0,CHUNK); - if(fd) { - int done=0; - while(!done) { - for(fd=0;fd<=fdmax;fd++) { - if(FD_ISSET(fd,&master)) { - extra_handler(fd); - } + int done=0; + while(!done) { + for(fd=0;fd<=fdmax;fd++) { + if(FD_ISSET(fd,&master)) { + 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(fd=0;fd<=fdmax;fd++) { - if(FD_ISSET(fd,&readfs)) { - if((n=recv(fd,buffer,CHUNK,0)) <= 0) {//read CHUNK bytes - fprintf(stderr,"recv: %d\n",n); - perror("recv"); - return 2; - } else { - buffer[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,backlog,blsize-n+1);//??? - free(backlog); - backlog=t; + } + readfs=master; + timeout.tv_sec=0; + timeout.tv_usec=1000; + if( select(fdmax+1,&readfs,0,0,&timeout) == -1 ) { + printf("\n!!!It is rashing here!!!\n\n"); + perror("select"); + return 1; + } + for(fd=0;fd<=fdmax;fd++) { + if(FD_ISSET(fd,&readfs)) { + if((n=recv(fd,buffer,CHUNK,0)) <= 0) {//read CHUNK bytes + fprintf(stderr,"recv: %d\n",n); + perror("recv"); + return 2; + } else { + buffer[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); } - memcpy(backlog+bllen,buffer,n); - bllen+=n; - for(i=0,s=0;i bllen) { //if the ending position is after the size of the backlog... - bllen=0;//fuck shifting. :P - } else { - for(i=s;i<=bllen;i++) {//should work. - backlog[i-s]=backlog[i]; - } - bllen-=s; + } + //left shift the backlog so the last thing we got to is at the start + if(s > bllen) { //if the ending position is after the size of the backlog... + bllen=0;//fuck shifting. :P + } else { + for(i=s;i<=bllen;i++) {//should work. + backlog[i-s]=backlog[i]; } + bllen-=s; } } } @@ -242,13 +238,8 @@ int runem(int *fd,void (*line_handler)(),void (*extra_handler)()) { } return 0; } -#endif -//:hack.thebackupbox.net 433 * sysbot :Nickname is already in use. -//Need to have it check for this. -//and try a nick? -//or something... -//I don't want to add any string parsing to this function. :/ +//not needed? int ircConnect(char *serv,char *port,char *nick,char *user) { char sendstr[1024]; int fd; @@ -260,4 +251,3 @@ int ircConnect(char *serv,char *port,char *nick,char *user) { write(fd,sendstr,strlen(sendstr)); return fd; } - -- cgit v1.2.3