On Tue, Sep 17, 2013 at 3:13 PM, Asif Naeem <anaeem...@gmail.com> wrote:

> Hi,
>
> I did put some time review the patch, please see my findings below i.e.
>
> 1. It seems that you have used strdup() on multiple places in the patch,
> e.g. in the below code snippet is it going to lead crash if newp->ident is
> NULL because of strdup() failure ?
>
> static EPlan *
>> find_plan(char *ident, EPlan **eplan, int *nplans)
>> {
>> ...
>>      newp->ident = strdup(ident);
>> ...
>> }
>
>
> 2. Can we rely on return value of asprintf() instead of recompute length
> as strlen(cmdbuf) ?
>
>           if (asprintf(&cmdbuf, "COMMENT ON LARGE OBJECT %u IS '", loid) <
>> 0)
>>                return fail_lo_xact("\\lo_import", own_transaction);
>>           bufptr = cmdbuf + strlen(cmdbuf);
>
>
> 3. There seems naming convention for functions like pfree (that seems
> similar to free()), pstrdup etc; but psprintf seems different than sprintf.
> Can't we use pg_asprintf instead in the patch, as it seems that both
> (psprintf and pg_asprintf) provide almost same functionality ?
>
> 4. It seems that "ret < 0" need to be changed to "rc < 0" in the following
> code i.e.
>
> int
>> pg_asprintf(char **ret, const char *format, ...)
>> {
>>      va_list          ap;
>>      int               rc;
>>      va_start(ap, format);
>>      rc = vasprintf(ret, format, ap);
>>      va_end(ap);
>>      if (ret < 0)
>>      {
>>           fprintf(stderr, _("out of memory\n"));
>>           exit(EXIT_FAILURE);
>>      }
>>      return rc;
>> }
>
>
It seems this point is already mentioned by Alvaro. Thanks.


>
> 5. It seems that in the previously implementation, error handling was not
> there, is it appropriate here that if there is issue in duplicating
> environment, quit the application ? i.e.
>
> /*
>>  * Handy subroutine for setting an environment variable "var" to "val"
>>  */
>> static void
>> doputenv(const char *var, const char *val)
>> {
>>      char        *s;
>>      pg_asprintf(&s, "%s=%s", var, val);
>>      putenv(s);
>> }
>
>
>
> Please do let me know if I missed something or more info is required.
> Thank you.
>
> Regards,
> Muhammad Asif Naeem
>
>
> On Tue, Sep 17, 2013 at 1:31 AM, Alvaro Herrera 
> <alvhe...@2ndquadrant.com>wrote:
>
>> Peter Eisentraut wrote:
>>
>> > The attached patch should speak for itself.
>>
>> Yeah, it's a very nice cleanup.
>>
>> > I have supplied a few variants:
>> >
>> > - asprintf() is the standard function, supplied by libpgport if
>> > necessary.
>> >
>> > - pg_asprintf() is asprintf() with automatic error handling (like
>> > pg_malloc(), etc.)
>> >
>> > - psprintf() is the same idea but with palloc.
>>
>> Looks good to me, except that pg_asprintf seems to be checking ret
>> instead of rc.
>>
>> Is there a reason for the API discrepancy of pg_asprintf vs. psprintf?
>> I don't see that we use the integer return value anywhere.  Callers
>> interested in the return value can use asprintf directly (and you have
>> already inserted callers that do nonstandard things using direct
>> asprintf).
>>
>> --
>> Álvaro Herrera                http://www.2ndQuadrant.com/
>> PostgreSQL Development, 24x7 Support, Training & Services
>>
>>
>> --
>> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-hackers
>>
>
>

Reply via email to