aboutsummaryrefslogtreecommitdiff
path: root/print/ghostscript8-x11/files/patch-base-gp_unix.c
blob: c1dc7b830c9b83f67f262da3d02b1a337efc5ec7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
--- base/gp_unix.c.orig	2015-08-21 21:07:48.028144000 +0900
+++ base/gp_unix.c	2015-08-21 21:10:17.913478000 +0900
@@ -50,6 +50,7 @@
  * and applied as a patch (preferable).
  */
 #include <sys/types.h>
+#include <limits.h>
 #include <dirent.h>
 #include <dlfcn.h>
 #include <string.h>
@@ -59,26 +60,25 @@
 {
   DIR*           dir = NULL;
   struct dirent* dirent;
-  char           buff[1024];
+  char           buff[PATH_MAX];
   char*          pbuff;
   void*          handle;
   void           (*gs_shared_init)(void);
 
-  strncpy(buff, GS_DEVS_SHARED_DIR, sizeof(buff) - 2);
-  pbuff = buff + strlen(buff);
-  *pbuff++ = '/'; *pbuff = '\0';
-
   dir = opendir(GS_DEVS_SHARED_DIR);
   if (dir == 0) return;
 
   while ((dirent = readdir(dir)) != 0) {
-    strncpy(pbuff, dirent->d_name, sizeof(buff) - (pbuff - buff) - 1);
-    if ((handle = dlopen(buff, RTLD_NOW)) != 0) {
-      if ((gs_shared_init = dlsym(handle, "gs_shared_init")) != 0) {
+    snprintf(buff, sizeof(buff), "%s/%s", GS_DEVS_SHARED_DIR, dirent->d_name);
+    pbuff = buff + strlen(buff) - 3;
+    if (strcmp(pbuff, ".so") != 0)
+	continue;
+    handle = dlopen(buff, RTLD_NOW);
+    if (handle == NULL)
+	continue;
+    gs_shared_init = dlsym(handle, "gs_shared_init");
+    if (gs_shared_init != NULL)
 	(*gs_shared_init)();
-      } else {
-      }
-    }
   }
 
   closedir(dir);