pathnext.c revision 3f54fd611f536639ec30dd53c48e5ec1897cc7d9
4b0a4c7dea0f67a233dcc42ce9bb18d36de109aeChristian Maeder/***********************************************************************
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder* This software is part of the ast package *
11d6ec73ee5550e00cb56b221bdbeb709142e779Christian Maeder* Copyright (c) 1989-2012 AT&T Intellectual Property *
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian Maeder* and is licensed under the *
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian Maeder* Eclipse Public License, Version 1.0 *
3f69b6948966979163bdfe8331c38833d5d90ecdChristian Maeder* by AT&T Intellectual Property *
b603f34b79bc0992e5d74f484e5bdc9f9c2346c6Christian Maeder* A copy of the License is available at *
4b0a4c7dea0f67a233dcc42ce9bb18d36de109aeChristian Maeder* http://www.eclipse.org/org/documents/epl-v10.html *
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian Maeder* Information and Software Systems Research *
ac142c1b088711f911018d8108a64be80b2f2a58Christian Maeder* AT&T Research *
ac142c1b088711f911018d8108a64be80b2f2a58Christian Maeder* Florham Park NJ *
ac142c1b088711f911018d8108a64be80b2f2a58Christian Maeder* Glenn Fowler <gsf@research.att.com> *
f3cd81f98592d1dbf301f48af31677a6a0cc666aChristian Maeder* David Korn <dgk@research.att.com> *
0216a1580abf46ed8981f25e89d6fd99b2944ac2Christian Maeder* Eduardo Krell <ekrell@adexus.cl> *
1c67beb3720d0b84d8d71ee2012166a09be81fbdChristian Maeder***********************************************************************/
1c67beb3720d0b84d8d71ee2012166a09be81fbdChristian Maeder * get next view for path sp
1c67beb3720d0b84d8d71ee2012166a09be81fbdChristian Maederpathnext(char* sp, char* extra, long* visits)
5581c4644d91dcb9b7e2e7f6052f7cbf5f97b6deChristian Maeder register char* cp;
53301de22afd7190981b363b57c48df86fcb50f7Christian Maeder register char* tmp;
1eb10c0c30323eed3cc21082fd242cd09a612dc5Christian Maeder message((-4, "pathnext: ++ %s%s%s [0x%08x]", sp, extra ? " + " : state.null, extra ? extra : state.null, visits ? *visits : 0L));
e47d29b522739fbf08aac80c6faa447dde113fbcChristian Maeder * check for next layer and previous visit
975642b989852fc24119c59cf40bc1af653608ffChristian Maeder message((-4, "pathnext: -- %s [limit=%d]", NiL, state.limit));
b603f34b79bc0992e5d74f484e5bdc9f9c2346c6Christian Maeder if (!(vpath = search(state.path.table ? state.path.table : &state.vpath, sp, shift, (const char*)visits, T_PREFIX)))
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder message((-4, "pathnext: -- %s [0x%08x]", NiL, visits ? *visits : 0L));
b603f34b79bc0992e5d74f484e5bdc9f9c2346c6Christian Maeder * we found a viewpath entry
0216a1580abf46ed8981f25e89d6fd99b2944ac2Christian Maeder * check if stuff after extra needs to be shifted
36c6cc568751e4235502cfee00ba7b597dae78dcChristian Maeder * shift right extra
ac142c1b088711f911018d8108a64be80b2f2a58Christian Maeder for (tmp = extra + strlen(extra); tmp >= extra; tmp--)
9c5b1136299d9052e4e995614a3a36a051a2682fChristian Maeder * shift right cp
fe5dbb45b6a8abf34375b4bc5f2a81cda664c0e4Christian Maeder strcopy(sp + vpathlen + 1, cp + shift + 1);
369454f9b2dbea113cbb40544a9b0f31425b2c69Christian Maeder * insert vpath
3daa82a175c7cfabf22455aa77c4beda327404e4Christian Maeder message((-4, "pathnext: -- %s [level=%d visits=0x%08x]", cp, state.path.level, visits ? *visits : 0L));
22fc8a1bd14dc53c5c7f482d2e0c04eb5ee4beb4Christian Maeder * search for the instance name for path sp
22fc8a1bd14dc53c5c7f482d2e0c04eb5ee4beb4Christian Maeder * and place in instname
b603f34b79bc0992e5d74f484e5bdc9f9c2346c6Christian Maeder * 0 returned when instances exhausted
b603f34b79bc0992e5d74f484e5bdc9f9c2346c6Christian Maeder * if create is non-zero, use name before the first slash as instance
b603f34b79bc0992e5d74f484e5bdc9f9c2346c6Christian Maeder * name, and do not check existence.
adfdcfa67b7f12df6df7292e238c3f9a4b637980Christian Maederinstance(register char* sp, char* instname, struct stat* st, int create)
aff01ee50b66032469c232e00c945d1fd4f57d1bChristian Maeder register char* cp;
9e0472be46104307b974fe5079bf5cc9e94a1a96Christian Maeder register char* mp;
9e0472be46104307b974fe5079bf5cc9e94a1a96Christian Maeder register char* mapnext;
9e0472be46104307b974fe5079bf5cc9e94a1a96Christian Maeder register int size;
5581c4644d91dcb9b7e2e7f6052f7cbf5f97b6deChristian Maeder * look for next vmap
f454c20b6c126bea7d31d400cc8824b9ee8cc6eaChristian Maeder map = search(&state.vmap, sp, cp - sp, NiL, 0);
goto found;
if (create)
maps++;
goto found;
maps++;
goto found;