]> git.pld-linux.org Git - packages/bsd-finger.git/blame - bsd-finger-iconv.patch
- try matching fingered name to gecos with transliteration based on current locale
[packages/bsd-finger.git] / bsd-finger-iconv.patch
CommitLineData
97d07967
JR
1diff -ur bsd-finger-0.17/finger/util.c bsd-finger-0.17-iconv/finger/util.c
2--- bsd-finger-0.17/finger/util.c 2008-10-03 23:13:12.000000000 +0200
3+++ bsd-finger-0.17-iconv/finger/util.c 2008-10-03 23:11:21.000000000 +0200
4@@ -53,6 +53,14 @@
5 #include <stdlib.h>
6 #include "finger.h"
7
8+#define HAVE_LANGINFO_H 1
9+#define HAVE_ICONV 1
10+
11+#if defined(HAVE_LANGINFO_H) && defined(HAVE_ICONV)
12+#include <langinfo.h>
13+#include <iconv.h>
14+#endif
15+
16 #define HBITS 8 /* number of bits in hash code */
17 #define HSIZE (1 << 8) /* hash table size */
18 #define HMASK (HSIZE - 1) /* hash code mask */
19@@ -227,6 +235,54 @@
20 if (!strcasecmp(p, user))
21 rv = 1;
22 }
23+
24+#if defined(HAVE_LANGINFO_H) && defined(HAVE_ICONV)
25+ if (!rv && has_locale) {
26+ char *irname, *iuser, *inbuf, *outbuf;
27+ iconv_t cd;
28+ size_t il, ol;
29+
30+ irname = malloc(2*strlen(rname) + 1);
31+ if (!irname)
32+ goto done;
33+ iuser = malloc(2*strlen(user) + 1);
34+ if (!iuser)
35+ goto done_rname;
36+ memset(iuser, 0, 2*strlen(user) + 1);
37+ memset(irname, 0, 2*strlen(rname) + 1);
38+
39+ cd = iconv_open("ascii//translit", nl_langinfo(CODESET));
40+ if (cd == (iconv_t)-1)
41+ goto done_user;
42+
43+ il = strlen(rname);
44+ ol = 2*strlen(rname);
45+ inbuf = rname;
46+ outbuf = irname;
47+ i = iconv(cd, &inbuf, &il, &outbuf, &ol);
48+
49+ il = strlen(user);
50+ ol = 2*strlen(user);
51+ inbuf = (char *)user;
52+ outbuf = iuser;
53+ j = iconv(cd, &inbuf, &il, &outbuf, &ol);
54+
55+ if (i < 0 || j < 0 )
56+ goto done_iconv;
57+
58+ for (p = strtok(irname, "\t "); p && !rv; p = strtok(NULL, "\t ")) {
59+ if (!strcasecmp(p, iuser))
60+ rv = 1;
61+ }
62+done_iconv:
63+ iconv_close(cd);
64+done_user:
65+ free(iuser);
66+done_rname:
67+ free(irname);
68+ }
69+done:
70+#endif
71 free(rname);
72
73 return rv;
This page took 0.074911 seconds and 4 git commands to generate.