Hi all,
I am trying to write a program to copy a file and also its ACL's. However, though the program compiles I get a bus error after acl_set_fd
Here is the program
Code:
#include<stdio.h>
#include<sys/types.h>
#include<errno.h>
#include<fcntl.h>
#include<sys/uio.h>
#include<unistd.h>
#include<sys/acl.h>
#define BUFSIZE 8192
int main(int argc,char *argv[])
{
int fs , fd , ret ;
acl_t acl = 0 ;
char buffer[BUFSIZE];
size_t nbytes = BUFSIZE ;
ssize_t count ;
if(argc == 3)
{
fs = open(argv[1],O_RDONLY) ;
if(fs == -1)
{
perror("cant open file for reading\n");
return 0 ;
}
fd = open(argv[2],O_RDWR | O_CREAT,0777);
if(fd == -1)
{
perror("cant open file for writing\n");
return 0;
}
acl = acl_get_fd(fs) ;
if(acl = (acl_t)NULL)
perror("failed to get ACLs\n") ;
while((count = read(fs , buffer , nbytes)))
write(fd , buffer , count) ;
printf("File copy complete\n");
printf("setting ACL's for file\n");
ret = acl_set_fd(fd , acl) ;
printf("Done!!!!!!");
if(ret == -1)
{
perror("Failed to set ACL\n");
return 0 ;
}
if(ret == 0)
printf("ACL set successfully\n");
close(fd);
close(fs);
}
else
printf("usage : ./acl_prg source dest\n");
return 0;
}
I am running this on Mac OS X 10.4