static int testFileSanitizePath(const void *opaque) { const struct testFileSanitizePathData *data = opaque; int ret = -1; char *actual; if (!(actual = virFileSanitizePath(data->path))) return -1; if (STRNEQ(actual, data->expect)) { fprintf(stderr, "\nexpect: '%s'\nactual: '%s'\n", data->expect, actual); goto cleanup; } ret = 0; cleanup: VIR_FREE(actual); return ret; }
/** * Create a full filename with path to the lock file based on * name/path of corresponding device * * @dev path of the character device * * Returns a modified name that the caller has to free, or NULL * on error. */ static char *virChrdevLockFilePath(const char *dev) { char *path = NULL; char *sanitizedPath = NULL; char *devCopy; char *filename; char *p; if (!(devCopy = strdup(dev))) { virReportOOMError(); goto cleanup; } /* skip the leading "/dev/" */ filename = STRSKIP(devCopy, "/dev"); if (!filename) filename = devCopy; /* substitute path forward slashes for underscores */ p = filename; while (*p) { if (*p == '/') *p = '_'; ++p; } if (virAsprintf(&path, "%s/LCK..%s", VIR_CHRDEV_LOCK_FILE_PATH, filename) < 0) goto cleanup; sanitizedPath = virFileSanitizePath(path); cleanup: VIR_FREE(path); VIR_FREE(devCopy); return sanitizedPath; }