From 0a32d5e6fd06232894199c01fc0a0359e60970e5 Mon Sep 17 00:00:00 2001 From: Yonggang Luo Date: Thu, 27 Nov 2025 21:16:26 +0800 Subject: [PATCH] treewide: Use regexp to replace usage of setenv with os_set_option. setenv\((.*), 1\); => os_set_option($1, true); setenv\((.*), 0\); => os_set_option($1, false); Signed-off-by: Yonggang Luo Reviewed-by: Antonio Ospite Part-of: --- src/amd/vulkan/tests/helpers.h | 2 +- src/freedreno/decode/pager.c | 2 +- .../radeonsi/glsl_tests/amdgcn_glslc.c | 6 +- .../vulkan-mapper/GfxStreamVulkanMapper.cpp | 2 +- src/intel/dev/intel_device_info_test.c | 2 +- src/panfrost/lib/tests/test-layout.cpp | 2 +- src/util/tests/cache_test.cpp | 112 +++++++++--------- src/util/tests/xmlconfig.cpp | 4 +- 8 files changed, 66 insertions(+), 66 deletions(-) diff --git a/src/amd/vulkan/tests/helpers.h b/src/amd/vulkan/tests/helpers.h index 22ac95b2769..c61b31c71d1 100644 --- a/src/amd/vulkan/tests/helpers.h +++ b/src/amd/vulkan/tests/helpers.h @@ -57,7 +57,7 @@ public: void add_envvar(std::string name, std::string value) { - setenv(name.c_str(), value.c_str(), 1); + os_set_option(name.c_str(), value.c_str(), true); envvars.insert(std::make_pair(std::move(name), std::move(value))); } diff --git a/src/freedreno/decode/pager.c b/src/freedreno/decode/pager.c index e967a61da0a..fa9d513ce56 100644 --- a/src/freedreno/decode/pager.c +++ b/src/freedreno/decode/pager.c @@ -49,7 +49,7 @@ pager_open(void) close(fd[1]); less_opts = "FRSMKX"; - setenv("LESS", less_opts, 1); + os_set_option("LESS", less_opts, true); execlp("less", "less", NULL); diff --git a/src/gallium/drivers/radeonsi/glsl_tests/amdgcn_glslc.c b/src/gallium/drivers/radeonsi/glsl_tests/amdgcn_glslc.c index 4c710fa8545..72d9c701028 100644 --- a/src/gallium/drivers/radeonsi/glsl_tests/amdgcn_glslc.c +++ b/src/gallium/drivers/radeonsi/glsl_tests/amdgcn_glslc.c @@ -158,10 +158,10 @@ static void addenv(const char *name, const char *value) if (orig) { char *newval; (void)!asprintf(&newval, "%s,%s", orig, value); - setenv(name, newval, 1); + os_set_option(name, newval, true); free(newval); } else { - setenv(name, value, 1); + os_set_option(name, value, true); } } @@ -172,7 +172,7 @@ main(int argc, char **argv) for (int i = 1; i < argc; i++) { if (strstr(argv[i], "-mcpu=") == argv[i]) { - setenv("AMD_FORCE_FAMILY", argv[i] + 6, 1); + os_set_option("AMD_FORCE_FAMILY", argv[i] + 6, true); } else if (filename == NULL) { filename = argv[i]; } else { diff --git a/src/gfxstream/guest/platform/kumquat/vulkan-mapper/GfxStreamVulkanMapper.cpp b/src/gfxstream/guest/platform/kumquat/vulkan-mapper/GfxStreamVulkanMapper.cpp index e3e8b6f4b7b..b28f7ac87e0 100644 --- a/src/gfxstream/guest/platform/kumquat/vulkan-mapper/GfxStreamVulkanMapper.cpp +++ b/src/gfxstream/guest/platform/kumquat/vulkan-mapper/GfxStreamVulkanMapper.cpp @@ -222,7 +222,7 @@ GfxStreamVulkanMapper* GfxStreamVulkanMapper::getInstance(std::optionaltype, DISK_CACHE_NONE) << "disk_cache_create with MESA_SHADER_CACHE_DISABLE set"; disk_cache_destroy(cache); @@ -206,7 +206,7 @@ test_disk_cache_create(void *mem_ctx, const char *cache_dir_name, disk_cache_destroy(cache); /* For remaining tests, ensure that the cache is enabled. */ - setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "false", true); #endif /* SHADER_CACHE_DISABLE_BY_DEFAULT */ /* For the first real disk_cache_create() clear these environment @@ -228,7 +228,7 @@ test_disk_cache_create(void *mem_ctx, const char *cache_dir_name, #endif /* Test with XDG_CACHE_HOME set */ - setenv("XDG_CACHE_HOME", CACHE_TEST_TMP "/xdg-cache-home", 1); + os_set_option("XDG_CACHE_HOME", CACHE_TEST_TMP "/xdg-cache-home", true); cache = disk_cache_create("test", driver_id, 0); EXPECT_TRUE(cache_exists(cache)) << "disk_cache_create with XDG_CACHE_HOME set with a non-existing parent directory"; @@ -243,7 +243,7 @@ test_disk_cache_create(void *mem_ctx, const char *cache_dir_name, err = rmrf_local(CACHE_TEST_TMP); EXPECT_EQ(err, 0) << "Removing " CACHE_TEST_TMP; - setenv("MESA_SHADER_CACHE_DIR", CACHE_TEST_TMP "/mesa-shader-cache-dir", 1); + os_set_option("MESA_SHADER_CACHE_DIR", CACHE_TEST_TMP "/mesa-shader-cache-dir", true); cache = disk_cache_create("test", driver_id, 0); EXPECT_TRUE(cache_exists(cache)) << "disk_cache_create with MESA_SHADER_CACHE_DIR set with a non-existing parent directory"; @@ -283,7 +283,7 @@ test_put_and_get(bool test_cache_size_limit, const char *driver_id) int count; #ifdef SHADER_CACHE_DISABLE_BY_DEFAULT - setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "false", true); #endif /* SHADER_CACHE_DISABLE_BY_DEFAULT */ cache = disk_cache_create("test", driver_id, 0); @@ -326,7 +326,7 @@ test_put_and_get(bool test_cache_size_limit, const char *driver_id) if (!test_cache_size_limit) return; - setenv("MESA_SHADER_CACHE_MAX_SIZE", "1K", 1); + os_set_option("MESA_SHADER_CACHE_MAX_SIZE", "1K", true); cache = disk_cache_create("test", driver_id, 0); one_KB = (uint8_t *) calloc(1, 1024); @@ -389,7 +389,7 @@ test_put_and_get(bool test_cache_size_limit, const char *driver_id) */ disk_cache_destroy(cache); - setenv("MESA_SHADER_CACHE_MAX_SIZE", "1M", 1); + os_set_option("MESA_SHADER_CACHE_MAX_SIZE", "1M", true); cache = disk_cache_create("test", driver_id, 0); disk_cache_put(cache, blob_key, blob, sizeof(blob), NULL); @@ -461,7 +461,7 @@ test_put_key_and_get_key(const char *driver_id) 50, 55, 52, 53, 54, 55, 56, 57, 58, 59}; #ifdef SHADER_CACHE_DISABLE_BY_DEFAULT - setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "false", true); #endif /* SHADER_CACHE_DISABLE_BY_DEFAULT */ cache = disk_cache_create("test", driver_id, 0); @@ -517,7 +517,7 @@ test_put_and_get_between_instances(const char *driver_id) size_t size; #ifdef SHADER_CACHE_DISABLE_BY_DEFAULT - setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "false", true); #endif /* SHADER_CACHE_DISABLE_BY_DEFAULT */ struct disk_cache *cache1 = disk_cache_create("test_between_instances", @@ -577,10 +577,10 @@ test_put_and_get_between_instances_with_eviction(const char *driver_id) size_t size; #ifdef SHADER_CACHE_DISABLE_BY_DEFAULT - setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "false", true); #endif /* SHADER_CACHE_DISABLE_BY_DEFAULT */ - setenv("MESA_SHADER_CACHE_MAX_SIZE", "2K", 1); + os_set_option("MESA_SHADER_CACHE_MAX_SIZE", "2K", true); cache[0] = disk_cache_create("test_between_instances_with_eviction", driver_id, 0); cache[1] = disk_cache_create("test_between_instances_with_eviction", driver_id, 0); @@ -705,10 +705,10 @@ test_put_big_sized_entry_to_empty_cache(const char *driver_id) size_t size; #ifdef SHADER_CACHE_DISABLE_BY_DEFAULT - setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "false", true); #endif /* SHADER_CACHE_DISABLE_BY_DEFAULT */ - setenv("MESA_SHADER_CACHE_MAX_SIZE", "1K", 1); + os_set_option("MESA_SHADER_CACHE_MAX_SIZE", "1K", true); cache = disk_cache_create("test", driver_id, 0); disk_cache_compute_key(cache, blob, sizeof(blob), blob_key); @@ -748,7 +748,7 @@ TEST_F(Cache, MultiFile) bool compress = true; run_tests: - setenv("MESA_DISK_CACHE_MULTI_FILE", "true", 1); + os_set_option("MESA_DISK_CACHE_MULTI_FILE", "true", true); if (!compress) driver_id = "make_check_uncompressed"; @@ -761,7 +761,7 @@ run_tests: test_put_key_and_get_key(driver_id); - setenv("MESA_DISK_CACHE_MULTI_FILE", "false", 1); + os_set_option("MESA_DISK_CACHE_MULTI_FILE", "false", true); int err = rmrf_local(CACHE_TEST_TMP); EXPECT_EQ(err, 0) << "Removing " CACHE_TEST_TMP " again"; @@ -783,7 +783,7 @@ TEST_F(Cache, SingleFile) bool compress = true; run_tests: - setenv("MESA_DISK_CACHE_SINGLE_FILE", "true", 1); + os_set_option("MESA_DISK_CACHE_SINGLE_FILE", "true", true); if (!compress) driver_id = "make_check_uncompressed"; @@ -801,7 +801,7 @@ run_tests: test_put_and_get_between_instances(driver_id); - setenv("MESA_DISK_CACHE_SINGLE_FILE", "false", 1); + os_set_option("MESA_DISK_CACHE_SINGLE_FILE", "false", true); int err = rmrf_local(CACHE_TEST_TMP); EXPECT_EQ(err, 0) << "Removing " CACHE_TEST_TMP " again"; @@ -820,9 +820,9 @@ TEST_F(Cache, Database) #ifndef ENABLE_SHADER_CACHE GTEST_SKIP() << "ENABLE_SHADER_CACHE not defined."; #else - setenv("MESA_DISK_CACHE_MULTI_FILE", "false", 1); - setenv("MESA_DISK_CACHE_DATABASE_NUM_PARTS", "1", 1); - setenv("MESA_DISK_CACHE_DATABASE", "true", 1); + os_set_option("MESA_DISK_CACHE_MULTI_FILE", "false", true); + os_set_option("MESA_DISK_CACHE_DATABASE_NUM_PARTS", "1", true); + os_set_option("MESA_DISK_CACHE_DATABASE", "true", true); test_disk_cache_create(mem_ctx, CACHE_DIR_NAME_DB, driver_id); @@ -848,7 +848,7 @@ TEST_F(Cache, Database) test_put_big_sized_entry_to_empty_cache(driver_id); - setenv("MESA_DISK_CACHE_DATABASE", "false", 1); + os_set_option("MESA_DISK_CACHE_DATABASE", "false", true); os_unset_option("MESA_DISK_CACHE_DATABASE_NUM_PARTS"); err = rmrf_local(CACHE_TEST_TMP); @@ -874,16 +874,16 @@ TEST_F(Cache, Combined) #ifndef ENABLE_SHADER_CACHE GTEST_SKIP() << "ENABLE_SHADER_CACHE not defined."; #else - setenv("MESA_DISK_CACHE_SINGLE_FILE", "true", 1); - setenv("MESA_DISK_CACHE_MULTI_FILE", "true", 1); - setenv("MESA_DISK_CACHE_DATABASE", "false", 1); + os_set_option("MESA_DISK_CACHE_SINGLE_FILE", "true", true); + os_set_option("MESA_DISK_CACHE_MULTI_FILE", "true", true); + os_set_option("MESA_DISK_CACHE_DATABASE", "false", true); #ifdef SHADER_CACHE_DISABLE_BY_DEFAULT - setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "false", true); #endif /* SHADER_CACHE_DISABLE_BY_DEFAULT */ /* Enable Fossilize read-write cache. */ - setenv("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "true", 1); + os_set_option("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "true", true); test_disk_cache_create(mem_ctx, CACHE_DIR_NAME_SF, driver_id); @@ -921,11 +921,11 @@ TEST_F(Cache, Combined) disk_cache_destroy(cache_sf_wr); /* Disable Fossilize read-write cache. */ - setenv("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "false", 1); + os_set_option("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "false", true); /* Set up Fossilize read-only cache. */ - setenv("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "true", 1); - setenv("MESA_DISK_CACHE_READ_ONLY_FOZ_DBS", "ro_cache", 1); + os_set_option("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "true", true); + os_set_option("MESA_DISK_CACHE_READ_ONLY_FOZ_DBS", "ro_cache", true); /* Create FOZ cache that fetches the RO cache. Note that this produces * empty RW cache files. */ @@ -945,9 +945,9 @@ TEST_F(Cache, Combined) EXPECT_EQ(unlink(foz_rw_file), 0); EXPECT_EQ(unlink(foz_rw_idx_file), 0); - setenv("MESA_DISK_CACHE_SINGLE_FILE", "false", 1); - setenv("MESA_DISK_CACHE_MULTI_FILE", "false", 1); - setenv("MESA_DISK_CACHE_DATABASE", "true", 1); + os_set_option("MESA_DISK_CACHE_SINGLE_FILE", "false", true); + os_set_option("MESA_DISK_CACHE_MULTI_FILE", "false", true); + os_set_option("MESA_DISK_CACHE_DATABASE", "true", true); /* Create MESA-DB cache with enabled retrieval from the read-only * cache. */ @@ -988,7 +988,7 @@ TEST_F(Cache, Combined) disk_cache_destroy(cache_mesa_db); /* Disable read-only cache. */ - setenv("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "false", 1); + os_set_option("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "false", true); /* Create MESA-DB cache with disabled retrieval from the * read-only cache. */ @@ -1016,11 +1016,11 @@ TEST_F(Cache, Combined) disk_cache_destroy(cache_mesa_db); /* Create default multi-file cache. */ - setenv("MESA_DISK_CACHE_DATABASE", "false", 1); - setenv("MESA_DISK_CACHE_MULTI_FILE", "true", 1); + os_set_option("MESA_DISK_CACHE_DATABASE", "false", true); + os_set_option("MESA_DISK_CACHE_MULTI_FILE", "true", true); /* Enable read-only cache. */ - setenv("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "true", 1); + os_set_option("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "true", true); /* Create multi-file cache with enabled retrieval from the * read-only cache. */ @@ -1053,7 +1053,7 @@ TEST_F(Cache, Combined) disk_cache_destroy(cache_multifile); /* Disable read-only cache. */ - setenv("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "false", 1); + os_set_option("MESA_DISK_CACHE_COMBINE_RW_WITH_RO_FOZ", "false", true); os_unset_option("MESA_DISK_CACHE_READ_ONLY_FOZ_DBS"); /* Create multi-file cache with disabled retrieval from the @@ -1102,10 +1102,10 @@ TEST_F(Cache, List) #ifndef FOZ_DB_UTIL_DYNAMIC_LIST GTEST_SKIP() << "FOZ_DB_UTIL_DYNAMIC_LIST not supported"; #else - setenv("MESA_DISK_CACHE_SINGLE_FILE", "true", 1); + os_set_option("MESA_DISK_CACHE_SINGLE_FILE", "true", true); #ifdef SHADER_CACHE_DISABLE_BY_DEFAULT - setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "false", true); #endif /* SHADER_CACHE_DISABLE_BY_DEFAULT */ test_disk_cache_create(mem_ctx, CACHE_DIR_NAME_SF, driver_id); @@ -1147,7 +1147,7 @@ TEST_F(Cache, List) disk_cache_destroy(cache_sf_wr); const char *list_filename = CACHE_TEST_TMP "/foz_dbs_list.txt"; - setenv("MESA_DISK_CACHE_READ_ONLY_FOZ_DBS_DYNAMIC_LIST", list_filename, 1); + os_set_option("MESA_DISK_CACHE_READ_ONLY_FOZ_DBS_DYNAMIC_LIST", list_filename, true); /* Create new empty file */ FILE *list_file = fopen(list_filename, "w"); @@ -1257,8 +1257,8 @@ test_multipart_eviction(const char *driver_id) char *result; size_t size; - setenv("MESA_SHADER_CACHE_MAX_SIZE", "3K", 1); - setenv("MESA_DISK_CACHE_DATABASE_EVICTION_SCORE_2X_PERIOD", "1", 1); + os_set_option("MESA_SHADER_CACHE_MAX_SIZE", "3K", true); + os_set_option("MESA_DISK_CACHE_DATABASE_EVICTION_SCORE_2X_PERIOD", "1", true); struct disk_cache *cache = disk_cache_create("test", driver_id, 0); @@ -1334,9 +1334,9 @@ TEST_F(Cache, DatabaseMultipartEviction) #ifndef ENABLE_SHADER_CACHE GTEST_SKIP() << "ENABLE_SHADER_CACHE not defined."; #else - setenv("MESA_DISK_CACHE_MULTI_FILE", "false", 1); - setenv("MESA_DISK_CACHE_DATABASE_NUM_PARTS", "3", 1); - setenv("MESA_DISK_CACHE_DATABASE", "true", 1); + os_set_option("MESA_DISK_CACHE_MULTI_FILE", "false", true); + os_set_option("MESA_DISK_CACHE_DATABASE_NUM_PARTS", "3", true); + os_set_option("MESA_DISK_CACHE_DATABASE", "true", true); test_disk_cache_create(mem_ctx, CACHE_DIR_NAME_DB, driver_id); @@ -1388,22 +1388,22 @@ TEST_F(Cache, Disabled) #ifndef ENABLE_SHADER_CACHE GTEST_SKIP() << "ENABLE_SHADER_CACHE not defined."; #else - setenv("MESA_DISK_CACHE_SINGLE_FILE", "true", 1); + os_set_option("MESA_DISK_CACHE_SINGLE_FILE", "true", true); #ifdef SHADER_CACHE_DISABLE_BY_DEFAULT - setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "false", true); #endif /* SHADER_CACHE_DISABLE_BY_DEFAULT */ test_disk_cache_create(mem_ctx, CACHE_DIR_NAME_SF, driver_id); test_put_and_get(false, driver_id); - setenv("MESA_SHADER_CACHE_DISABLE", "true", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "true", true); test_put_and_get_disabled(driver_id); - setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); - setenv("MESA_DISK_CACHE_SINGLE_FILE", "false", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "false", true); + os_set_option("MESA_DISK_CACHE_SINGLE_FILE", "false", true); int err = rmrf_local(CACHE_TEST_TMP); EXPECT_EQ(err, 0) << "Removing " CACHE_TEST_TMP " again"; @@ -1417,7 +1417,7 @@ TEST_F(Cache, DoNotDeleteNewCache) #else #ifdef SHADER_CACHE_DISABLE_BY_DEFAULT - setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "false", true); #endif /* SHADER_CACHE_DISABLE_BY_DEFAULT */ char dir_template[] = "/tmp/tmpdir.XXXXXX"; @@ -1428,7 +1428,7 @@ TEST_F(Cache, DoNotDeleteNewCache) sprintf(cache_dir_name, "%s/mesa_shader_cache", dir_name); mkdir(cache_dir_name, 0755); - setenv("MESA_SHADER_CACHE_DIR", dir_name, 1); + os_set_option("MESA_SHADER_CACHE_DIR", dir_name, true); disk_cache_delete_old_cache(); @@ -1448,7 +1448,7 @@ TEST_F(Cache, DoNotDeleteCacheWithNewMarker) #else #ifdef SHADER_CACHE_DISABLE_BY_DEFAULT - setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "false", true); #endif /* SHADER_CACHE_DISABLE_BY_DEFAULT */ char dir_template[] = "/tmp/tmpdir.XXXXXX"; @@ -1465,7 +1465,7 @@ TEST_F(Cache, DoNotDeleteCacheWithNewMarker) FILE *file = fopen(file_name, "w"); fclose(file); - setenv("MESA_SHADER_CACHE_DIR", dir_name, 1); + os_set_option("MESA_SHADER_CACHE_DIR", dir_name, true); disk_cache_delete_old_cache(); @@ -1486,7 +1486,7 @@ TEST_F(Cache, DeleteOldCache) #else #ifdef SHADER_CACHE_DISABLE_BY_DEFAULT - setenv("MESA_SHADER_CACHE_DISABLE", "false", 1); + os_set_option("MESA_SHADER_CACHE_DISABLE", "false", true); #endif /* SHADER_CACHE_DISABLE_BY_DEFAULT */ char dir_template[] = "/tmp/tmpdir.XXXXXX"; @@ -1507,7 +1507,7 @@ TEST_F(Cache, DeleteOldCache) EXPECT_EQ(utime(file_name, &utime_buf), 0); - setenv("MESA_SHADER_CACHE_DIR", dir_name, 1); + os_set_option("MESA_SHADER_CACHE_DIR", dir_name, true); disk_cache_delete_old_cache(); diff --git a/src/util/tests/xmlconfig.cpp b/src/util/tests/xmlconfig.cpp index 49400a91554..ba8230e86af 100644 --- a/src/util/tests/xmlconfig.cpp +++ b/src/util/tests/xmlconfig.cpp @@ -119,7 +119,7 @@ TEST_F(xmlconfig_test, enums_from_env) DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_1) }; - setenv("vblank_mode", "0", 1); + os_set_option("vblank_mode", "0", true); driParseOptionInfo(&options, driconf, ARRAY_SIZE(driconf)); EXPECT_EQ(0, driQueryOptioni(&options, "vblank_mode")); @@ -244,7 +244,7 @@ TEST_F(xmlconfig_test, drirc_user_app) TEST_F(xmlconfig_test, drirc_env_override) { - setenv("mesa_drirc_option", "7", 1); + os_set_option("mesa_drirc_option", "7", true); driOptionCache cache = drirc_init("driver", "drm", "app1", NULL, 0,