comparison src/os_unix.c @ 3330:81201fb337a5 v7.3.432

updated for version 7.3.432 Problem: ACLs are not supported for ZFS or NFSv4 on Solaris. Solution: Add configure check and code. (Danek Duvall)
author Bram Moolenaar <bram@vim.org>
date Sun, 05 Feb 2012 22:51:33 +0100
parents 320cc46d0eb0
children 4a2cb025b641
comparison
equal deleted inserted replaced
3329:973891c28075 3330:81201fb337a5
2744 { 2744 {
2745 vim_acl_T ret = NULL; 2745 vim_acl_T ret = NULL;
2746 #ifdef HAVE_POSIX_ACL 2746 #ifdef HAVE_POSIX_ACL
2747 ret = (vim_acl_T)acl_get_file((char *)fname, ACL_TYPE_ACCESS); 2747 ret = (vim_acl_T)acl_get_file((char *)fname, ACL_TYPE_ACCESS);
2748 #else 2748 #else
2749 #ifdef HAVE_SOLARIS_ZFS_ACL
2750 acl_t *aclent;
2751
2752 if (acl_get((char *)fname, 0, &aclent) < 0)
2753 return NULL;
2754 ret = (vim_acl_T)aclent;
2755 #else
2749 #ifdef HAVE_SOLARIS_ACL 2756 #ifdef HAVE_SOLARIS_ACL
2750 vim_acl_solaris_T *aclent; 2757 vim_acl_solaris_T *aclent;
2751 2758
2752 aclent = malloc(sizeof(vim_acl_solaris_T)); 2759 aclent = malloc(sizeof(vim_acl_solaris_T));
2753 if ((aclent->acl_cnt = acl((char *)fname, GETACLCNT, 0, NULL)) < 0) 2760 if ((aclent->acl_cnt = acl((char *)fname, GETACLCNT, 0, NULL)) < 0)
2789 } 2796 }
2790 } 2797 }
2791 ret = (vim_acl_T)aclent; 2798 ret = (vim_acl_T)aclent;
2792 #endif /* HAVE_AIX_ACL */ 2799 #endif /* HAVE_AIX_ACL */
2793 #endif /* HAVE_SOLARIS_ACL */ 2800 #endif /* HAVE_SOLARIS_ACL */
2801 #endif /* HAVE_SOLARIS_ZFS_ACL */
2794 #endif /* HAVE_POSIX_ACL */ 2802 #endif /* HAVE_POSIX_ACL */
2795 return ret; 2803 return ret;
2796 } 2804 }
2797 2805
2798 /* 2806 /*
2805 { 2813 {
2806 if (aclent == NULL) 2814 if (aclent == NULL)
2807 return; 2815 return;
2808 #ifdef HAVE_POSIX_ACL 2816 #ifdef HAVE_POSIX_ACL
2809 acl_set_file((char *)fname, ACL_TYPE_ACCESS, (acl_t)aclent); 2817 acl_set_file((char *)fname, ACL_TYPE_ACCESS, (acl_t)aclent);
2818 #else
2819 #ifdef HAVE_SOLARIS_ZFS_ACL
2820 acl_set((char *)fname, (acl_t *)aclent);
2810 #else 2821 #else
2811 #ifdef HAVE_SOLARIS_ACL 2822 #ifdef HAVE_SOLARIS_ACL
2812 acl((char *)fname, SETACL, ((vim_acl_solaris_T *)aclent)->acl_cnt, 2823 acl((char *)fname, SETACL, ((vim_acl_solaris_T *)aclent)->acl_cnt,
2813 ((vim_acl_solaris_T *)aclent)->acl_entry); 2824 ((vim_acl_solaris_T *)aclent)->acl_entry);
2814 #else 2825 #else
2815 #ifdef HAVE_AIX_ACL 2826 #ifdef HAVE_AIX_ACL
2816 chacl((char *)fname, aclent, ((struct acl *)aclent)->acl_len); 2827 chacl((char *)fname, aclent, ((struct acl *)aclent)->acl_len);
2817 #endif /* HAVE_AIX_ACL */ 2828 #endif /* HAVE_AIX_ACL */
2818 #endif /* HAVE_SOLARIS_ACL */ 2829 #endif /* HAVE_SOLARIS_ACL */
2830 #endif /* HAVE_SOLARIS_ZFS_ACL */
2819 #endif /* HAVE_POSIX_ACL */ 2831 #endif /* HAVE_POSIX_ACL */
2820 } 2832 }
2821 2833
2822 void 2834 void
2823 mch_free_acl(aclent) 2835 mch_free_acl(aclent)
2825 { 2837 {
2826 if (aclent == NULL) 2838 if (aclent == NULL)
2827 return; 2839 return;
2828 #ifdef HAVE_POSIX_ACL 2840 #ifdef HAVE_POSIX_ACL
2829 acl_free((acl_t)aclent); 2841 acl_free((acl_t)aclent);
2842 #else
2843 #ifdef HAVE_SOLARIS_ZFS_ACL
2844 acl_free((acl_t *)aclent);
2830 #else 2845 #else
2831 #ifdef HAVE_SOLARIS_ACL 2846 #ifdef HAVE_SOLARIS_ACL
2832 free(((vim_acl_solaris_T *)aclent)->acl_entry); 2847 free(((vim_acl_solaris_T *)aclent)->acl_entry);
2833 free(aclent); 2848 free(aclent);
2834 #else 2849 #else
2835 #ifdef HAVE_AIX_ACL 2850 #ifdef HAVE_AIX_ACL
2836 free(aclent); 2851 free(aclent);
2837 #endif /* HAVE_AIX_ACL */ 2852 #endif /* HAVE_AIX_ACL */
2838 #endif /* HAVE_SOLARIS_ACL */ 2853 #endif /* HAVE_SOLARIS_ACL */
2854 #endif /* HAVE_SOLARIS_ZFS_ACL */
2839 #endif /* HAVE_POSIX_ACL */ 2855 #endif /* HAVE_POSIX_ACL */
2840 } 2856 }
2841 #endif 2857 #endif
2842 2858
2843 /* 2859 /*