diff options
Diffstat (limited to 'firebase.c')
-rw-r--r-- | firebase.c | 19 |
1 files changed, 18 insertions, 1 deletions
@@ -1,6 +1,7 @@ #include <stdio.h> #include <string.h> #include <unistd.h> +#include <errno.h> #include <assert.h> #include "db.h" #include "firebase.h" @@ -33,7 +34,12 @@ static void script_output_listener(FILE *js_read){ char *line=NULL; size_t linecap=0; ssize_t linelen; - while((linelen=getline(&line,&linecap,js_read))>0){ + while(true){ + linelen=getline(&line,&linecap,js_read); + if(linelen<0){ + if(errno==EINTR)continue; + break; + } if(line[linelen-1]!='\n'){ fprintf(stderr,"firebase thread: unexpected EOF from js script\n"); return; @@ -60,8 +66,10 @@ static void script_output_listener(FILE *js_read){ } if(strcmp(cmd,"add_token")==0){ + fprintf(stderr,"firebase thread: adding token '%s' to %" PRIi64 "\n",token,userid); db_add_token(userid,token); } else { + fprintf(stderr,"firebase thread: deleting token '%s' from %" PRIi64 "\n",token,userid); db_delete_token(userid,token); } } @@ -71,6 +79,14 @@ static void script_output_listener(FILE *js_read){ invalid_line: fprintf(stderr,"firebase thread: Invalid line from js script: <%s>\n",line); } + + if(linelen<0){ + if(feof(js_read)){ + fprintf(stderr,"firebase thread: feof(js_read)\n"); + } else { + fprintf(stderr,"firebase thread: getline: errno = %d (%s)\n",errno,strerror(errno)); + } + } } @@ -106,6 +122,7 @@ void firebase_init(void){ if(pid==0){ close(wrpipe[1]); FILE *js_read=fdopen(rdpipe[0],"r"); + db_reinit(); script_output_listener(js_read); fclose(js_read); exit(0); |