/[lilypond]/installers/macos/PATCHES/pango-env-sub
ViewVC logotype

Contents of /installers/macos/PATCHES/pango-env-sub

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download)
Sat Nov 12 14:59:58 2005 UTC (18 years, 5 months ago) by hanwen
Branch: MAIN
CVS Tags: HEAD
pango env sub

1 --- pango-1.10.1/pango/pango-utils.c~ 2005-07-28 00:14:46.000000000 +0200
2 +++ pango-1.10.1/pango/pango-utils.c 2005-11-08 18:03:52.000000000 +0100
3 @@ -23,6 +23,7 @@
4 #include <math.h>
5 #include <string.h>
6 #include <stdlib.h>
7 +#include <ctype.h>
8
9 #include "config.h"
10
11 @@ -85,6 +86,89 @@
12 return g_strndup (str, len);
13 }
14
15 +
16 +/**
17 + g_string_substitute_environment()
18 + @orig: a string
19 +
20 + Replaces environment variables of the form ${FOO} or $FOO.
21 +
22 + Return value: A newly-allocated string, that must be freed with
23 + g_string_free()
24 + */
25 +GString *
26 +g_string_substitute_environment (GString *orig)
27 +{
28 + GString * out = g_string_new ("");
29 + char *ptr = NULL;
30 +
31 + ptr = orig->str;
32 + while (ptr < orig->str + orig->len)
33 + {
34 + char *dollar = strchr (ptr, '$');
35 +
36 + if (dollar != NULL)
37 + {
38 + char *start_var = dollar + 1;
39 + char *end_var = start_var;
40 + char *start_next = end_var;
41 +
42 + g_string_append_len (out, ptr, dollar - ptr);
43 + ptr = dollar;
44 +
45 + if (*start_var == '{')
46 + {
47 + start_var ++;
48 +
49 + end_var = strchr (start_var, '}');
50 +
51 + if (end_var == NULL)
52 + {
53 + end_var = orig->str + orig->len;
54 + start_next = end_var;
55 + }
56 + else
57 + {
58 + start_next = end_var + 1;
59 + }
60 + }
61 + else
62 + {
63 + /*
64 + Hmm. what to do for $1 , $~ etc.?
65 + */
66 + do
67 + {
68 + end_var ++;
69 + }
70 + while (isalnum (*end_var) || *end_var == '_');
71 + start_next = end_var;
72 + }
73 +
74 + if (start_var < end_var)
75 + {
76 + GString *var_name = g_string_new_len (start_var, end_var - start_var);
77 + const char *value = g_getenv (var_name->str);
78 + if (value != NULL)
79 + g_string_append (out, value);
80 + g_string_free (var_name, TRUE);
81 +
82 +
83 + ptr = start_next;
84 + }
85 + }
86 + else
87 + break;
88 +
89 + }
90 +
91 + g_string_append (out, ptr);
92 +
93 + return out;
94 +}
95 +
96 +
97 +
98 /**
99 * pango_split_file_list:
100 * @str: a G_SEARCHPATH_SEPARATOR separated list of filenames
101 @@ -139,6 +223,16 @@
102 file = g_strdup (g_get_home_dir());
103 }
104 #endif
105 +
106 + {
107 + GString *file_as_gs = g_string_new (file);
108 + GString *substituted = g_string_substitute_environment (file_as_gs);
109 + g_free (file);
110 + file = substituted->str;
111 + g_string_free (substituted, FALSE);
112 + g_string_free (file_as_gs, TRUE);
113 + }
114 +
115 g_free (files[i]);
116 files[i] = file;
117
118 @@ -321,6 +415,7 @@
119 return TRUE;
120 }
121
122 +
123 /**
124 * pango_scan_string:
125 * @pos: in/out string position
126 @@ -404,6 +499,13 @@
127 }
128 }
129
130 +
131 + {
132 + GString *subbed = g_string_substitute_environment (out);
133 + g_string_assign (out, subbed->str);
134 + g_string_free (subbed, TRUE);
135 + }
136 +
137 *pos = p;
138
139 return TRUE;

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26