--- a/util.c 2017-02-08 22:23:34.000000000 +0300 +++ b/util.c 2017-02-08 22:18:29.000000000 +0300 @@ -26,6 +26,8 @@ # include #else # include +# include +# include #endif /* WIN32 || __EMX__ */ @@ -209,9 +211,32 @@ NULL, printer_uri); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", NULL, cupsUser()); - if (title) - ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL, - title); + if( title ) + { // убогая статическая логика, но разбираться с контекстом недосуг {2017/02/08 22:17} + static iconv_t CONV=(iconv_t)-1; + static char strres[PATH_MAX*4]; + + if( CONV == (iconv_t)-1 ) + { // удаление не требуется так как создаётся один раз и навсегда. Нефига менять LANG не лету раз уж печатаешь. + if( (CONV = iconv_open("UTF-8",nl_langinfo(CODESET))) == (iconv_t)-1 ) title="singlejobnameerr1_alxed"; + } + + if( CONV != (iconv_t)-1 ) + { + size_t l1=strlen(title); + size_t l2=sizeof(strres); + char *inptr=(char*)title; + char *outptr=strres; + if( iconv(CONV,&inptr,&l1,&outptr,&l2) == (size_t)-1 ) title="singlejobnameerr2_alxed"; + else + { + strres[l2]=0; + title=strres; + } + } + + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL,title); + } cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION); cupsEncodeOptions2(request, num_options, options, IPP_TAG_JOB); cupsEncodeOptions2(request, num_options, options, IPP_TAG_SUBSCRIPTION);