chiark / gitweb /
Add global unihash table; use universal hashing instead of CRC.
[mLib] / ident.c
diff --git a/ident.c b/ident.c
index 342dc81551c2d7ac142110ba03465fb131ff4459..2d2f9b956e5035a4bfc9a95d7725f54b6f0c4224 100644 (file)
--- a/ident.c
+++ b/ident.c
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
 /* -*-c-*-
  *
- * $Id: ident.c,v 1.1 1999/10/04 21:41:58 mdw Exp $
+ * $Id: ident.c,v 1.5 2002/01/13 13:33:15 mdw Exp $
  *
  * Nonblocking RFC931 client
  *
  *
  * Nonblocking RFC931 client
  *
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: ident.c,v $
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: ident.c,v $
+ * Revision 1.5  2002/01/13 13:33:15  mdw
+ * Track interface change for @lbuf@.
+ *
+ * Revision 1.4  2001/06/22 19:35:39  mdw
+ * New @conn_init@ interface.
+ *
+ * Revision 1.3  2000/10/08 11:17:45  mdw
+ * (ident_socket): change sizes to be @size_t@.
+ *
+ * Revision 1.2  2000/06/17 10:38:35  mdw
+ * Track changes to selbuf interface.
+ *
  * Revision 1.1  1999/10/04 21:41:58  mdw
  * Added ident client from `fw'.
  *
  * Revision 1.1  1999/10/04 21:41:58  mdw
  * Added ident client from `fw'.
  *
@@ -156,6 +168,7 @@ static void parse(char *p, ident_reply *i)
 /* --- @line@ --- *
  *
  * Arguments:  @char *s@ = pointer to string from ident server
 /* --- @line@ --- *
  *
  * Arguments:  @char *s@ = pointer to string from ident server
+ *             @size_t len@ = length of the line
  *             @void *p@ = pointer to my request block
  *
  * Returns:    ---
  *             @void *p@ = pointer to my request block
  *
  * Returns:    ---
@@ -163,12 +176,11 @@ static void parse(char *p, ident_reply *i)
  * Use:                Handles a string from an ident server.
  */
 
  * Use:                Handles a string from an ident server.
  */
 
-static void line(char *s, void *p)
+static void line(char *s, size_t len, void *p)
 {
   ident_request *rq = p;
 
   rq->state = IDENT_DONE;
 {
   ident_request *rq = p;
 
   rq->state = IDENT_DONE;
-  selbuf_disable(&rq->b);
   close(rq->b.reader.fd);
   if (!s)
     rq->func(0, rq->p);
   close(rq->b.reader.fd);
   if (!s)
     rq->func(0, rq->p);
@@ -177,6 +189,7 @@ static void line(char *s, void *p)
     parse(s, &i);
     rq->func(&i, rq->p);
   }
     parse(s, &i);
     rq->func(&i, rq->p);
   }
+  selbuf_destroy(&rq->b);
 }
 
 /* --- @connected@ --- *
 }
 
 /* --- @connected@ --- *
@@ -247,8 +260,8 @@ void ident_abort(ident_request *rq)
       conn_kill(&rq->c);
       break;
     case IDENT_READ:
       conn_kill(&rq->c);
       break;
     case IDENT_READ:
-      selbuf_disable(&rq->b);
       close(rq->b.reader.fd);
       close(rq->b.reader.fd);
+      selbuf_destroy(&rq->b);
       break;
   }
 }
       break;
   }
 }
@@ -289,8 +302,9 @@ static void go(ident_request *rq)
   sin.sin_family = AF_INET;
   sin.sin_port = htons(113);
   sin.sin_addr = rq->remote.sin_addr;
   sin.sin_family = AF_INET;
   sin.sin_port = htons(113);
   sin.sin_addr = rq->remote.sin_addr;
-  conn_init(&rq->c, rq->s, fd, (struct sockaddr *)&sin, sizeof(sin),
-           connected, rq);
+  if (conn_init(&rq->c, rq->s, fd, (struct sockaddr *)&sin, sizeof(sin),
+               connected, rq))
+    goto fail_1;
 
   /* --- Finish off initializing the block --- */
 
 
   /* --- Finish off initializing the block --- */
 
@@ -354,7 +368,7 @@ void ident_socket(ident_request *rq, sel_state *s, int sk,
                  void (*func)(ident_reply */*i*/, void */*p*/),
                  void *p)
 {
                  void (*func)(ident_reply */*i*/, void */*p*/),
                  void *p)
 {
-  int sinsz;
+  size_t sinsz;
   if ((sinsz = sizeof(struct sockaddr_in),
        getsockname(sk, (struct sockaddr *)&rq->local, &sinsz)) ||
       (sinsz = sizeof(struct sockaddr_in),
   if ((sinsz = sizeof(struct sockaddr_in),
        getsockname(sk, (struct sockaddr *)&rq->local, &sinsz)) ||
       (sinsz = sizeof(struct sockaddr_in),