FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
pretend-git/copy.c at master · submitgit/pretend-git · GitHub
submitgit
/
pretend-git
Public
forked from
git/git
Notifications
You must be signed in to change notification settings
Fork
2
Star
0
Code
Pull requests
3
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
pretend-git
/
copy.c
Copy path
More file actions
More file actions
Latest commit
History
History
History
62 lines (55 loc) · 1.25 KB
Breadcrumbs
pretend-git
/
copy.c
Copy path
File metadata and controls
62 lines (55 loc) · 1.25 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include
"cache.h"
int
copy_fd
(
int
ifd
,
int
ofd
)
{
while
(
1
) {
char
buffer
[
8192
];
ssize_t
len
=
xread
(
ifd
,
buffer
,
sizeof
(
buffer
));
if
(!
len
)
break
;
if
(
len
<
0
) {
return
error
(
"copy-fd: read returned %s"
,
strerror
(
errno
));
}
if
(
write_in_full
(
ofd
,
buffer
,
len
)
<
0
)
return
error
(
"copy-fd: write returned %s"
,
strerror
(
errno
));
}
return
0
;
}
static
int
copy_times
(
const
char
*
dst
,
const
char
*
src
)
{
struct
stat
st
;
struct
utimbuf
times
;
if
(
stat
(
src
,
&
st
)
<
0
)
return
-1
;
times
.
actime
=
st
.
st_atime
;
times
.
modtime
=
st
.
st_mtime
;
if
(
utime
(
dst
,
&
times
)
<
0
)
return
-1
;
return
0
;
}
int
copy_file
(
const
char
*
dst
,
const
char
*
src
,
int
mode
)
{
int
fdi
,
fdo
,
status
;
mode
=
(
mode
&
0111
) ?
0777
:
0666
;
if
((
fdi
=
open
(
src
,
O_RDONLY
))
<
0
)
return
fdi
;
if
((
fdo
=
open
(
dst
,
O_WRONLY
|
O_CREAT
|
O_EXCL
,
mode
))
<
0
) {
close
(
fdi
);
return
fdo
;
}
status
=
copy_fd
(
fdi
,
fdo
);
close
(
fdi
);
if
(
close
(
fdo
)
!=
0
)
return
error
(
"%s: close error: %s"
,
dst
,
strerror
(
errno
));
if
(!
status
&&
adjust_shared_perm
(
dst
))
return
-1
;
return
status
;
}
int
copy_file_with_time
(
const
char
*
dst
,
const
char
*
src
,
int
mode
)
{
int
status
=
copy_file
(
dst
,
src
,
mode
);
if
(!
status
)
return
copy_times
(
dst
,
src
);
return
status
;
}
Back
|
FazBrowse Home
|
New Git URL