On Tuesday 16 September 2014 21:19:51 Fernando Rodriguez wrote:
> On Tuesday 16 September 2014 6:56:11 PM Geert Janssens wrote:
> > On Saturday 13 September 2014 14:24:35 Fernando Rodriguez wrote:
> > > On Saturday 13 September 2014 4:21:18 PM Geert Janssens wrote:
> > > > Thanks a lot !
> > > >
> > > > I'll try to apply a similar approach in gnucash for the
> > > > home dir use case.
> > > >
> > > > For my second case, anybody know how to read an
> > > > environment variable directly in win32 using wide char
> > > > functions ?
> > > >
> > > >
> > > > Geert
> > > > _______________________________________________
> > > > gtk-app-devel-list mailing list
> > > > gtk-app-devel-list@gnome.org
> > > > https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
> > >
> > > You'd use the GetEnvironmentVariable function. What compiler and
> > > IDE
> > > are you using?
> >
> > I'm using mingw32, gcc 4.8.1.
> >
> > > In Windows every API function that deals with text has two
> > > variants,
> > > so theres GetEnvironmentVariableA and GetEnvironmentVariableW.
> > >
> > > If you use Visual Studio there's an option on project properties
> > > to
> > > select the encoding and it #defines a symbol that defines the
> > > macros
> > > to call either variant and you would use the TCHAR (there's a
> > > bunch
> > > of typedefs for dealing with strings for example LPTSTR, LPSTR,
> > > LPWSTR but they all boil down to the same thing, in this case
> > > LPSTR
> > > is typedef for char*, LPWSTR wchar_t*, and LPTSTR is char* for
> > > ansi
> > > and wchar_t* for unicode) type to store the strings (it's a
> > > typedef
> > > for char when using ANSI and wchar_t when using unicode). I'm not
> > > sure what the symbol is called so if you're not using VS you can
> > > just
> > > use the wide char variants directly or look at the headers and
> > > find
> > > out what you need to define.
> >
> > Thanks for the additional detail (for some reason my previous mail
> > got
> truncated by the list
>
> > software.
> >
> > I have now written this function:
> >
> > #ifdef G_OS_WIN32
> > #define BUFSIZE 4096
> > static gchar* get_env_utf8 (const gchar* var_name)
> > {
> >
> > LPWSTR val_win;
> > gchar *val_utf8;
> > guint32 retval;
> >
> > ENTER();
> > val_win = (LPWSTR) malloc (BUFSIZE*sizeof(WCHAR));
> > if (!val_win)
> >
> > return NULL; /* Out of memory... */
> >
> > retval = GetEnvironmentVariableW (g_utf8_to_utf16 (var_name, -1,
> > NULL,
> NULL, NULL),
>
> > val_win, BUFSIZE);
> >
> > if (0 == retval)
> >
> > return NULL; /* Variable not set */
> >
> > if (BUFSIZE < retval)
> > {
> >
> > PWARN("Value of environment variable GNC_DOT_DIR is longer
> > than %d.
>
> "
>
> > "The code can't handle this, so returning NULL
> > instead.",
>
> BUFSIZE);
>
> > return NULL; /* Woa, path is way to long... */
> >
> > }
> >
> > if ((val_utf8 = g_utf16_to_utf8 ((gunichar2*) val_win, -1, NULL,
> > NULL,
> NULL)) != NULL)
>
> > return val_utf8;
> >
> > else
> >
> > return NULL;
> >
> > }
> > #endif
> >
> > But in the end val_utf8 still doesn't keep the special characters.
> >
> > If the environment variable GNC_DOT_DIR is set to "c:\gcdev\Ćukasz",
> > val_win
> is printed in
>
> > gdb as L"c:\\gcdev\\Lukasz" and
> > val_utf8 as "c:\\gcdev\\Lukasz"
> >
> > If I examine the individual characters using
> > print val_win[9] and print val_win[10] those result in
> > L'L' and L'u'. To me that looks as if there are no wide characters
> > in the
> original string. :(
>
> > This is really puzzling me. What am I missing ?
> >
> > Geert
>
> Sorry for taking so long, I've been struggling with something of my
> own. Did you ever get this sorted?
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list