¿Hay una utilidad como dspcat en Linux?

9

Uso el siguiente dspcatcomando en AIX y puedo volcar catálogos de mensajes creados con el gencatcomando:

dspcat –g  /u/is/bin/I18N/l/lib/libca/libcalifornia.117.cat >> /tmp/message.smc

He pasado una buena hora continua buscando pistas sobre cómo volcar uno de estos catálogos en Linux, pero este comando no parece estar disponible. Cualquier ayuda sería apreciada.

ojblass
fuente
Tampoco veo mucho por ahí. ¿ stringsSería suficiente el comando para obtener lo que necesita? Tal vez con un poco de procesamiento posterior?
Sean Perry
Es probable que las cadenas estén codificadas ... No estoy completamente seguro de si una cadena shiftjis se caería correctamente de un archivo de catálogo de cadenas ... Puedo probar algunas pruebas.
ojblass
Es probable que el formato no sea demasiado difícil de aplicar ingeniería inversa si el contenido es valioso.
Sean Perry

Respuestas:

3

Encontré el código fuente de dspcat.c: http://www.smart.net/~rlhamil/ . Específicamente en este tarball . Intenté compilarlo y me faltaba una variable:

$ make
cc -O -DSOLARIS    dspcat.c   -o dspcat
dspcat.c: In function ‘format_msg’:
dspcat.c:11:23: error: ‘NL_TEXTMAX’ undeclared (first use in this function)
    static char result[NL_TEXTMAX*2+1];
                       ^
dspcat.c:11:23: note: each undeclared identifier is reported only once for each function it appears in
dspcat.c: In function ‘print_file’:
dspcat.c:240:23: error: ‘NL_SETMAX’ undeclared (first use in this function)
    int setlo=1, sethi=NL_SETMAX, msglo=1, msghi=NL_MSGMAX, x, y;
                       ^
dspcat.c:240:49: error: ‘NL_MSGMAX’ undeclared (first use in this function)
    int setlo=1, sethi=NL_SETMAX, msglo=1, msghi=NL_MSGMAX, x, y;
                                                 ^
dspcat.c: In function ‘main’:
dspcat.c:338:30: error: ‘NL_MSGMAX’ undeclared (first use in this function)
       if (msg_nr<1 || msg_nr>NL_MSGMAX) {
                              ^
dspcat.c:353:32: error: ‘NL_SETMAX’ undeclared (first use in this function)
       if (msg_set<1 || msg_set>NL_SETMAX) {
                                ^
make: *** [dspcat] Error 1

La variable NL_SETMAXno parece estar definida en mi sistema. Encontré este archivo de encabezado, bits/xopen_lim.hque tenía esta variable, así que lo agregué a la lista de encabezados por capricho.

$ make
cc -O -DSOLARIS    dspcat.c   -o dspcat
dspcat.c: In function ‘format_msg’:
dspcat.c:11:33: warning: integer overflow in expression [-Woverflow]
    static char result[NL_TEXTMAX*2+1];
                                 ^
dspcat.c:11:16: error: size of array ‘result’ is negative
    static char result[NL_TEXTMAX*2+1];
                ^
dspcat.c:11:16: error: storage size of ‘result’ isn’t constant
dspcat.c:15:29: warning: integer overflow in expression [-Woverflow]
    for (x=0; x < (NL_TEXTMAX*2) && *s != '\0'; s++)
                             ^
make: *** [dspcat] Error 1

Si tengo más tiempo, jugaré con esto, pero creo que si configura estáticamente esa variable dentro del código directamente, puede compilarla usted mismo.

slm
fuente
Puedo trabajar con esto muchas gracias +50
ojblass