]> pilppa.org Git - familiar-h63xx-build.git/blob - org.handhelds.familiar/packages/glibc/glibc-2.3.2/glibc22-ttyname-devfs.patch
OE tree imported from monotone branch org.openembedded.oz354fam083 at revision 8b12e3...
[familiar-h63xx-build.git] / org.handhelds.familiar / packages / glibc / glibc-2.3.2 / glibc22-ttyname-devfs.patch
1 --- sysdeps/unix/sysv/linux/ttyname_r.c~        2001/07/06 04:56:13     1.14
2 +++ sysdeps/unix/sysv/linux/ttyname_r.c 2002/01/06 02:27:48
3 @@ -28,21 +28,24 @@
4  
5  #include <stdio-common/_itoa.h>
6  
7 -static int getttyname_r (char *buf, size_t buflen,
8 -                        dev_t mydev, ino64_t myino, int save,
9 +static int getttyname_r (const char *prefix, char *buf, size_t buflen,
10 +                        struct stat64 *mystat, int save,
11                          int *dostat) internal_function;
12  
13  static int
14  internal_function
15 -getttyname_r (char *buf, size_t buflen, dev_t mydev, ino64_t myino,
16 +getttyname_r (const char *prefix, char *buf, size_t buflen, struct stat64 *mystat,
17               int save, int *dostat)
18  {
19    struct stat64 st;
20    DIR *dirstream;
21    struct dirent64 *d;
22 -  size_t devlen = strlen (buf);
23 +  size_t devlen = strlen (prefix);
24  
25 -  dirstream = __opendir (buf);
26 +  memcpy (buf, prefix, devlen);
27 +  buflen -= devlen;
28 +
29 +  dirstream = __opendir (prefix);
30    if (dirstream == NULL)
31      {
32        *dostat = -1;
33 @@ -50,7 +53,7 @@
34      }
35  
36    while ((d = __readdir64 (dirstream)) != NULL)
37 -    if ((d->d_fileno == myino || *dostat)
38 +    if ((d->d_fileno == mystat->st_ino || *dostat)
39         && strcmp (d->d_name, "stdin")
40         && strcmp (d->d_name, "stdout")
41         && strcmp (d->d_name, "stderr"))
42 @@ -71,9 +74,9 @@
43  
44         if (__xstat64 (_STAT_VER, buf, &st) == 0
45  #ifdef _STATBUF_ST_RDEV
46 -           && S_ISCHR (st.st_mode) && st.st_rdev == mydev
47 +           && S_ISCHR (st.st_mode) && st.st_rdev == mystat->st_rdev
48  #else
49 -           && d->d_fileno == myino && st.st_dev == mydev
50 +           && d->d_fileno == mystat->st_ino && st.st_dev == mystat->st_dev
51  #endif
52            )
53           {
54 @@ -99,7 +102,8 @@
55    struct stat64 st, st1;
56    int dostat = 0;
57    int save = errno;
58 -  int ret;
59 +  int ret, i;
60 +  const char *dirs[] = { "/dev/pts/", "/dev/vc/", "/dev/tts/", 0 };
61  
62    /* Test for the absolute minimal size.  This makes life easier inside
63       the loop.  */
64 @@ -139,50 +143,24 @@
65    if (__fxstat64 (_STAT_VER, fd, &st) < 0)
66      return errno;
67  
68 -  /* Prepare the result buffer.  */
69 -  memcpy (buf, "/dev/pts/", sizeof ("/dev/pts/"));
70 -  buflen -= sizeof ("/dev/pts/") - 1;
71 +  ret = ENOTTY;
72  
73 -  if (__xstat64 (_STAT_VER, buf, &st1) == 0 && S_ISDIR (st1.st_mode))
74 -    {
75 -#ifdef _STATBUF_ST_RDEV
76 -      ret = getttyname_r (buf, buflen, st.st_rdev, st.st_ino, save,
77 -                         &dostat);
78 -#else
79 -      ret = getttyname_r (buf, buflen, st.st_dev, st.st_ino, save,
80 -                         &dostat);
81 -#endif
82 -    }
83 -  else
84 +  for (i = 0; ret && dirs[i]; i++)
85      {
86 -      __set_errno (save);
87 -      ret = ENOENT;
88 +      if (__xstat64 (_STAT_VER, dirs[i], &st1) == 0 && S_ISDIR (st1.st_mode))
89 +       ret = getttyname_r (dirs[i], buf, buflen, &st, save, &dostat);
90 +      else
91 +       __set_errno (save);
92      }
93  
94 +
95    if (ret && dostat != -1)
96 -    {
97 -      buf[sizeof ("/dev/") - 1] = '\0';
98 -      buflen += sizeof ("pts/") - 1;
99 -#ifdef _STATBUF_ST_RDEV
100 -      ret = getttyname_r (buf, buflen, st.st_rdev, st.st_ino, save,
101 -                         &dostat);
102 -#else
103 -      ret = getttyname_r (buf, buflen, st.st_dev, st.st_ino, save,
104 -                         &dostat);
105 -#endif
106 -    }
107 +    ret = getttyname_r ("/dev/", buf, buflen, &st, save, &dostat);
108  
109    if (ret && dostat != -1)
110      {
111 -      buf[sizeof ("/dev/") - 1] = '\0';
112        dostat = 1;
113 -#ifdef _STATBUF_ST_RDEV
114 -      ret = getttyname_r (buf, buflen, st.st_rdev, st.st_ino,
115 -                         save, &dostat);
116 -#else
117 -      ret = getttyname_r (buf, buflen, st.st_dev, st.st_ino,
118 -                         save, &dostat);
119 -#endif
120 +      ret = getttyname_r ("/dev/", buf, buflen, &st, save, &dostat);
121      }
122  
123    return ret;
124 --- sysdeps/unix/sysv/linux/ttyname.c~  2001/07/06 04:56:13     1.16
125 +++ sysdeps/unix/sysv/linux/ttyname.c   2002/01/06 02:27:48
126 @@ -30,8 +30,8 @@
127  
128  char *__ttyname;
129  
130 -static char *getttyname (const char *dev, dev_t mydev,
131 -                        ino64_t myino, int save, int *dostat)
132 +static char *getttyname (const char *dev, struct stat64 *mystat,
133 +                        int save, int *dostat)
134       internal_function;
135  
136  
137 @@ -39,7 +39,7 @@
138  
139  static char *
140  internal_function
141 -getttyname (const char *dev, dev_t mydev, ino64_t myino, int save, int *dostat)
142 +getttyname (const char *dev, struct stat64 *mystat, int save, int *dostat)
143  {
144    static size_t namelen;
145    struct stat64 st;
146 @@ -55,7 +55,7 @@
147      }
148  
149    while ((d = __readdir64 (dirstream)) != NULL)
150 -    if ((d->d_fileno == myino || *dostat)
151 +    if ((d->d_fileno == mystat->st_ino || *dostat)
152         && strcmp (d->d_name, "stdin")
153         && strcmp (d->d_name, "stdout")
154         && strcmp (d->d_name, "stderr"))
155 @@ -78,9 +78,9 @@
156         memcpy (&getttyname_name[devlen], d->d_name, dlen);
157         if (__xstat64 (_STAT_VER, getttyname_name, &st) == 0
158  #ifdef _STATBUF_ST_RDEV
159 -           && S_ISCHR (st.st_mode) && st.st_rdev == mydev
160 +           && S_ISCHR (st.st_mode) && st.st_rdev == mystat->st_rdev
161  #else
162 -           && d->d_fileno == myino && st.st_dev == mydev
163 +           && d->d_fileno == mystat->st_ino && st.st_dev == mystat->st_dev
164  #endif
165            )
166           {
167 @@ -110,9 +110,10 @@
168    char procname[30];
169    struct stat64 st, st1;
170    int dostat = 0;
171 -  char *name;
172 +  char *name = NULL;
173    int save = errno;
174 -  int len;
175 +  int len, i;
176 +  const char *dirs[] = { "/dev/pts", "/dev/vc", "/dev/tts", 0 };
177  
178    if (!__isatty (fd))
179      return NULL;
180 @@ -146,37 +147,21 @@
181    if (__fxstat64 (_STAT_VER, fd, &st) < 0)
182      return NULL;
183  
184 -  if (__xstat64 (_STAT_VER, "/dev/pts", &st1) == 0 && S_ISDIR (st1.st_mode))
185 +  for (i = 0; !name && dirs[i]; i++)
186      {
187 -#ifdef _STATBUF_ST_RDEV
188 -      name = getttyname ("/dev/pts", st.st_rdev, st.st_ino, save, &dostat);
189 -#else
190 -      name = getttyname ("/dev/pts", st.st_dev, st.st_ino, save, &dostat);
191 -#endif
192 +      if (__xstat64 (_STAT_VER, dirs[i], &st1) == 0 && S_ISDIR (st1.st_mode))
193 +       name = getttyname (dirs[i], &st, save, &dostat);
194 +      else
195 +       __set_errno (save);
196      }
197 -  else
198 -    {
199 -      __set_errno (save);
200 -      name = NULL;
201 -    }
202 -
203 +  
204    if (!name && dostat != -1)
205 -    {
206 -#ifdef _STATBUF_ST_RDEV
207 -      name = getttyname ("/dev", st.st_rdev, st.st_ino, save, &dostat);
208 -#else
209 -      name = getttyname ("/dev", st.st_dev, st.st_ino, save, &dostat);
210 -#endif
211 -    }
212 +    name = getttyname ("/dev", &st, save, &dostat);
213  
214    if (!name && dostat != -1)
215      {
216        dostat = 1;
217 -#ifdef _STATBUF_ST_RDEV
218 -      name = getttyname ("/dev", st.st_rdev, st.st_ino, save, &dostat);
219 -#else
220 -      name = getttyname ("/dev", st.st_dev, st.st_ino, save, &dostat);
221 -#endif
222 +      name = getttyname ("/dev", &st, save, &dostat);
223      }
224  
225    return name;