mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-06-07 16:58:11 +00:00
make use of the copy file function
Now we have specific function to copy the files, make use of it and remove the old code. Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
This commit is contained in:
parent
e3642c43e6
commit
64e1ae63eb
@ -644,71 +644,15 @@ static int configure_pts(const char *name, int pts)
|
|||||||
static int configure_mount(const char *name, const char *fstab)
|
static int configure_mount(const char *name, const char *fstab)
|
||||||
{
|
{
|
||||||
char path[MAXPATHLEN];
|
char path[MAXPATHLEN];
|
||||||
struct stat stat;
|
|
||||||
int infd, outfd;
|
|
||||||
void *src, *dst;
|
|
||||||
char c = '\0';
|
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
snprintf(path, MAXPATHLEN, LXCPATH "/%s/fstab", name);
|
snprintf(path, MAXPATHLEN, LXCPATH "/%s/fstab", name);
|
||||||
|
|
||||||
outfd = open(path, O_RDWR|O_CREAT|O_EXCL, 0640);
|
if (lxc_copy_file(fstab, path)) {
|
||||||
if (outfd < 0) {
|
ERROR("failed to copy the fstab file");
|
||||||
SYSERROR("failed to creat '%s'", path);
|
return -1;
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
infd = open(fstab, O_RDONLY);
|
return 0;
|
||||||
if (infd < 0) {
|
|
||||||
SYSERROR("failed to open '%s'", fstab);
|
|
||||||
goto out_open;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fstat(infd, &stat)) {
|
|
||||||
SYSERROR("failed to stat '%s'", fstab);
|
|
||||||
goto out_open2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lseek(outfd, stat.st_size - 1, SEEK_SET) < 0) {
|
|
||||||
SYSERROR("failed to seek dest file '%s'", path);
|
|
||||||
goto out_open2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* fixup length */
|
|
||||||
if (write(outfd, &c, 1) < 0) {
|
|
||||||
SYSERROR("failed to write to '%s'", path);
|
|
||||||
goto out_open2;
|
|
||||||
}
|
|
||||||
|
|
||||||
src = mmap(NULL, stat.st_size, PROT_READ, MAP_SHARED, infd, 0L);
|
|
||||||
if (src == MAP_FAILED) {
|
|
||||||
SYSERROR("failed to mmap '%s'", fstab);
|
|
||||||
goto out_open2;
|
|
||||||
}
|
|
||||||
|
|
||||||
dst = mmap(NULL, stat.st_size, PROT_WRITE, MAP_SHARED, outfd, 0L);
|
|
||||||
if (dst == MAP_FAILED) {
|
|
||||||
SYSERROR("failed to mmap '%s'", path);
|
|
||||||
goto out_mmap;
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(dst, src, stat.st_size);
|
|
||||||
|
|
||||||
munmap(src, stat.st_size);
|
|
||||||
munmap(dst, stat.st_size);
|
|
||||||
|
|
||||||
ret = 0;
|
|
||||||
out:
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
out_mmap:
|
|
||||||
munmap(src, stat.st_size);
|
|
||||||
out_open2:
|
|
||||||
close(infd);
|
|
||||||
out_open:
|
|
||||||
unlink(path);
|
|
||||||
close(outfd);
|
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int unconfigure_ip_addresses(const char *directory)
|
static int unconfigure_ip_addresses(const char *directory)
|
||||||
|
Loading…
Reference in New Issue
Block a user