本文整理汇总了C++中IsFileSep函数的典型用法代码示例。如果您正苦于以下问题:C++ IsFileSep函数的具体用法?C++ IsFileSep怎么用?C++ IsFileSep使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IsFileSep函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: IsAbsoluteFileName
int IsAbsoluteFileName(const char *f)
{
int off = 0;
// Check for quoted strings
for (off = 0; f[off] == '\"'; off++)
{
}
#ifdef _WIN32
if (IsFileSep(f[off]) && IsFileSep(f[off + 1]))
{
return true;
}
if (isalpha(f[off]) && f[off + 1] == ':' && IsFileSep(f[off + 2]))
{
return true;
}
#endif
if (f[off] == '/')
{
return true;
}
return false;
}
开发者ID:patuchov,项目名称:core,代码行数:28,代码来源:files_names.c
示例2: CompressPath
int CompressPath(char *dest, const char *src)
{
char node[CF_BUFSIZE];
int nodelen;
int rootlen;
memset(dest, 0, CF_BUFSIZE);
rootlen = RootDirLength(src);
strncpy(dest, src, rootlen);
for (const char *sp = src + rootlen; *sp != '\0'; sp++)
{
if (IsFileSep(*sp))
{
continue;
}
for (nodelen = 0; (sp[nodelen] != '\0') && (!IsFileSep(sp[nodelen])); nodelen++)
{
if (nodelen > CF_MAXLINKSIZE)
{
Log(LOG_LEVEL_ERR, "Link in path suspiciously large");
return false;
}
}
strncpy(node, sp, nodelen);
node[nodelen] = '\0';
sp += nodelen - 1;
if (strcmp(node, ".") == 0)
{
continue;
}
if (strcmp(node, "..") == 0)
{
if (!ChopLastNode(dest))
{
Log(LOG_LEVEL_DEBUG, "used .. beyond top of filesystem!");
return false;
}
continue;
}
else
{
AddSlash(dest);
}
if (!JoinPath(dest, node))
{
return false;
}
}
return true;
}
开发者ID:patuchov,项目名称:core,代码行数:60,代码来源:files_names.c
示例3: StringWriter
char *MapNameCopy(const char *s)
{
Writer *w = StringWriter();
/* c:\a\b -> /cygdrive/c\a\b */
if (s[0] && isalpha(s[0]) && s[1] == ':')
{
WriterWriteF(w, "/cygdrive/%c", s[0]);
s += 2;
}
for (; *s; s++)
{
/* a//b//c -> a/b/c */
/* a\\b\\c -> a\b\c */
if (IsFileSep(*s) && IsFileSep(*(s + 1)))
{
continue;
}
/* a\b\c -> a/b/c */
WriterWriteChar(w, *s == '\\' ? '/' : *s);
}
return StringWriterClose(w);
}
开发者ID:fkoner,项目名称:core,代码行数:26,代码来源:patches.c
示例4: DeleteRedundantSlashes
void DeleteRedundantSlashes(char *str)
{
int move_from;
// Invariant: newpos <= oldpos
int oldpos = RootDirLength(str);
int newpos = oldpos;
while (str[oldpos] != '\0')
{
// Skip over subsequent separators.
while (IsFileSep(str[oldpos]))
{
oldpos++;
}
move_from = oldpos;
// And then skip over the next path component.
while (str[oldpos] != '\0' && !IsFileSep(str[oldpos]))
{
oldpos++;
}
// If next character is file separator, move past it, since we want to keep one.
if (IsFileSep(str[oldpos]))
{
oldpos++;
}
int move_len = oldpos - move_from;
memmove(&str[newpos], &str[move_from], move_len);
newpos += move_len;
}
str[newpos] = '\0';
}
开发者ID:npe9,项目名称:core,代码行数:34,代码来源:files_names.c
示例5: RootDirLength
int RootDirLength(char *f)
/* Return length of Initial directory in path - */
{
#ifdef NT
int len;
if (IsFileSep(f[0]) && IsFileSep(f[1]))
{
/* UNC style path */
/* Skip over host name */
for (len=2; !IsFileSep(f[len]); len++)
{
if (f[len] == '\0')
{
return len;
}
}
/* Skip over share name */
for (len++; !IsFileSep(f[len]); len++)
{
if (f[len] == '\0')
{
return len;
}
}
/* Skip over file separator */
len++;
return len;
}
if ( isalpha(f[0]) && f[1] == ':' && IsFileSep(f[2]) )
{
return 3;
}
#endif
if (*f == '/')
{
return 1;
}
return 0;
}
开发者ID:AsherBond,项目名称:cf22cf3,代码行数:47,代码来源:filenames.c
示例6: NTRootDirLength
static int NTRootDirLength(const char *f)
{
int len;
if (IsFileSep(f[0]) && IsFileSep(f[1]))
{
/* UNC style path */
/* Skip over host name */
for (len = 2; !IsFileSep(f[len]); len++)
{
if (f[len] == '\0')
{
return len;
}
}
/* Skip over share name */
for (len++; !IsFileSep(f[len]); len++)
{
if (f[len] == '\0')
{
return len;
}
}
/* Skip over file separator */
len++;
return len;
}
if (isalpha(f[0]) && f[1] == ':')
{
if (IsFileSep(f[2]))
{
return 3;
}
return 2;
}
return UnixRootDirLength(f);
}
开发者ID:patuchov,项目名称:core,代码行数:45,代码来源:files_names.c
示例7: UnixRootDirLength
static int UnixRootDirLength(const char *f)
{
if (IsFileSep(*f))
{
return 1;
}
return 0;
}
开发者ID:npe9,项目名称:core,代码行数:9,代码来源:files_names.c
示例8: IsAbsPath
int IsAbsPath(const char *path)
{
if (IsFileSep(*path))
{
return true;
}
else
{
return false;
}
}
开发者ID:npe9,项目名称:core,代码行数:11,代码来源:files_names.c
示例9: IsAbsoluteFileName
int IsAbsoluteFileName(char *f)
{
#ifdef NT
if (IsFileSep(f[0]) && IsFileSep(f[1]))
{
return true;
}
if ( isalpha(f[0]) && f[1] == ':' && IsFileSep(f[2]) )
{
return true;
}
#endif
if (*f == '/')
{
return true;
}
return false;
}
开发者ID:AsherBond,项目名称:cf22cf3,代码行数:20,代码来源:filenames.c
示例10: AddSlash
void AddSlash(char *str)
{
char *sp, *sep = FILE_SEPARATOR_STR;
int f = false, b = false;
if (str == NULL)
{
return;
}
// add root slash on Unix systems
if (strlen(str) == 0)
{
#if !defined(_WIN32)
strcpy(str, "/");
#endif
return;
}
/* Try to see what convention is being used for filenames
in case this is a cross-system copy from Win/Unix */
for (sp = str; *sp != '\0'; sp++)
{
switch (*sp)
{
case '/':
f = true;
break;
case '\\':
b = true;
break;
default:
break;
}
}
if (f && (!b))
{
sep = "/";
}
else if (b && (!f))
{
sep = "\\";
}
if (!IsFileSep(str[strlen(str) - 1]))
{
strcat(str, sep);
}
}
开发者ID:patuchov,项目名称:core,代码行数:51,代码来源:files_names.c
示例11: DeleteSlash
// Can remove several slashes if they are redundant.
void DeleteSlash(char *str)
{
int size = strlen(str);
if ((size == 0) || (str == NULL))
{
return;
}
int root = RootDirLength(str);
while (IsFileSep(str[size - 1]) && size - 1 > root)
{
size--;
}
str[size] = '\0'; /* no-op if we didn't change size */
}
开发者ID:npe9,项目名称:core,代码行数:16,代码来源:files_names.c
示例12: DeleteSlash
void DeleteSlash(char *str)
{
if ((strlen(str) == 0) || (str == NULL))
{
return;
}
if (strcmp(str, "/") == 0)
{
return;
}
if (IsFileSep(str[strlen(str) - 1]))
{
str[strlen(str) - 1] = '\0';
}
}
开发者ID:patuchov,项目名称:core,代码行数:17,代码来源:files_names.c
示例13: assert
const char *FirstFileSeparator(const char *str)
{
assert(str);
assert(strlen(str) > 0);
if(strncmp(str, "\\\\", 2) == 0) // windows share
{
return str + 1;
}
for(const char *pos = str; *pos != '\0'; pos++)
{
if(IsFileSep(*pos))
{
return pos;
}
}
return NULL;
}
开发者ID:npe9,项目名称:core,代码行数:20,代码来源:files_names.c
示例14: strlen
const char *LastFileSeparator(const char *str)
/* Return pointer to last file separator in string, or NULL if
string does not contains any file separtors */
{
const char *sp;
/* Walk through string backwards */
sp = str + strlen(str) - 1;
while (sp >= str)
{
if (IsFileSep(*sp))
{
return sp;
}
sp--;
}
return NULL;
}
开发者ID:npe9,项目名称:core,代码行数:21,代码来源:files_names.c
示例15: CompressPath
int CompressPath(char *dest,char *src)
{ char *sp;
char node[CF_BUFSIZE];
int nodelen;
int rootlen;
Debug2("CompressPath(%s,%s)\n",dest,src);
memset(dest,0,CF_BUFSIZE);
rootlen = RootDirLength(src);
strncpy(dest,src,rootlen);
for (sp = src+rootlen; *sp != '\0'; sp++)
{
if (IsFileSep(*sp))
{
continue;
}
for (nodelen = 0; sp[nodelen] != '\0' && !IsFileSep(sp[nodelen]); nodelen++)
{
if (nodelen > CF_MAXLINKSIZE)
{
CfLog(cferror,"Link in path suspiciously large","");
return false;
}
}
strncpy(node, sp, nodelen);
node[nodelen] = '\0';
sp += nodelen - 1;
if (strcmp(node,".") == 0)
{
continue;
}
if (strcmp(node,"..") == 0)
{
if (!ChopLastNode(dest))
{
Debug("cfengine: used .. beyond top of filesystem!\n");
return false;
}
continue;
}
else
{
AddSlash(dest);
}
if (BufferOverflow(dest,node))
{
return false;
}
strcat(dest,node);
}
return true;
}
开发者ID:AsherBond,项目名称:cf22cf3,代码行数:65,代码来源:filenames.c
示例16: CompressPath
/**
* @TODO fix the dangerous path lengths
*/
int CompressPath(char *dest, const char *src)
{
char node[CF_BUFSIZE];
int nodelen;
int rootlen;
memset(dest, 0, CF_BUFSIZE);
rootlen = RootDirLength(src);
memcpy(dest, src, rootlen);
for (const char *sp = src + rootlen; *sp != '\0'; sp++)
{
if (IsFileSep(*sp))
{
continue;
}
for (nodelen = 0; (sp[nodelen] != '\0') && (!IsFileSep(sp[nodelen])); nodelen++)
{
if (nodelen > CF_MAXLINKSIZE)
{
Log(LOG_LEVEL_ERR, "Link in path suspiciously large");
return false;
}
}
strncpy(node, sp, nodelen);
node[nodelen] = '\0';
sp += nodelen - 1;
if (strcmp(node, ".") == 0)
{
continue;
}
if (strcmp(node, "..") == 0)
{
if (!ChopLastNode(dest))
{
Log(LOG_LEVEL_DEBUG, "used .. beyond top of filesystem!");
return false;
}
continue;
}
AddSlash(dest);
/* TODO use dest_size parameter instead of CF_BUFSIZE. */
size_t ret = strlcat(dest, node, CF_BUFSIZE);
if (ret >= CF_BUFSIZE)
{
Log(LOG_LEVEL_ERR,
"Internal limit reached in CompressPath(),"
" path too long: '%s' + '%s'",
dest, node);
return false;
}
}
return true;
}
开发者ID:npe9,项目名称:core,代码行数:68,代码来源:files_names.c
示例17: VerifyRelativeLink
PromiseResult VerifyRelativeLink(EvalContext *ctx, char *destination, const char *source, Attributes attr, const Promise *pp)
{
char *sp, *commonto, *commonfrom;
char buff[CF_BUFSIZE], linkto[CF_BUFSIZE];
int levels = 0;
if (*source == '.')
{
return VerifyLink(ctx, destination, source, attr, pp);
}
if (!CompressPath(linkto, sizeof(linkto), source))
{
cfPS(ctx, LOG_LEVEL_ERR, PROMISE_RESULT_INTERRUPTED, pp, attr, "Failed to link '%s' to '%s'", destination, source);
return PROMISE_RESULT_INTERRUPTED;
}
commonto = linkto;
commonfrom = destination;
if (strcmp(commonto, commonfrom) == 0)
{
cfPS(ctx, LOG_LEVEL_ERR, PROMISE_RESULT_INTERRUPTED, pp, attr, "Failed to link '%s' to '%s', can't link file '%s' to itself",
destination, source, commonto);
return PROMISE_RESULT_INTERRUPTED;
}
while (*commonto == *commonfrom)
{
commonto++;
commonfrom++;
}
while (!((IsAbsoluteFileName(commonto)) && (IsAbsoluteFileName(commonfrom))))
{
commonto--;
commonfrom--;
}
commonto++;
for (sp = commonfrom; *sp != '\0'; sp++)
{
if (IsFileSep(*sp))
{
levels++;
}
}
memset(buff, 0, CF_BUFSIZE);
strcat(buff, ".");
strcat(buff, FILE_SEPARATOR_STR);
while (--levels > 0)
{
const char add[] = ".." FILE_SEPARATOR_STR;
if (!PathAppend(buff, sizeof(buff), add, FILE_SEPARATOR))
{
Log(LOG_LEVEL_ERR,
"Internal limit reached in VerifyRelativeLink(),"
" path too long: '%s' + '%s'",
buff, add);
return PROMISE_RESULT_FAIL;
}
}
if (!PathAppend(buff, sizeof(buff), commonto, FILE_SEPARATOR))
{
Log(LOG_LEVEL_ERR,
"Internal limit reached in VerifyRelativeLink() end,"
" path too long: '%s' + '%s'",
buff, commonto);
return PROMISE_RESULT_FAIL;
}
return VerifyLink(ctx, destination, buff, attr, pp);
}
开发者ID:maciejmrowiec,项目名称:core,代码行数:79,代码来源:files_links.c
示例18: MakeParentDirectory
//.........这里部分代码省略.........
}
}
}
/* And then move the current object out of the way... */
if (rename(pathbuf, currentpath) == -1)
{
Log(LOG_LEVEL_INFO, "Warning: The object '%s' is not a directory. (rename: %s)", pathbuf, GetErrorStr());
return false;
}
}
}
else
{
if (!S_ISLNK(statbuf.st_mode) && !S_ISDIR(statbuf.st_mode))
{
Log(LOG_LEVEL_INFO,
"The object %s is not a directory. Cannot make a new directory without deleting it.", pathbuf);
return false;
}
}
}
/* Now we can make a new directory .. */
currentpath[0] = '\0';
rootlen = RootDirLength(parentandchild);
strncpy(currentpath, parentandchild, rootlen);
for (sp = (char*) parentandchild + rootlen, spc = currentpath + rootlen; *sp != '\0'; sp++)
{
if (!IsFileSep(*sp) && *sp != '\0')
{
*spc = *sp;
spc++;
}
else
{
Path_File_Separator = *sp;
*spc = '\0';
if (strlen(currentpath) == 0)
{
}
else if (stat(currentpath, &statbuf) == -1)
{
if (!DONTDO)
{
mask = umask(0);
if (mkdir(currentpath, DEFAULTMODE) == -1)
{
Log(LOG_LEVEL_ERR, "Unable to make directories to '%s'. (mkdir: %s)", parentandchild, GetErrorStr());
umask(mask);
return false;
}
umask(mask);
}
}
else
{
if (!S_ISDIR(statbuf.st_mode))
{
#ifdef __APPLE__
开发者ID:rcorrieri,项目名称:core,代码行数:67,代码来源:files_lib.c
示例19: MakeDirectoriesFor
//.........这里部分代码省略.........
/* And then move the current object out of the way...*/
if (rename(pathbuf,currentpath) == -1)
{
snprintf(OUTPUT,CF_BUFSIZE*2,"Warning. The object %s is not a directory.\n",pathbuf);
CfLog(cfinform,OUTPUT,"");
CfLog(cfinform,"Could not make a new directory or move the block","rename");
return(false);
}
}
}
else
{
if (! S_ISLNK(statbuf.st_mode) && ! S_ISDIR(statbuf.st_mode))
{
snprintf(OUTPUT,CF_BUFSIZE*2,"Warning. The object %s is not a directory.\n",pathbuf);
CfLog(cfinform,OUTPUT,"");
CfLog(cfinform,"Cannot make a new directory without deleting it!\n\n","");
return(false);
}
}
}
}
/* Now we can make a new directory .. */
currentpath[0] = '\0';
rootlen = RootDirLength(sp);
strncpy(currentpath, file, rootlen);
for (sp = file+rootlen, spc = currentpath+rootlen; *sp != '\0'; sp++)
{
if (!IsFileSep(*sp) && *sp != '\0')
{
*spc = *sp;
spc++;
}
else
{
Path_File_Separator = *sp;
*spc = '\0';
if (strlen(currentpath) == 0)
{
}
else if (stat(currentpath,&statbuf) == -1)
{
Debug2("cfengine: Making directory %s, mode %o\n",currentpath,DEFAULTMODE);
if (! DONTDO)
{
mask = umask(0);
if (mkdir(currentpath,DEFAULTMODE) == -1)
{
snprintf(OUTPUT,CF_BUFSIZE*2,"Unable to make directories to %s\n",file);
CfLog(cferror,OUTPUT,"mkdir");
umask(mask);
return(false);
}
umask(mask);
}
}
else
{
开发者ID:AsherBond,项目名称:cf22cf3,代码行数:67,代码来源:filenames.c
示例20: VerifyRelativeLink
PromiseResult VerifyRelativeLink(EvalContext *ctx, char *destination, const char *source, Attributes attr, const Promise *pp)
{
char *sp, *commonto, *commonfrom;
char buff[CF_BUFSIZE], linkto[CF_BUFSIZE], add[CF_BUFSIZE];
int levels = 0;
if (*source == '.')
{
return VerifyLink(ctx, destination, source, attr, pp);
}
if (!CompressPath(linkto, source))
{
cfPS(ctx, LOG_LEVEL_ERR, PROMISE_RESULT_INTERRUPTED, pp, attr, "Failed to link %s to %s\n", destination, source);
return PROMISE_RESULT_FAIL;
}
commonto = linkto;
commonfrom = destination;
if (strcmp(commonto, commonfrom) == 0)
{
cfPS(ctx, LOG_LEVEL_ERR, PROMISE_RESULT_INTERRUPTED, pp, attr, "Failed to link %s to %s - can't link file %s to itself\n",
destination, source, commonto);
return PROMISE_RESULT_FAIL;
}
while (*commonto == *commonfrom)
{
commonto++;
commonfrom++;
}
while (!((IsAbsoluteFileName(commonto)) && (IsAbsoluteFileName(commonfrom))))
{
commonto--;
commonfrom--;
}
commonto++;
for (sp = commonfrom; *sp != '\0'; sp++)
{
if (IsFileSep(*sp))
{
levels++;
}
}
memset(buff, 0, CF_BUFSIZE);
strcat(buff, ".");
strcat(buff, FILE_SEPARATOR_STR);
while (--levels > 0)
{
snprintf(add, CF_BUFSIZE - 1, "..%c", FILE_SEPARATOR);
if (!JoinPath(buff, add))
{
return PROMISE_RESULT_FAIL;
}
}
if (!JoinPath(buff, commonto))
{
return PROMISE_RESULT_FAIL;
}
return VerifyLink(ctx, destination, buff, attr, pp);
}
开发者ID:baptr,项目名称:core,代码行数:71,代码来源:files_links.c
注:本文中的IsFileSep函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论