]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - afs.c
blob.c: Implement pattern matching.
[paraslash.git] / afs.c
diff --git a/afs.c b/afs.c
index 44eeacc9ecd74441d5a444c4d37136f838499db1..a2194f3ea3245ecfe0204d35de87f861874ea472 100644 (file)
--- a/afs.c
+++ b/afs.c
@@ -366,8 +366,9 @@ static int fd2buf(int fd, unsigned max_size, struct osl_object *obj)
 }
 
 /**
- * Read from stdin, and send the result to the parent process.
+ * Read data from a file descriptor, and send it to the afs process.
  *
+ * \param fd File descriptor to read data from.
  * \param arg_obj Pointer to the arguments to \a f.
  * \param f The callback function.
  * \param max_len Don't read more than that many bytes from stdin.
@@ -375,7 +376,7 @@ static int fd2buf(int fd, unsigned max_size, struct osl_object *obj)
  *
  * This function is used by commands that wish to let para_server store
  * arbitrary data specified by the user (for instance the add_blob family of
- * commands). First, at most \a max_len bytes are read from stdin, the result
+ * commands). First, at most \a max_len bytes are read from \a fd, the result
  * is concatenated with the buffer given by \a arg_obj, and the combined buffer
  * is made available to the parent process via shared memory.
  *
@@ -555,10 +556,10 @@ static void signal_post_select(struct sched *s, struct task *t)
        if (!FD_ISSET(st->fd, &s->rfds))
                return;
        st->signum = para_next_signal();
-       PARA_NOTICE_LOG("caught signal %d\n", st->signum);
        t->ret = 1;
        if (st->signum == SIGUSR1)
                return; /* ignore SIGUSR1 */
+       PARA_NOTICE_LOG("caught signal %d\n", st->signum);
        t->ret = -E_SIGNAL_CAUGHT;
        unregister_tasks();
 }
@@ -860,8 +861,8 @@ int com_init(int fd, int argc, char * const * const argv)
 
 enum com_check_flags {
        CHECK_AFT = 1,
-       CHECK_MOODS_TABLE = 8,
-       CHECK_PLAYLISTS = 16
+       CHECK_MOODS = 2,
+       CHECK_PLAYLISTS = 4
 };
 
 int com_check(int fd, int argc, char * const * const argv)
@@ -886,6 +887,10 @@ int com_check(int fd, int argc, char * const * const argv)
                        flags |= CHECK_PLAYLISTS;
                        continue;
                }
+               if (!strcmp(arg, "-m")) {
+                       flags |= CHECK_MOODS;
+                       continue;
+               }
                return -E_AFS_SYNTAX;
        }
        if (i < argc)
@@ -903,5 +908,16 @@ int com_check(int fd, int argc, char * const * const argv)
                                return ret;
                }
        }
+       if (flags & CHECK_PLAYLISTS) {
+               ret = send_callback_request(playlist_check_callback, NULL, &result);
+               if (ret < 0)
+                       return ret;
+               if (ret > 0) {
+                       ret = send_buffer(fd, (char *) result.data);
+                       free(result.data);
+                       if (ret < 0)
+                               return ret;
+               }
+       }
        return 1;
 }