aboutsummaryrefslogtreecommitdiff
path: root/firebase.c
diff options
context:
space:
mode:
Diffstat (limited to 'firebase.c')
-rw-r--r--firebase.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/firebase.c b/firebase.c
index 5221af7..641dafe 100644
--- a/firebase.c
+++ b/firebase.c
@@ -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);