本文整理汇总了C++中canonicalize_path函数的典型用法代码示例。如果您正苦于以下问题:C++ canonicalize_path函数的具体用法?C++ canonicalize_path怎么用?C++ canonicalize_path使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了canonicalize_path函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: test_canonicalize_path
static Boolean test_canonicalize_path(int verbose)
{
static struct stringtest {
char *str1;
char *str2;
} tests[] = {
{ "/foo/a/bz.to/bar.dvi", "/foo/a/bz.to/bar.dvi" },
{ "/foo/../bar.dvi", "/bar.dvi" },
{ "/foo/../bar.dvi", "/bar.dvi" },
{ "/foo/./roo/./bar.dvi", "/foo/roo/bar.dvi" },
{ "/foo/./roo/../bar.dvi", "/foo/bar.dvi" },
};
size_t i;
Boolean result = True;
for (i = 0; i < (sizeof tests / sizeof tests[0]); i++) {
if (verbose) {
INFO((stderr, "canonicalize_path(%s) -> %s == %s?\n",
tests[i].str1,
canonicalize_path(tests[i].str1),
tests[i].str2));
}
if (!test_str_equality(verbose, canonicalize_path(tests[i].str1), tests[i].str2)) {
result = False;
}
}
return result;
}
开发者ID:clerkma,项目名称:texlive-mobile,代码行数:28,代码来源:test_string_utils.c
示例2: make_relative_path
/*
* make_relative_path - make a path relative to the actual binary location
*
* This function exists to support relocation of installation trees.
*
* ret_path is the output area (must be of size MAXPGPATH)
* target_path is the compiled-in path to the directory we want to find
* bin_path is the compiled-in path to the directory of executables
* my_exec_path is the actual location of my executable
*
* If target_path matches bin_path up to the last directory component of
* bin_path, then we build the result as my_exec_path (less the executable
* name and last directory) joined to the non-matching part of target_path.
* Otherwise, we return target_path as-is.
*
* For example:
* target_path = '/usr/local/share/postgresql'
* bin_path = '/usr/local/bin'
* my_exec_path = '/opt/pgsql/bin/postmaster'
* Given these inputs we would return '/opt/pgsql/share/postgresql'
*/
static void
make_relative_path(char *ret_path, const char *target_path,
const char *bin_path, const char *my_exec_path)
{
const char *bin_end;
int prefix_len;
bin_end = last_dir_separator(bin_path);
if (!bin_end)
goto no_match;
prefix_len = bin_end - bin_path + 1;
if (strncmp(target_path, bin_path, prefix_len) != 0)
goto no_match;
StrNCpy(ret_path, my_exec_path, MAXPGPATH);
trim_directory(ret_path); /* remove my executable name */
trim_directory(ret_path); /* remove last directory component (/bin) */
join_path_components(ret_path, ret_path, target_path + prefix_len);
canonicalize_path(ret_path);
return;
no_match:
StrNCpy(ret_path, target_path, MAXPGPATH);
canonicalize_path(ret_path);
}
开发者ID:berkeley-cs186,项目名称:course-fa07,代码行数:46,代码来源:path.c
示例3: to_canonic_path
int
to_canonic_path(const char path[], char buf[], size_t buf_len)
{
if(!is_path_absolute(path))
{
char cwd[PATH_MAX];
char full_path[PATH_MAX];
if(getcwd(cwd, sizeof(cwd)) == NULL)
{
/* getcwd() failed, we can't use relative path, so fail. */
LOG_SERROR_MSG(errno, "Can't get CWD");
return 1;
}
snprintf(full_path, sizeof(full_path), "%s/%s", cwd, path);
canonicalize_path(full_path, buf, buf_len);
}
else
{
canonicalize_path(path, buf, buf_len);
}
chosp(buf);
return 0;
}
开发者ID:jubalh,项目名称:vifm,代码行数:26,代码来源:path.c
示例4: load_config
/*
* load_config()
*
* Set default options and overwrite with values from provided configuration
* file.
*
* Returns true if a configuration file could be parsed, otherwise false.
*
* Any configuration options changed in this function must also be changed in
* reload_config()
*/
bool
load_config(const char *config_file, t_configuration_options *options, char *argv0)
{
struct stat config;
/* Sanity checks */
/*
* If a configuration file was provided, check it exists, otherwise
* emit an error and terminate
*/
if (config_file[0])
{
strncpy(config_file_path, config_file, MAXPGPATH);
canonicalize_path(config_file_path);
if (stat(config_file_path, &config) != 0)
{
log_err(_("provided configuration file '%s' not found: %s\n"),
config_file,
strerror(errno)
);
exit(ERR_BAD_CONFIG);
}
config_file_provided = true;
}
/*
* If no configuration file was provided, attempt to find a default file
*/
if (config_file_provided == false)
{
char my_exec_path[MAXPGPATH];
char etc_path[MAXPGPATH];
/* First check if one is in the default sysconfdir */
if (find_my_exec(argv0, my_exec_path) < 0)
{
fprintf(stderr, _("%s: could not find own program executable\n"), argv0);
exit(EXIT_FAILURE);
}
get_etc_path(my_exec_path, etc_path);
snprintf(config_file_path, MAXPGPATH, "%s/repmgr.conf", etc_path);
log_debug(_("Looking for configuration file in %s\n"), etc_path);
if (stat(config_file_path, &config) != 0)
{
/* Not found - default to ./repmgr.conf */
strncpy(config_file_path, DEFAULT_CONFIG_FILE, MAXPGPATH);
canonicalize_path(config_file_path);
log_debug(_("Looking for configuration file in %s\n"), config_file_path);
}
}
return parse_config(options);
}
开发者ID:Bazoozoo,项目名称:repmgr,代码行数:71,代码来源:config.c
示例5: grub_resolve_relative_path
/* Return a new heap-allocated string representing to absolute path
to the file referred to by PATH. If PATH is an absolute path, then
the returned path is a copy of PATH. If PATH is a relative path, then
BASE is with PATH used to construct the absolute path. */
char *
grub_resolve_relative_path (const char *base, const char *path)
{
char *abspath;
char *canonpath;
char *p;
grub_size_t l;
/* If PATH is an absolute path, then just use it as is. */
if (path[0] == '/' || path[0] == '(')
return canonicalize_path (path);
abspath = grub_malloc (grub_strlen (base) + grub_strlen (path) + 3);
if (! abspath)
return 0;
/* Concatenate BASE and PATH. */
p = grub_stpcpy (abspath, base);
l = grub_strlen (abspath);
if (l == 0 || abspath[l-1] != '/')
{
*p = '/';
p++;
*p = 0;
}
grub_stpcpy (p, path);
canonpath = canonicalize_path (abspath);
if (! canonpath)
return abspath;
grub_free (abspath);
return canonpath;
}
开发者ID:376473984,项目名称:TrustedGRUB2,代码行数:38,代码来源:gui_string_util.c
示例6: tablespace_list_append
/*
* Split argument into old_dir and new_dir and append to tablespace mapping
* list.
*
* Adapted from pg_basebackup.c
*/
static void
tablespace_list_append(t_configuration_options *options, const char *arg)
{
TablespaceListCell *cell;
char *dst;
char *dst_ptr;
const char *arg_ptr;
cell = (TablespaceListCell *) pg_malloc0(sizeof(TablespaceListCell));
if (cell == NULL)
{
log_err(_("unable to allocate memory; terminating\n"));
exit(ERR_BAD_CONFIG);
}
dst_ptr = dst = cell->old_dir;
for (arg_ptr = arg; *arg_ptr; arg_ptr++)
{
if (dst_ptr - dst >= MAXPGPATH)
{
log_err(_("directory name too long\n"));
exit(ERR_BAD_CONFIG);
}
if (*arg_ptr == '\\' && *(arg_ptr + 1) == '=')
; /* skip backslash escaping = */
else if (*arg_ptr == '=' && (arg_ptr == arg || *(arg_ptr - 1) != '\\'))
{
if (*cell->new_dir)
{
log_err(_("multiple \"=\" signs in tablespace mapping\n"));
exit(ERR_BAD_CONFIG);
}
else
{
dst = dst_ptr = cell->new_dir;
}
}
else
*dst_ptr++ = *arg_ptr;
}
if (!*cell->old_dir || !*cell->new_dir)
{
log_err(_("invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"\n"),
arg);
exit(ERR_BAD_CONFIG);
}
canonicalize_path(cell->old_dir);
canonicalize_path(cell->new_dir);
if (options->tablespace_mapping.tail)
options->tablespace_mapping.tail->next = cell;
else
options->tablespace_mapping.head = cell;
options->tablespace_mapping.tail = cell;
}
开发者ID:Bazoozoo,项目名称:repmgr,代码行数:65,代码来源:config.c
示例7: set_pglocale_pgservice
/*
* set_pglocale_pgservice
*
* Set application-specific locale and service directory
*
* This function takes the value of argv[0] rather than a full path.
*
* (You may be wondering why this is in exec.c. It requires this module's
* services and doesn't introduce any new dependencies, so this seems as
* good as anyplace.)
*/
void
set_pglocale_pgservice(const char *argv0, const char *app)
{
char path[MAXPGPATH];
char my_exec_path[MAXPGPATH];
char env_path[MAXPGPATH + sizeof("PGSYSCONFDIR=")]; /* longer than
* PGLOCALEDIR */
char *dup_path;
/* don't set LC_ALL in the backend */
if (strcmp(app, PG_TEXTDOMAIN("postgres")) != 0)
{
setlocale(LC_ALL, "");
/*
* One could make a case for reproducing here PostmasterMain()'s test
* for whether the process is multithreaded. Unlike the postmaster,
* no frontend program calls sigprocmask() or otherwise provides for
* mutual exclusion between signal handlers. While frontends using
* fork(), if multithreaded, are formally exposed to undefined
* behavior, we have not witnessed a concrete bug. Therefore,
* complaining about multithreading here may be mere pedantry.
*/
}
if (find_my_exec(argv0, my_exec_path) < 0)
return;
#ifdef ENABLE_NLS
get_locale_path(my_exec_path, path);
bindtextdomain(app, path);
textdomain(app);
if (getenv("PGLOCALEDIR") == NULL)
{
/* set for libpq to use */
snprintf(env_path, sizeof(env_path), "PGLOCALEDIR=%s", path);
canonicalize_path(env_path + 12);
dup_path = strdup(env_path);
if (dup_path)
putenv(dup_path);
}
#endif
if (getenv("PGSYSCONFDIR") == NULL)
{
get_etc_path(my_exec_path, path);
/* set for libpq to use */
snprintf(env_path, sizeof(env_path), "PGSYSCONFDIR=%s", path);
canonicalize_path(env_path + 13);
dup_path = strdup(env_path);
if (dup_path)
putenv(dup_path);
}
}
开发者ID:dreamsxin,项目名称:postgresql-1,代码行数:67,代码来源:exec.c
示例8: treat_many_dots_right
static void
treat_many_dots_right(void)
{
char buf[PATH_MAX];
canonicalize_path("...", buf, sizeof(buf));
#ifndef _WIN32
assert_string_equal(".../", buf);
#else
assert_string_equal("./", buf);
#endif
canonicalize_path(".../", buf, sizeof(buf));
#ifndef _WIN32
assert_string_equal(".../", buf);
#else
assert_string_equal("./", buf);
#endif
canonicalize_path("...abc", buf, sizeof(buf));
assert_string_equal("...abc/", buf);
canonicalize_path(".abc", buf, sizeof(buf));
assert_string_equal(".abc/", buf);
canonicalize_path("abc...", buf, sizeof(buf));
assert_string_equal("abc.../", buf);
canonicalize_path("abc.", buf, sizeof(buf));
assert_string_equal("abc./", buf);
canonicalize_path(ABS_PREFIX "/a/.../.", buf, sizeof(buf));
#ifndef _WIN32
assert_string_equal(ABS_PREFIX "/a/.../", buf);
#else
assert_string_equal(ABS_PREFIX "/a/", buf);
#endif
canonicalize_path(ABS_PREFIX "/windows/.../", buf, sizeof(buf));
#ifndef _WIN32
assert_string_equal(ABS_PREFIX "/windows/.../", buf);
#else
assert_string_equal(ABS_PREFIX "/windows/", buf);
#endif
canonicalize_path(ABS_PREFIX "/windows/...abc", buf, sizeof(buf));
assert_string_equal(ABS_PREFIX "/windows/...abc/", buf);
canonicalize_path(ABS_PREFIX "/windows/..................", buf, sizeof(buf));
#ifndef _WIN32
assert_string_equal(ABS_PREFIX "/windows/................../", buf);
#else
assert_string_equal(ABS_PREFIX "/windows/", buf);
#endif
}
开发者ID:ackeack,项目名称:workenv,代码行数:55,代码来源:canonical.c
示例9: excess_slashes
static void
excess_slashes(void)
{
char buf[PATH_MAX];
canonicalize_path(ABS_PREFIX "//", buf, sizeof(buf));
assert_string_equal(ABS_PREFIX "/", buf);
canonicalize_path(ABS_PREFIX "/////////////", buf, sizeof(buf));
assert_string_equal(ABS_PREFIX "/", buf);
}
开发者ID:ackeack,项目名称:workenv,代码行数:11,代码来源:canonical.c
示例10: not_root_updir
static void
not_root_updir(void)
{
char buf[PATH_MAX];
canonicalize_path("../", buf, sizeof(buf));
assert_string_equal("../", buf);
canonicalize_path("../../", buf, sizeof(buf));
assert_string_equal("../../", buf);
}
开发者ID:ackeack,项目名称:workenv,代码行数:11,代码来源:canonical.c
示例11: paths_are_equal
int
paths_are_equal(const char s[], const char t[])
{
/* Some additional space is allocated for adding slashes. */
char s_can[strlen(s) + 8];
char t_can[strlen(t) + 8];
canonicalize_path(s, s_can, sizeof(s_can));
canonicalize_path(t, t_can, sizeof(t_can));
return stroscmp(s_can, t_can) == 0;
}
开发者ID:jubalh,项目名称:vifm,代码行数:12,代码来源:path.c
示例12: make_rel_path
const char *
make_rel_path(const char path[], const char base[])
{
static char buf[PATH_MAX];
const char *p = path, *b = base;
int i;
int nslashes;
#ifdef _WIN32
if(path[1] == ':' && base[1] == ':' && path[0] != base[0])
{
canonicalize_path(path, buf, sizeof(buf));
return buf;
}
#endif
while(p[0] != '\0' && p[1] != '\0' && b[0] != '\0' && b[1] != '\0')
{
const char *op = p, *ob = b;
if((p = strchr(p + 1, '/')) == NULL)
p = path + strlen(path);
if((b = strchr(b + 1, '/')) == NULL)
b = base + strlen(base);
if(p - path != b - base || strnoscmp(path, base, p - path) != 0)
{
p = op;
b = ob;
break;
}
}
canonicalize_path(b, buf, sizeof(buf));
chosp(buf);
nslashes = 0;
for(i = 0; buf[i] != '\0'; i++)
if(buf[i] == '/')
nslashes++;
buf[0] = '\0';
while(nslashes-- > 0)
strcat(buf, "../");
if(*p == '/')
p++;
canonicalize_path(p, buf + strlen(buf), sizeof(buf) - strlen(buf));
chosp(buf);
if(buf[0] == '\0')
strcpy(buf, ".");
return buf;
}
开发者ID:jubalh,项目名称:vifm,代码行数:53,代码来源:path.c
示例13: make_relative_path
/*
* make_relative_path - make a path relative to the actual binary location
*
* This function exists to support relocation of installation trees.
*
* ret_path is the output area (must be of size MAXPGPATH)
* target_path is the compiled-in path to the directory we want to find
* bin_path is the compiled-in path to the directory of executables
* my_exec_path is the actual location of my executable
*
* We determine the common prefix of target_path and bin_path, then compare
* the remainder of bin_path to the last directory component(s) of
* my_exec_path. If they match, build the result as the part of my_exec_path
* preceding the match, joined to the remainder of target_path. If no match,
* return target_path as-is.
*
* For example:
* target_path = '/usr/local/share/postgresql'
* bin_path = '/usr/local/bin'
* my_exec_path = '/opt/pgsql/bin/postmaster'
* Given these inputs, the common prefix is '/usr/local/', the tail of
* bin_path is 'bin' which does match the last directory component of
* my_exec_path, so we would return '/opt/pgsql/share/postgresql'
*/
static void
make_relative_path(char *ret_path, const char *target_path,
const char *bin_path, const char *my_exec_path)
{
int prefix_len;
int tail_start;
int tail_len;
int i;
/*
* Determine the common prefix --- note we require it to end on a
* directory separator, consider eg '/usr/lib' and '/usr/libexec'.
*/
prefix_len = 0;
for (i = 0; target_path[i] && bin_path[i]; i++)
{
if (IS_DIR_SEP(target_path[i]) && IS_DIR_SEP(bin_path[i]))
prefix_len = i + 1;
else if (target_path[i] != bin_path[i])
break;
}
if (prefix_len == 0)
goto no_match; /* no common prefix? */
tail_len = strlen(bin_path) - prefix_len;
/*
* Set up my_exec_path without the actual executable name, and
* canonicalize to simplify comparison to bin_path.
*/
strlcpy(ret_path, my_exec_path, MAXPGPATH);
trim_directory(ret_path); /* remove my executable name */
canonicalize_path(ret_path);
/*
* Tail match?
*/
tail_start = (int) strlen(ret_path) - tail_len;
if (tail_start > 0 &&
IS_DIR_SEP(ret_path[tail_start - 1]) &&
dir_strcmp(ret_path + tail_start, bin_path + prefix_len) == 0)
{
ret_path[tail_start] = '\0';
trim_trailing_separator(ret_path);
join_path_components(ret_path, ret_path, target_path + prefix_len);
canonicalize_path(ret_path);
return;
}
no_match:
strlcpy(ret_path, target_path, MAXPGPATH);
canonicalize_path(ret_path);
}
开发者ID:DJEX93,项目名称:dsploit,代码行数:76,代码来源:path.c
示例14: remove_dots
static void
remove_dots(void)
{
char buf[PATH_MAX];
canonicalize_path("./", buf, sizeof(buf));
assert_string_equal("./", buf);
canonicalize_path(ABS_PREFIX "/a/./", buf, sizeof(buf));
assert_string_equal(ABS_PREFIX "/a/", buf);
canonicalize_path("././././././", buf, sizeof(buf));
assert_string_equal("./", buf);
}
开发者ID:ackeack,项目名称:workenv,代码行数:14,代码来源:canonical.c
示例15: test_canonicalize_path
static int test_canonicalize_path(const char *path, const char *expected)
{
char epath[PATH_MAX];
EXPECT_ZERO(zsnprintf(epath, PATH_MAX, "%s", path));
if (!expected) {
EXPECT_NONZERO(canonicalize_path(epath));
}
else {
EXPECT_ZERO(canonicalize_path(epath));
EXPECT_ZERO(strcmp(epath, expected));
}
return 0;
}
开发者ID:cmccabe,项目名称:cmccabe-daemon-utils,代码行数:14,代码来源:path_unit.c
示例16: complex_tests
static void
complex_tests(void)
{
char buf[PATH_MAX];
canonicalize_path(ABS_PREFIX "/a/b/../c/../..", buf, sizeof(buf));
assert_string_equal(ABS_PREFIX "/", buf);
canonicalize_path(ABS_PREFIX "/a/./b/./.././c/../../.", buf, sizeof(buf));
assert_string_equal(ABS_PREFIX "/", buf);
canonicalize_path(ABS_PREFIX "//a//./b/./../////./c///.././/", buf,
sizeof(buf));
assert_string_equal(ABS_PREFIX "/a/", buf);
}
开发者ID:ackeack,项目名称:workenv,代码行数:15,代码来源:canonical.c
示例17: cfg_set_fuse_home
int
cfg_set_fuse_home(const char new_value[])
{
#ifdef _WIN32
char with_forward_slashes[strlen(new_value) + 1];
strcpy(with_forward_slashes, new_value);
system_to_internal_slashes(with_forward_slashes);
new_value = with_forward_slashes;
#endif
char canonicalized[PATH_MAX + 1];
canonicalize_path(new_value, canonicalized, sizeof(canonicalized));
if(!is_path_absolute(new_value))
{
if(cfg.fuse_home == NULL)
{
/* Do not leave cfg.fuse_home uninitialized. */
cfg.fuse_home = strdup("");
}
show_error_msgf("Error Setting FUSE Home Directory",
"The path is not absolute: %s", canonicalized);
return 1;
}
return replace_string(&cfg.fuse_home, canonicalized);
}
开发者ID:phantasea,项目名称:vifm,代码行数:28,代码来源:config.c
示例18: setup
static void
setup(char *argv0, bool live_check)
{
char exec_path[MAXPGPATH]; /* full path to my executable */
/*
* make sure the user has a clean environment, otherwise, we may confuse
* libpq when we connect to one (or both) of the servers.
*/
check_pghost_envvar();
verify_directories();
/* no postmasters should be running */
if (!live_check && is_server_running(old_cluster.pgdata))
pg_log(PG_FATAL, "There seems to be a postmaster servicing the old cluster.\n"
"Please shutdown that postmaster and try again.\n");
/* same goes for the new postmaster */
if (is_server_running(new_cluster.pgdata))
pg_log(PG_FATAL, "There seems to be a postmaster servicing the new cluster.\n"
"Please shutdown that postmaster and try again.\n");
/* get path to pg_upgrade executable */
if (find_my_exec(argv0, exec_path) < 0)
pg_log(PG_FATAL, "Could not get pathname to pg_upgrade: %s\n", getErrorText(errno));
/* Trim off program name and keep just path */
*last_dir_separator(exec_path) = '\0';
canonicalize_path(exec_path);
os_info.exec_path = pg_strdup(exec_path);
}
开发者ID:tux-mind,项目名称:platform_external_postgresql,代码行数:32,代码来源:pg_upgrade.c
示例19: display_summary
static int
display_summary(void)
{
FILE *swaps;
char line[1024] ;
if ((swaps = fopen(_PATH_PROC_SWAPS, "r")) == NULL) {
warn(_("%s: open failed"), _PATH_PROC_SWAPS);
return -1;
}
while (fgets(line, sizeof(line), swaps)) {
char *p, *dev, *cn;
if (!strncmp(line, "Filename\t", 9)) {
printf("%s", line);
continue;
}
for (p = line; *p && *p != ' '; p++);
*p = '\0';
for (++p; *p && isblank((unsigned int) *p); p++);
dev = unmangle(line, NULL);
if (!dev)
continue;
cn = canonicalize_path(dev);
if (cn)
printf("%-39s %s", cn, p);
free(dev);
free(cn);
}
fclose(swaps);
return 0 ;
}
开发者ID:SpoilForHawkeye,项目名称:mount,代码行数:34,代码来源:swapon.c
示例20: parse_path
/* buf should be at least PATH_MAX characters length */
static void
parse_path(const char *dir, const char *path, char *buf)
{
strcpy(buf, path);
#ifdef _WIN32
to_forward_slash(buf);
#endif
if(is_path_absolute(buf))
{
snprintf(buf, PATH_MAX, "%s", path);
}
#ifdef _WIN32
else if(buf[0] == '/')
{
snprintf(buf, PATH_MAX, "%c:%s", dir[0], path);
}
#endif
else
{
char new_path[PATH_MAX];
snprintf(new_path, sizeof(new_path), "%s/%s", dir, path);
canonicalize_path(new_path, buf, PATH_MAX);
}
if(!is_root_dir(buf))
chosp(buf);
#ifdef _WIN32
to_forward_slash(buf);
#endif
}
开发者ID:ackeack,项目名称:workenv,代码行数:31,代码来源:vifm.c
注:本文中的canonicalize_path函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论