Try moving that declaration to the top of the for loop.  I think this
is a gcc version problem.   In other words variables have to be declared
before code in the block.  Maybe not, give it a try. :-)

On Sat, 2005-10-29 at 11:51 -0700, Marvin Humphrey wrote:
> Greets,
> 
> I've just gotten an RT ticket for my CPAN distribution  
> Sort::External, a mostly-perl module with a couple functions in XS.   
> The XS fails to compile "for perl v5.8.2 built for i386-freebsd."   
> Looking at the errors thrown by make, I'm at a bit of a loss.
> 
> > bash-2.05b# make
> > cc -c    -DAPPLLIB_EXP="/usr/local/lib/perl5/5.8.2/BSDPAN" - 
> > DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -I/usr/ 
> > local/include -O -pipe -march=pentiumpro    -DVERSION=\"0.12\"  - 
> > DXS_VERSION=\"0.12\" -DPIC -fPIC "-I/usr/local/lib/perl5/5.8.2/mach/ 
> > CORE"   External.c
> > External.xs: In function `XS_Sort__External__print_to_sortfile':
> > External.xs:58: syntax error before `char'
> > External.xs:61: `encoded_len' undeclared (first use in this function)
> > External.xs:61: (Each undeclared identifier is reported only once
> > External.xs:61: for each function it appears in.)
> > External.xs: In function `XS_Sort__External__Buffer__refill_buffer':
> > External.xs:91: syntax error before `char'
> > External.xs:104: `amount_read' undeclared (first use in this function)
> > External.xs:108: `item_length' undeclared (first use in this function)
> > External.xs:110: `check' undeclared (first use in this function)
> > External.xs:110: `read_buf' undeclared (first use in this function)
> > External.xs:142: `num_items' undeclared (first use in this function)
> > *** Error code 1
> >
> > Stop in /usr/local/src/Search-Kinosearch-0.021/Sort-External-0.12.
> 
> The line in question is a declaration, preceded by an SvPV macro.
> 
>          aUV        = string_len;
>          string     = SvPV(thing_sv, string_len);
> 
>          char* encoded_len = end_of_buf;     /* <-- line 58 */
> 
> (The full function is below, for reference.)  Now, what could be  
> causing a syntax error in the .xs file there?
> 
> The second "syntax error" is another declaration, this time following  
> a New macro, and baffles me for the same reasons.  Is this a ppport.h  
> problem? or ??
> 
> Thanks,
> 
> Marvin Humphrey
> Rectangular Research
> http://www.rectangular.com/
> 
> #------------------------------------------------------
> 
> SV*
> _print_to_sortfile (...)
> PPCODE:
> {
>      /* get the filehandle we'll print to */
>      SV* fh_sv_ref = ST(0);
>      PerlIO* fh    = IoOFP( sv_2io(fh_sv_ref) );
> 
>      int i, check;
>      SV* thing_sv;
>      char* string;
>      STRLEN string_len;
>      UV aUV;
>      char  buf[(sizeof(UV)*8)/7 + 1];
>      char* end_of_buf = buf + sizeof(buf);
> 
> 
>      /* encode len as a BER integer, print len . string */
>      for (i = 1; i < items; i++) {
>          thing_sv   = ST(i);
>          string_len = SvCUR(thing_sv);
>          aUV        = string_len;
>          string     = SvPV(thing_sv, string_len);
> 
>          char* encoded_len = end_of_buf;
> 
>          do {
>              *--encoded_len = (char)((aUV & 0x7f) | 0x80);
>              aUV >>= 7;
>          } while (aUV);
>          *(end_of_buf - 1) &= 0x7f;
> 
>          check = PerlIO_write(fh, encoded_len, (end_of_buf -  
> encoded_len));
>          check_io_error(check);
>          check = PerlIO_write(fh, string, string_len);
>          check_io_error(check);
>      }
> }
> 
> 
> 
> 
-- 
Scott T. Hildreth <[EMAIL PROTECTED]>

Reply via email to