[Harbour] Re: hb_i18n_gettext( "" ) warning. is it normal?

Mindaugas Kavaliauskas dbtopas at dbtopas.lt
Sat May 2 08:36:18 EDT 2009


Hi,


Viktor Szakáts wrote:
> I had to create workaround for this warning by passing " " string instead 
> of zero length one, IMO we should support empty values and simply always 
> return it as is in hb_i18n_gettext().

>     Compiling this code:
>     ---
>        ? hb_i18n_gettext( "" )
>     ---
> 
>     results in this:
>     ---
>     Warning W0017  Incompatible parameter 'String', expected 'String'
>     ---
> 
>     I understand there is no point in passing empty string to
>     hb_i18n_gettext(), 
>     but the warning text seems misleading and bogus.

The warning is not related to behaviour of hb_i18n_gettext() function 
itself, it's a question of compiler. Current compiler i18n logic does 
not write empty string to .pot file. The question is, that we have to do 
in this case:

1) write empty strings to .pot file
Change include/hbexprb.c line #1899:
      if( pArg->ExprType == HB_ET_STRING && pArg->ulLength > 0 )
to:
      if( pArg->ExprType == HB_ET_STRING )

2) do not write empty string to .pot file and do not show any warning:
Change:
      if( pArg->ExprType == HB_ET_STRING && pArg->ulLength > 0 )
      {
         if( HB_COMP_PARAM->fI18n )
to:
      if( pArg->ExprType == HB_ET_STRING )
      {
         if( HB_COMP_PARAM->fI18n  && pArg->ulLength > 0 )

3) remain current logic, but change warning text. This is perhaps the 
best choice.
Change:
      if( pArg->ExprType == HB_ET_STRING && pArg->ulLength > 0 )
      {
         if( HB_COMP_PARAM->fI18n )
         {
            ...
         }
to:
     if( pArg->ExprType == HB_ET_STRING )
     {
       if( pArg->ulLength > 0 )
       {
          if( HB_COMP_PARAM->fI18n )
          {
             ...
          }
       }
       else
       {
          iWarning = HB_COMP_WARN_PARAM_TYPE;
          pBadParam = pArg;
          szExpect = "not empty string";
       }


Regards,
Mindaugas



More information about the Harbour mailing list