zpool_do_import(int argc, char **argv)
{
char **searchdirs = NULL;
+ char *env, *envdup = NULL;
int nsearch = 0;
int c;
int err = 0;
idata.unique = B_TRUE;
}
+ /*
+ * Check the environment for the preferred search path.
+ */
+ if ((searchdirs == NULL) && (env = getenv("ZPOOL_IMPORT_PATH"))) {
+ char *dir;
+
+ envdup = strdup(env);
+
+ dir = strtok(envdup, ":");
+ while (dir != NULL) {
+ if (searchdirs == NULL) {
+ searchdirs = safe_malloc(sizeof (char *));
+ } else {
+ char **tmp = safe_malloc((nsearch + 1) *
+ sizeof (char *));
+ bcopy(searchdirs, tmp, nsearch *
+ sizeof (char *));
+ free(searchdirs);
+ searchdirs = tmp;
+ }
+ searchdirs[nsearch++] = dir;
+ dir = strtok(NULL, ":");
+ }
+ }
idata.path = searchdirs;
idata.paths = nsearch;
if (err == 1) {
if (searchdirs != NULL)
free(searchdirs);
+ if (envdup != NULL)
+ free(envdup);
nvlist_free(policy);
return (1);
}
nvlist_free(policy);
if (searchdirs != NULL)
free(searchdirs);
+ if (envdup != NULL)
+ free(envdup);
return (err ? 1 : 0);
}