1#include <stdio.h> 2#include <string.h> 3#include <errno.h> 4#include <sys/attr.h> 5#include <sys/types.h> 6#include <sys/stat.h> 7#include <unistd.h> 8 9struct attr_buffer { 10 uint32_t length; 11 uint32_t mount_flags; 12}; 13 14int 15main(int argc, char **argv) 16{ 17 int i; 18 struct attrlist attrs; 19 struct attr_buffer attrbuf; 20 21 if (argc < 2) { 22 fprintf(stderr, "Usage: checktrigger <pathname>...\n"); 23 return 1; 24 } 25 argv++; 26 argc--; 27 for (i = 0; i < argc; i++) { 28 memset(&attrs, 0, sizeof(attrs)); 29 attrs.bitmapcount = ATTR_BIT_MAP_COUNT; 30 attrs.dirattr = ATTR_DIR_MOUNTSTATUS; 31 if (getattrlist(argv[i], &attrs, &attrbuf, sizeof attrbuf, 32 FSOPT_NOFOLLOW) == -1) { 33 fprintf(stderr, "checktrigger: getattrlist of %s failed: %s\n", 34 argv[i], strerror(errno)); 35 return 2; 36 } 37 printf("%s %s a trigger\n", argv[i], 38 (attrbuf.mount_flags & DIR_MNTSTATUS_TRIGGER) ? 39 "is" : "is not"); 40 } 41 return 0; 42} 43