]> git.pld-linux.org Git - packages/bsd-finger.git/blame - bsd-finger-iconv.patch
- store patches in decompressed files
[packages/bsd-finger.git] / bsd-finger-iconv.patch
CommitLineData
97d07967 1diff -ur bsd-finger-0.17/finger/util.c bsd-finger-0.17-iconv/finger/util.c
48e3f119
JR
2--- bsd-finger-0.17/finger/util.c 2008-10-04 00:48:15.000000000 +0200
3+++ bsd-finger-0.17-iconv/finger/util.c 2008-10-04 00:47:47.000000000 +0200
97d07967
JR
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 */
48e3f119
JR
19@@ -183,7 +191,7 @@
20 {
21 char *p;
22 int i, j, ct, rv=0;
23- char *rname;
24+ char *rname, *irname = NULL;
25
26 strncpy(tbuf, pw->pw_gecos, TBUFLEN);
27 tbuf[TBUFLEN-1] = 0; /* guarantee null termination */
28@@ -222,11 +230,62 @@
29 }
30 }
31 rname[j] = 0;
32+#if defined(HAVE_LANGINFO_H) && defined(HAVE_ICONV)
33+ irname = malloc(2*strlen(rname) + 1);
34+ if (irname)
35+ strcpy(irname, rname);
36+#endif
37
38 for (p = strtok(rname, "\t "); p && !rv; p = strtok(NULL, "\t ")) {
97d07967
JR
39 if (!strcasecmp(p, user))
40 rv = 1;
41 }
42+
43+#if defined(HAVE_LANGINFO_H) && defined(HAVE_ICONV)
48e3f119
JR
44+ if (!rv && has_locale && irname) {
45+ char *iuser, *inbuf, *outbuf;
97d07967
JR
46+ iconv_t cd;
47+ size_t il, ol;
48+
97d07967
JR
49+ iuser = malloc(2*strlen(user) + 1);
50+ if (!iuser)
48e3f119
JR
51+ goto done;
52+ strcpy(rname, irname);
97d07967
JR
53+ memset(iuser, 0, 2*strlen(user) + 1);
54+ memset(irname, 0, 2*strlen(rname) + 1);
55+
56+ cd = iconv_open("ascii//translit", nl_langinfo(CODESET));
57+ if (cd == (iconv_t)-1)
58+ goto done_user;
59+
60+ il = strlen(rname);
61+ ol = 2*strlen(rname);
62+ inbuf = rname;
63+ outbuf = irname;
64+ i = iconv(cd, &inbuf, &il, &outbuf, &ol);
65+
66+ il = strlen(user);
67+ ol = 2*strlen(user);
68+ inbuf = (char *)user;
69+ outbuf = iuser;
70+ j = iconv(cd, &inbuf, &il, &outbuf, &ol);
71+
72+ if (i < 0 || j < 0 )
73+ goto done_iconv;
74+
75+ for (p = strtok(irname, "\t "); p && !rv; p = strtok(NULL, "\t ")) {
76+ if (!strcasecmp(p, iuser))
77+ rv = 1;
78+ }
79+done_iconv:
80+ iconv_close(cd);
81+done_user:
82+ free(iuser);
97d07967
JR
83+ }
84+done:
48e3f119
JR
85+ if (irname)
86+ free(irname);
97d07967
JR
87+#endif
88 free(rname);
89
90 return rv;
This page took 0.107376 seconds and 4 git commands to generate.