00001 #include "config.h" 00002 00003 #include "headers.h" 00004 #include "types.h" 00005 #include "error.h" 00006 #include "fd.h" 00007 00008 int set_fl(int fd, int flags) 00009 { 00010 int val; 00011 00012 if ((val = fcntl(fd, F_GETFL, 0)) < 0) { 00013 print_error(stderr, "fcntl() failed"); 00014 return(1); 00015 } 00016 val |= flags; 00017 if (fcntl(fd, F_SETFL, val) < 0) { 00018 print_error(stderr, "fcntl() failed"); 00019 return(1); 00020 } 00021 return(0); 00022 } 00023 00024 int clr_fl(int fd, int flags) 00025 { 00026 int val; 00027 00028 if ((val = fcntl(fd, F_GETFL, 0)) < 0) { 00029 print_error(stderr, "fcntl() failed"); 00030 return(1); 00031 } 00032 val &= ~flags; 00033 if (fcntl(fd, F_SETFL, val) < 0) { 00034 print_error(stderr, "fcntl() failed"); 00035 return(1); 00036 } 00037 return(0); 00038 } 00039 00040 int fdBegin(int fd) 00041 { 00042 return(set_fl(fd, O_NONBLOCK)); 00043 } 00044 00045 int fdEnd(int fd) 00046 { 00047 return(clr_fl(fd, O_NONBLOCK)); 00048 } 00049 00050 int fdIsFile(int fd) 00051 { 00052 struct stat st; 00053 00054 if (fstat(fd, &st) != 0) { 00055 print_error(stderr, "fstat() failed"); 00056 return(0); 00057 } 00058 if (S_ISREG(st.st_mode)) return(1); 00059 return(0); 00060 } 00061 00062 int fdFileSize(int fd, uint64 *size) 00063 { 00064 struct stat st; 00065 00066 if (size == 0) { 00067 print_error(stderr, "size == NULL"); 00068 return(1); 00069 } 00070 if (fstat(fd, &st) != 0) { 00071 print_error(stderr, "fstat() failed"); 00072 return(1); 00073 } 00074 *size = (uint64)st.st_size; 00075 return(0); 00076 } 00077