スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

libjapanese.aがない

Solaris9にはlibjapanese.aがない。

というか、そもそもSolaris7も8もSUNWjlibjっつーパッケージで代替関数やらマクロやらを提供してたみたいなんだけど、Solaris9にはそれすらない。

で、悲しいことにsjtoujとjis7toujを使ってるプログラムをSolaris9に移植することに。

よって、Webでゴショゴショ調べてiconvで代用することに決定。

#include <stdio.h>
#include <stdlib.h>
#include <iconv.h>

#define SJIS_CES "Shift_JIS"
#define JIS7_CES "ISO-2022-JP"
#define EUC_CES "eucJP"
#define ERROR_RET -1

int sjtouj(char *pszOutput, size_t stOutput, const char *pszInput);
int jis7touj(char *pszOutput, size_t stOutput, const char *pszInput);
int ccd_convert(char *pszOutput, size_t stOutput, const char *pszInput, const char *pszTo, const char *pszFrom);

int sjtouj(char *pszOutput, size_t stOutput, const char *pszInput)
{
 return(ccd_convert(pszOutput, stOutput, pszInput, EUC_CES, SJIS_CES));
}

int jis7touj(char *pszOutput, size_t stOutput, const char *pszInput)
{
 return(ccd_convert(pszOutput, stOutput, pszInput, EUC_CES, JIS7_CES));
}

int ccd_convert(char *pszOutput, size_t stOutput, const char *pszInput, const char *pszTo, const char *pszFrom)
{
 iconv_t icv_cd;
 char *po;
 const char *pi;
 size_t stInput;
 size_t ret;

 if(pszOutput == NULL) return(ERROR_RET);
 if(pszInput == NULL) return(ERROR_RET);
 if(stOutput <= 0) return(ERROR_RET);

 po = pszOutput;
 pi = pszInput;

 stInput = strlen(pi);

 icv_cd = iconv_open(pszTo, pszFrom);
 if(icv_cd == (iconv_t)-1){
  return(ERROR_RET);
 }

 ret = iconv(icv_cd, (const char **)&pi, &stInput, (char **)&po, &stOutput);
 if(ret == (size_t)-1){
  iconv_close(icv_cd);
  return(ERROR_RET);
 }

 iconv_close(icv_cd);

 *po = '\0';

 return(0);
}

シグネチャがちょっと違うけど使ってる箇所がそれぞれ1箇所だけだったから直すの楽だし別にいいかと。

コンパイルのオプションから-ljapaneseをはずして-liconvを追加する。

この記事のトラックバックURL

http://ysmt.blog21.fc2.com/tb.php/78-71fbf663

コメント

コメントする

管理者にだけ表示を許可する

Template Designed by DW99

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。