[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: libpst: FTBFS on hurd-i386 (for review)



Hi!

On Wed, 2012-06-27 at 20:43:15 +0200, Svante Signell wrote:
> Source: libpst
> Version: 0.6.54-3
> Severity: important
> Tags: patch
> User: debian-hurd@lists.debian.org
> Usertags: hurd

> Hi, libpst does not build for GNU/Hurd due to PATH_MAX issues. Attached
> are three small patches to enable a successful build.

I only see two, is there one missing?

> libpst.c.patch checks for the availability of get_current_dir_name and
> user that function if available.
> pst2dii.cpp.in.patch avoids usage of PATH_MAX by dynamically allocating
> string buffers as needed. pst2dii will be built if  imagemagick
> (providing /usr/bin/convert)  and libgd2-noxpm-dev | libgd2-xpm-dev
> (providing gd.h and libgd) are installed, so a dependency on these needs
> to be added to debian/rules if building that executable.

I'm guessing you mean debian/control (maybe some flags need to be
enabled in debian/rules too though).

> For patch2:
> Q1) I'm not sure if x=realloc(x,len) is OK. Better solution?

It's ok, but see above.

> Q2) Should I include an updated debian/rules too (or remove patch 2
> completely)?

If patch2 is pst2dii.cpp.in.patch, then I think it's good to include
that and the other needed changes.

> --- a/src/libpst.c	2011-12-25 00:19:11.000000000 +0100
> +++ b/src/libpst.c	2012-06-27 09:59:41.000000000 +0200
> @@ -289,6 +289,17 @@
>  static char*            pst_wide_to_single(char *wt, size_t size);
>  
>  
> +char *pst_getcwd(void) {

If the function is not being used anywhere else, just make it static.
Otherwise this can produce warnings as there will be a missing prototype
in the headers.

> --- a/src/pst2dii.cpp.in	2011-12-25 00:19:11.000000000 +0100
> +++ b/src/pst2dii.cpp.in	2012-06-27 11:08:02.000000000 +0200
> @@ -344,8 +344,10 @@
>  {
>      if (png_open) {
>          png_open = false;
> -        char fn[PATH_MAX];
> -        snprintf(fn, sizeof(fn), "page%d.png", ++page_sequence);
> +        char *fn = NULL;
> +	int len = 4 + 4 + 4;
> +	fn = (char*)pst_malloc(len) + 1;

Switch these two lines from tabs to spaces. I think you want
“pst_malloc(len + 1)” instead of “pst_malloc(len) + 1”. Also why only 4
for the decimal from page_sequence? is that delimited somewhere else?
And you might as well assign directly to fn, instead of first
initializing it to NULL and immediately overwriting it.

> +        snprintf(fn, len, "page%d.png", ++page_sequence);
>          FILE *pngout = fopen(fn, "wb");
>          if (pngout) {
>              gdImagePng(image, pngout);
> @@ -354,6 +356,7 @@
>          gdImageDestroy(image); // free memory
>          png_names.push_back(fn);
>          conversion += string(" ") + fn;
> +	free(fn);

Switch from tab to spaces.

>      }
>  }
>  
> @@ -366,8 +369,12 @@
>      conversion    = string(convert);
>      png_names.clear();
>      open_png();
> -    snprintf(pdf_name, sizeof(pdf_name), "dii%06d", ++email_sequence);
> +    int len = 3 + 7;
> +    pdf_name = (char*)pst_malloc(len) + 1;

pst_malloc(len + 1)

> +    snprintf(pdf_name, len, "dii%06d", ++email_sequence);
>      fprintf(dii_file, "\n@T %s\n", pdf_name);
> +    len = strlen(output_directory) + 3 + 7;

I think you mean something like:

    len = strlen(output_directory) + 1 + 3 + 6 + 4;

> +    pdf_name = (char *)pst_realloc(pdf_name,len) + 1;

Yeah, I guess you could just allocate once, but to avoid confusion
you'd better add a comment mentioning why the bigger size, etc.

>      snprintf(pdf_name, sizeof(pdf_name), "%s/dii%06d.pdf", output_directory, email_sequence);
>  }

thanks,
guillem


Reply to: