Existe um utilitário como o dspcat no Linux?

9

Eu uso o seguinte dspcatcomando no AIX e posso despejar catálogos de mensagens criados com o gencatcomando:

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

Passei uma boa hora sólida procurando dicas sobre como despejar um desses catálogos no Linux, mas esse comando não parece estar disponível. Qualquer ajuda seria apreciada.

ojblass
fonte
Também não estou vendo muito por aí. O stringscomando seria suficiente para obter o que você precisa? Talvez com um pouco de pós-processamento?
Sean Perry
as strings provavelmente estão codificadas ... não tenho certeza se uma string shiftjis cairia adequadamente de um arquivo de catálogo de strings ... posso tentar alguns testes.
ojblass
É provável que o formato não seja muito difícil de fazer engenharia reversa se o conteúdo for valioso.
Sean Perry

Respostas:

3

Encontrei o código fonte para dspcat.c: http://www.smart.net/~rlhamil/ . Especificamente neste tarball . Eu tentei compilá-lo e estava faltando uma variável:

$ 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

A variável NL_SETMAXnão parece estar definida no meu sistema. Eu localizei esse arquivo de cabeçalho, bits/xopen_lim.hque tinha essa variável, então adicionei isso à lista de cabeçalhos 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

Se tiver mais tempo, vou brincar com isso, mas acredito que se você definir estaticamente essa variável diretamente no código, poderá compilar isso sozinho.

slm
fonte
Eu posso trabalhar com este muito obrigado +50
ojblass