Perki Pat wrote:

> I was reading some functions in socket.c (0.4.30), and I have some
> questions, only little details w/o much importance

  Lets see, comments are always welcome!

> cherokee_read():
>     line 732:
>         if (unlikely (buf == NULL)) {
>             char tmp[buf_size+1];
>             len = gnutls_record_recv (socket->session, tmp, buf_size);
>         } else {
>
> char tmp[buf_size+1] is C99, not ANSI C and gcc implements it using
> alloca(3). The manual page says it is not recommendable to use
> alloca.

  Good point!  That buf == NULL thing is there to implement the
  lingering close mechanism, so it doesn't matter much where we read
  the data actually.  I've added a new static array right before the
  recv() that should be enough.

>     line 753:
> *done=0; Well, in line 833: if(done!=NULL) *done=len; So, I think we
> would check *done!=NULL in every assigment (or never check it) I
> have seen a lot of *done=0; But in some cases (e.g.
> socket->is_tls==TLS and len== GNUTLS_E_AGAIN) no assignment is made.
> I suggest a *done=0; with check in the beginning of cherokee_read
> and remove the others *done=0;

  Another good point. I think it shouldn't touch *done if it is not
  necessary, understanding for necessary that it read something. I've
  fixed a few functions in which we were calling _read() and _write()
  with uninitialized arguments, and I've also removed the *ret
  assignments.

  These changes are committed in the change-set 195:

    http://www.0x50.org/bugs/changeset/195


  Thanks Perki! :-)

--
Greetings, alo.
_______________________________________________
Cherokee mailing list
[email protected]
http://www.alobbs.com/cgi-bin/mailman/listinfo/cherokee

Reply via email to