资源简介
git-2.7.2
代码片段和文件信息
#include “cache.h“
/*
* Do not use this for inspecting *tracked* content. When path is a
* symlink to a directory we do not want to say it is a directory when
* dealing with tracked content in the working tree.
*/
int is_directory(const char *path)
{
struct stat st;
return (!stat(path &st) && S_ISDIR(st.st_mode));
}
/* We allow “recursive“ symbolic links. Only within reason though. */
#define MAXDEPTH 5
/*
* Return the real path (i.e. absolute path with symlinks resolved
* and extra slashes removed) equivalent to the specified path. (If
* you want an absolute path but don‘t mind links use
* absolute_path().) The return value is a pointer to a static
* buffer.
*
* The input and all intermediate paths must be shorter than MAX_PATH.
* The directory part of path (i.e. everything up to the last
* dir_sep) must denote a valid existing directory but the last
* component need not exist. If die_on_error is set then die with an
* informative error message if there is a problem. Otherwise return
* NULL on errors (without generating any output).
*
* If path is our buffer then return path as it‘s already what the
* user wants.
*/
static const char *real_path_internal(const char *path int die_on_error)
{
static struct strbuf sb = STRBUF_INIT;
char *retval = NULL;
/*
* If we have to temporarily chdir() store the original CWD
* here so that we can chdir() back to it at the end of the
* function:
*/
struct strbuf cwd = STRBUF_INIT;
int depth = MAXDEPTH;
char *last_elem = NULL;
struct stat st;
/* We‘ve already done it */
if (path == sb.buf)
return path;
if (!*path) {
if (die_on_error)
die(“The empty string is not a valid path“);
else
goto error_out;
}
strbuf_reset(&sb);
strbuf_addstr(&sb path);
while (depth--) {
if (!is_directory(sb.buf)) {
char *last_slash = find_last_dir_sep(sb.buf);
if (last_slash) {
last_elem = xstrdup(last_slash + 1);
strbuf_setlen(&sb last_slash - sb.buf + 1);
} else {
last_elem = xmemdupz(sb.buf sb.len);
strbuf_reset(&sb);
}
}
if (sb.len) {
if (!cwd.len && strbuf_getcwd(&cwd)) {
if (die_on_error)
die_errno(“Could not get current working directory“);
else
goto error_out;
}
if (chdir(sb.buf)) {
if (die_on_error)
die_errno(“Could not switch to ‘%s‘“
sb.buf);
else
goto error_out;
}
}
if (strbuf_getcwd(&sb)) {
if (die_on_error)
die_errno(“Could not get current working directory“);
else
goto error_out;
}
if (last_elem) {
if (sb.len && !is_dir_sep(sb.buf[sb.len - 1]))
strbuf_addch(&sb ‘/‘);
strbuf_addstr(&sb last_elem);
free(last_elem);
last_elem = NULL;
}
if (!lstat(sb.buf &st) && S_ISLNK(st.st_mode)) {
struct strbuf next_sb = STRBUF_INIT;
ssize_t len = strbuf_readlink(&next_sb sb.buf 0);
if (len < 0) {
if (die_on_error)
die_errno(“Invalid symlink ‘%s‘“
sb.buf);
else
goto error_out;
- 上一篇:Visual AssitX
- 下一篇:计算机网络第七版课后答案 谢希仁版
相关资源
- Synchronization+Techniques+for+Digital+Receive
- 产品全生命周期管理和智能制造_数字
- Digital Fundamentals 10th Ed (Solutions)-
- Fundamentals of Digital Communication - Cambri
- GitLab在windows用户端的安装使用详细教
-
FSM-ba
sed Digital Design using Verilog HDL - Digital+Image+processing+Gonzalez+-+Solution+M
- The Art of Hardware Architecture.pdf
- Getdata.Graph.Digitizer 破解
- 利用Origin程序及Digitizer插件从图形中
- Digital Image Processing - Third Edition 课后答
- Nlogit中文使用说明
- GIT代码同步可视化界面工具
- Digital Signal Processing 数字信号处理 P
- Digital-Design-5th-Edition-Morris-Mano《数字设
- Proakis Digital Signal Processing 4th solution
- GitHubDesktop_3_2_0_0_X64 (2/2)
- 冈萨雷斯《数字图像处理》Digital Im
- gitblit-1.8.0.zip
- Digital phase modulation
- Git-2.26.2-64-bit.exe
- Git-2.19.1-32-bitGit工具
- Git-2.26.0-64-bit.exe
- 可以在windowsxp安装的最后一个git版本
- Git安装包 windows 64位
- Digital system test and testable design
- DIgital Control of Dynamic Systems 第三版 F
- git原理详解及实用指南(好书).rar
- Git-2.21.0-64-bit 安装包及安装说明 ide
- Digital Control of Dynamic Systems 3rd-扫描版
评论
共有 条评论