]> git.pld-linux.org Git - packages/bsd-finger.git/blob - bsd-finger-iconv.patch
- store patches in decompressed files
[packages/bsd-finger.git] / bsd-finger-iconv.patch
1 diff -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-04 00:48:15.000000000 +0200
3 +++ bsd-finger-0.17-iconv/finger/util.c 2008-10-04 00:47:47.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 @@ -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 ")) {
39             if (!strcasecmp(p, user)) 
40                 rv = 1;
41         }
42 +
43 +#if defined(HAVE_LANGINFO_H) && defined(HAVE_ICONV)
44 +       if (!rv && has_locale && irname) {
45 +               char *iuser, *inbuf, *outbuf;
46 +               iconv_t cd;
47 +               size_t il, ol;
48 +
49 +               iuser = malloc(2*strlen(user) + 1);
50 +               if (!iuser)
51 +                       goto done;
52 +               strcpy(rname, irname);
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);
83 +       }
84 +done:
85 +       if (irname)
86 +               free(irname);
87 +#endif
88         free(rname);
89  
90         return rv;
This page took 0.103327 seconds and 3 git commands to generate.