equal
deleted
inserted
replaced
1 /* |
1 /* |
2 * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. Oracle designates this |
7 * published by the Free Software Foundation. Oracle designates this |
64 static GtkLib** load_order; |
64 static GtkLib** load_order; |
65 static int n_libs = 0; |
65 static int n_libs = 0; |
66 if (!n_libs) { |
66 if (!n_libs) { |
67 n_libs = sizeof(gtk_libs) / sizeof(GtkLib); |
67 n_libs = sizeof(gtk_libs) / sizeof(GtkLib); |
68 load_order = calloc(n_libs + 1, sizeof(GtkLib *)); |
68 load_order = calloc(n_libs + 1, sizeof(GtkLib *)); |
|
69 if (load_order == NULL) { |
|
70 return NULL; |
|
71 } |
69 } |
72 } |
70 int i, first = 0; |
73 int i, first = 0; |
71 for (i = 0; i < n_libs; i++) { |
74 for (i = 0; i < n_libs; i++) { |
72 load_order[i] = >k_libs[i]; |
75 load_order[i] = >k_libs[i]; |
73 if (load_order[i]->version == version) { |
76 if (load_order[i]->version == version) { |
83 return load_order; |
86 return load_order; |
84 } |
87 } |
85 |
88 |
86 static GtkLib* get_loaded() { |
89 static GtkLib* get_loaded() { |
87 GtkLib** libs = get_libs_order(GTK_ANY); |
90 GtkLib** libs = get_libs_order(GTK_ANY); |
|
91 if (libs == NULL) return NULL; |
88 while(!gtk && *libs) { |
92 while(!gtk && *libs) { |
89 GtkLib* lib = *libs++; |
93 GtkLib* lib = *libs++; |
90 if (lib->check(lib->vname, /* load = */FALSE)) { |
94 if (lib->check(lib->vname, /* load = */FALSE)) { |
91 return lib; |
95 return lib; |
92 } |
96 } |
109 if (!gtk) { |
113 if (!gtk) { |
110 gtk = lib->load(env, lib->name); |
114 gtk = lib->load(env, lib->name); |
111 } |
115 } |
112 } else { |
116 } else { |
113 GtkLib** libs = get_libs_order(version); |
117 GtkLib** libs = get_libs_order(version); |
114 while (!gtk && *libs) { |
118 while (!gtk && libs && *libs) { |
115 lib = *libs++; |
119 lib = *libs++; |
116 if (version == GTK_ANY || lib->version == version) { |
120 if (version == GTK_ANY || lib->version == version) { |
117 if (verbose) { |
121 if (verbose) { |
118 fprintf(stderr, "Looking for GTK%d library...\n", |
122 fprintf(stderr, "Looking for GTK%d library...\n", |
119 lib->version); |
123 lib->version); |
139 return gtk != NULL; |
143 return gtk != NULL; |
140 } |
144 } |
141 |
145 |
142 static gboolean check_version(GtkVersion version) { |
146 static gboolean check_version(GtkVersion version) { |
143 GtkLib** libs = get_libs_order(version); |
147 GtkLib** libs = get_libs_order(version); |
|
148 if (libs == NULL) return FALSE; |
144 while (*libs) { |
149 while (*libs) { |
145 GtkLib* lib = *libs++; |
150 GtkLib* lib = *libs++; |
146 if (lib->check(lib->vname, /* load = */TRUE)) { |
151 if (lib->check(lib->vname, /* load = */TRUE)) { |
147 return TRUE; |
152 return TRUE; |
148 } |
153 } |