On Mon, 2005-08-22 at 23:37, Garrett Rooney wrote:
> > Modified: httpd/mod_smtpd/trunk/mod_smtpd.h
> > URL: 
> > http://svn.apache.org/viewcvs/httpd/mod_smtpd/trunk/mod_smtpd.h?rev=235759&r1=235758&r2=235759&view=diff
> > ==============================================================================
> > --- httpd/mod_smtpd/trunk/mod_smtpd.h (original)
> > +++ httpd/mod_smtpd/trunk/mod_smtpd.h Mon Aug 22 10:22:27 2005
> > @@ -63,7 +63,7 @@
> >      SMTPD_STATE_GOT_HELO,
> >      SMTPD_STATE_GOT_MAIL,
> >      SMTPD_STATE_GOT_RCPT
> > -  } smtpd_request_state;
> > +  } smtpd_trans_state;
> >  
> >    typedef enum {
> >      SMTPD_PROTOCOL_SMTP,
> > @@ -72,78 +72,90 @@
> >  
> >    typedef struct smtpd_return_data {
> >      apr_pool_t *p;
> > -    char *msg;
> > +    /* list of messages
> > +       null terminated */
> > +    char **msgs;
> 
> Why is this a char **?  It seems kind of error prone to require the 
> module programmer to allocate and manage that array correctly, this 
> feels like another case where an APR array would potentially simplify 
> things.

Good point. I'll do this. Originally there was a reason why I didn't
want it to be a APR array, but that reason doesn't apply anymore.

> >    } smtpd_return_data;
> >  
> > -  typedef struct smtpd_request_rec {
> > +  typedef struct smtpd_trans_rec {
> >      apr_pool_t *p;
> > -    conn_rec *c;
> > -    server_rec *s;
> > -
> > -    /* spooled data file pointer */
> > -    apr_file_t *tfp;
> >  
> >      /* where are we in the current transaction */
> > -    smtpd_request_state state_vector;
> > +    smtpd_trans_state state_vector;
> 
> Out of curiosity, why is this called a "state_vector", there's only one 
> element, so it doesn't feel much like a vector to me (at least not in 
> the std::vector sense of the word from c++).

Well this is another thing from old code. Originally the state was a bit
vector, but now it's just incremental values so the name should
certainly change.

> > +apr_status_t
> > +smtpd_getline(smtpd_conn_rec *scr, char *data, apr_size_t dlen)
> > +{
> > +  apr_status_t rc;
> > +  apr_bucket *e;
> > +  const char *str;
> > +  char *pos, *last_char = data;
> > +  apr_size_t len, bytes_handled = 0;
> > +
> > +  while (1) {
> > +    rc = ap_get_brigade(scr->c->input_filters, scr->bb_in, AP_MODE_GETLINE,
> > +                   APR_BLOCK_READ, 0);
> > +    if (rc != APR_SUCCESS) return rc;
> 
> Putting the body of the if statement on the same line as the if is kind 
> of sketchy IMO.  In particular it means that when you're single stepping 
> through the code in a debugger it's impossible to easily tell if the 
> statement is true or not based on the fact that you stepped onto that line.
> 
> Also, APR_SUCCESS is defined to be zero, so you can write that in less 
> characters by saying:
> 
> if (rc)
>    return rc;
> 
> Although that's just a style thing.

I'll make a seperate change for this.

> > +    while(!APR_BRIGADE_EMPTY(scr->bb_in)) {
> > +      e = APR_BRIGADE_FIRST(scr->bb_in);
> > +      
> > +      rc = apr_bucket_read(e, &str, &len, APR_BLOCK_READ);
> > +      if (rc != APR_SUCCESS) return rc;      
> > +      apr_bucket_delete(e);
> > +           
> > +      if (len == 0) continue;
> > + 
> > +      /* Would this overrun our buffer?  If so, we'll die. */
> > +      if (dlen < bytes_handled + len) {
> > +   if (data) {
> > +     /* ensure this string is NUL terminated */
> > +     if (bytes_handled > 0) {
> > +       data[bytes_handled-1] = '\0';
> > +     }
> > +     else {
> > +       data[0] = '\0';
> > +     }
> > +   }
> > +   return APR_ENOSPC;
> > +      }
> 
> The indentation in this section seems kind of screwed up.  Speaking of 
> indentation, none of the mod_smtpd code follows the httpd style 
> guidelines, if that's going to eventually change it might be good to get 
> it out of the way sooner rather than later, as those kind of changes 
> tend to obscure the revision history of the code.  See 
> http://httpd.apache.org/dev/styleguide.html for details about the style 
> guidelines.

I'll make a completely independent commit for style problems.

> 
> > -  apr_socket_t *csd=((core_net_rec *)r->input_filters->ctx)->client_socket;
> > +  //  r->request_config  = ap_create_request_config(r->pool);
> 
> C++ style comment.  This will break some C compilers.  Plus, it's an 
> example of leaving old code commented out in a function, which is a bad 
> habit to get into.  If the code has a reason to be there, at least leave 
> a comment as to why, if not, just kill it.
> 
> > -  r = smtpd_create_request(c);
> > -  ap_update_child_status(r->connection->sbh, SERVER_BUSY_KEEPALIVE, r);
> > +  scr = smtpd_create_conn_rec(c);
> > +  //  ap_update_child_status(scr->c->sbh, SERVER_BUSY_KEEPALIVE, r);
> 
> Another case of that...

I left that code in there just in case others knew how to change emulate
the same behavior. It was more like a note, but I should have definitely
commented on why it was there.

> 
> -garrett

Thanks a lot! In the future I'll be a lot more careful about code I
commit.
-rian

Reply via email to