In regards to this: > There are two ways you could approach this: > 1. If you wanted to do an implementation, I would add it to > utilities.c/h and call it something other than basename so we don't > get any odd issues with it choosing the one from the headers over the > macro. Perhaps libsemange_basename(). On glibc systems this would just > call basename directly and on non-glibc systems do the implementation > with your own logic. > 2. Just copy the path into a modifiable buffer on non-glibc systems > > I would do both approaches. Create a utility routine that calls > basename for glibc and for non-glibc just copies it to a modifiable > buffer and then calls basename over rolling our own and the bugs > associated with it, also add a unit test for this. This would keep the > logic in one place and be dirt simple. It appears that glibc's basename(3) has a different behaviour to the version of basename(3) defined in posix. From the man page: > The GNU version never modifies its argument, and returns the empty > string when path has a trailing slash, and in particular also when it > is "/". So I think it might be best to just define an semanage_basename based off the GNU behaviour as it is fairly trivial (being 2 LOC). I'll send a patch to do this shortly. Thanks, Rahul