MCPcopy Create free account
hub / github.com/ElementsProject/lightning / path_canon

Function path_canon

ccan/ccan/tal/path/path.c:139–219  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

137#endif /* !HAVE_FCHDIR */
138
139char *path_canon(const tal_t *ctx, const char *a)
140{
141#if 0
142 char *oldcwd, *path, *p;
143 void *tmpctx;
144 size_t len;
145 struct path_pushd *olddir;
146
147 /* A good guess as to size. */
148 len = strlen(a) + 1;
149 if (a[0] != PATH_SEP) {
150 tmpctx = oldcwd = path_cwd(ctx);
151 if (!oldcwd)
152 return NULL;
153 len += strlen(oldcwd) + strlen(PATH_SEP_STR);
154
155 path = tal_array(tmpctx, char, len);
156 if (!path)
157 goto out;
158
159 len = strlen(oldcwd);
160 memcpy(path, oldcwd, len);
161 path[len++] = PATH_SEP;
162 } else {
163 tmpctx = path = tal_array(ctx, char, len);
164 if (!path)
165 return NULL;
166 len = 0;
167 }
168 strcpy(path + len, a);
169
170 p = strrchr(path, PATH_SEP);
171 *p = '\0';
172
173 olddir = path_pushd(tmpctx, path);
174 if (!olddir)
175 goto out;
176
177 /* Make OS canonicalize path for us. */
178 path = path_cwd(tmpctx);
179 if (!path)
180 goto out;
181
182 /* Append rest of old path. */
183 len = strlen(p+1);
184 if (len) {
185 size_t oldlen = tal_array_length(path);
186 if (path[oldlen-1] != PATH_SEP) {
187 /* Include / to append. */
188 *p = PATH_SEP;
189 p--;
190 len++;
191 }
192 path = tal_realloc(NULL, path, char, oldlen+len+1);
193 if (!path)
194 goto out;
195 memcpy(path + oldlen, p, len+1);
196 }

Callers 6

path_relFunction · 0.85
mainFunction · 0.85
find_my_abspathFunction · 0.85
plugin_registerFunction · 0.85
plugin_paths_matchFunction · 0.85
mainFunction · 0.85

Calls 6

path_cwdFunction · 0.85
path_popdFunction · 0.85
tal_freeFunction · 0.85
is_takenFunction · 0.85
takenFunction · 0.85
path_pushdFunction · 0.70

Tested by 2

mainFunction · 0.68
mainFunction · 0.68