]> git.pld-linux.org Git - packages/bsd-finger.git/commitdiff
- try matching fingered name to gecos with transliteration based on current locale
authorJan Rękorajski <baggins@pld-linux.org>
Fri, 3 Oct 2008 21:23:51 +0000 (21:23 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    bsd-finger-iconv.patch -> 1.1

bsd-finger-iconv.patch [new file with mode: 0644]

diff --git a/bsd-finger-iconv.patch b/bsd-finger-iconv.patch
new file mode 100644 (file)
index 0000000..d1385a1
--- /dev/null
@@ -0,0 +1,73 @@
+diff -ur bsd-finger-0.17/finger/util.c bsd-finger-0.17-iconv/finger/util.c
+--- bsd-finger-0.17/finger/util.c      2008-10-03 23:13:12.000000000 +0200
++++ bsd-finger-0.17-iconv/finger/util.c        2008-10-03 23:11:21.000000000 +0200
+@@ -53,6 +53,14 @@
+ #include <stdlib.h>
+ #include "finger.h"
++#define HAVE_LANGINFO_H       1
++#define HAVE_ICONV    1
++
++#if defined(HAVE_LANGINFO_H) && defined(HAVE_ICONV)
++#include <langinfo.h>
++#include <iconv.h>
++#endif
++
+ #define       HBITS   8                       /* number of bits in hash code */
+ #define       HSIZE   (1 << 8)                /* hash table size */
+ #define       HMASK   (HSIZE - 1)             /* hash code mask */
+@@ -227,6 +235,54 @@
+           if (!strcasecmp(p, user)) 
+               rv = 1;
+       }
++
++#if defined(HAVE_LANGINFO_H) && defined(HAVE_ICONV)
++      if (!rv && has_locale) {
++              char *irname, *iuser, *inbuf, *outbuf;
++              iconv_t cd;
++              size_t il, ol;
++
++              irname = malloc(2*strlen(rname) + 1);
++              if (!irname)
++                      goto done;
++              iuser = malloc(2*strlen(user) + 1);
++              if (!iuser)
++                      goto done_rname;
++              memset(iuser, 0, 2*strlen(user) + 1);
++              memset(irname, 0, 2*strlen(rname) + 1);
++
++              cd = iconv_open("ascii//translit", nl_langinfo(CODESET));
++              if (cd == (iconv_t)-1)
++                      goto done_user;
++
++              il = strlen(rname);
++              ol = 2*strlen(rname);
++              inbuf = rname;
++              outbuf = irname;
++              i = iconv(cd, &inbuf, &il, &outbuf, &ol);
++
++              il = strlen(user);
++              ol = 2*strlen(user);
++              inbuf = (char *)user;
++              outbuf = iuser;
++              j = iconv(cd, &inbuf, &il, &outbuf, &ol);
++
++              if (i < 0 || j < 0 )
++                      goto done_iconv;
++
++              for (p = strtok(irname, "\t "); p && !rv; p = strtok(NULL, "\t ")) {
++                  if (!strcasecmp(p, iuser)) 
++                      rv = 1;
++              }
++done_iconv:
++              iconv_close(cd);
++done_user:
++              free(iuser);
++done_rname:
++              free(irname);
++      }
++done:
++#endif
+       free(rname);
+       return rv;
This page took 0.078176 seconds and 4 git commands to generate.