src/udev/mkdir.c: import path_startswith() from upstream

Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
This commit is contained in:
Anthony G. Basile 2013-07-10 12:59:12 -04:00
parent 7a2e1b1409
commit ae66dd92e5
3 changed files with 39 additions and 3 deletions

View File

@ -12,8 +12,9 @@
2013-07-10
* Add "hwdb: allow list of lookup keys per given record"
* Bring src/udev/mkdir.c in line with upstreams use of *_internal() with prefix
* Import format_timespan() from upstream's src/shared/time-util.c. Note: our
src/libudev/util.c is derived from upstream's src/shared/util.c minus unneeded functions
plus three functions from src/shared/time-util.c: now(), timespec_load() and
timespan().
plus three functions from src/shared/time-util.c: now(), timespec_load() and timespan().
* Bring src/udev/mkdir.c in line with upstreams use of *_internal() with prefix. Also
import path_startswith() from upstream's src/shared/path-util.c. This is now needed
in our src/udev/mkdir.c in the new *_internal() functions.

View File

@ -39,6 +39,40 @@ static int is_dir(const char* path) {
return S_ISDIR(st.st_mode);
}
char* path_startswith(const char *path, const char *prefix) {
assert(path);
assert(prefix);
if ((path[0] == '/') != (prefix[0] == '/'))
return NULL;
for (;;) {
size_t a, b;
path += strspn(path, "/");
prefix += strspn(prefix, "/");
if (*prefix == 0)
return (char*) path;
if (*path == 0)
return NULL;
a = strcspn(path, "/");
b = strcspn(prefix, "/");
if (a != b)
return NULL;
if (memcmp(path, prefix, a) != 0)
return NULL;
path += a;
prefix += b;
}
}
static int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, bool apply) {
const char *p, *e;
int r;

View File

@ -22,6 +22,7 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
char* path_startswith(const char *path, const char *prefix) _pure_;
int mkdir_parents(const char *path, mode_t mode);
int mkdir_parents_label(const char *path, mode_t mode);
int mkdir_p(const char *path, mode_t mode);