1 #ifndef GIT_COMPAT_UTIL_H 2 #define GIT_COMPAT_UTIL_H 3 4 #define _ALL_SOURCE 1 5 #define _BSD_SOURCE 1 6 /* glibc 2.20 deprecates _BSD_SOURCE in favour of _DEFAULT_SOURCE */ 7 #define _DEFAULT_SOURCE 1 8 #define HAS_BOOL 9 10 #include <unistd.h> 11 #include <stdio.h> 12 #include <sys/stat.h> 13 #include <sys/statfs.h> 14 #include <fcntl.h> 15 #include <stdbool.h> 16 #include <stddef.h> 17 #include <stdlib.h> 18 #include <stdarg.h> 19 #include <string.h> 20 #include <limits.h> 21 #include <sys/param.h> 22 #include <sys/types.h> 23 #include <dirent.h> 24 #include <sys/time.h> 25 #include <time.h> 26 #include <signal.h> 27 #include <fnmatch.h> 28 #include <assert.h> 29 #include <regex.h> 30 #include <utime.h> 31 #include <sys/wait.h> 32 #include <poll.h> 33 #include <sys/socket.h> 34 #include <sys/ioctl.h> 35 #include <linux/kernel.h> 36 #include <linux/types.h> 37 38 extern char buildid_dir[]; 39 40 #ifdef __GNUC__ 41 #define NORETURN __attribute__((__noreturn__)) 42 #else 43 #define NORETURN 44 #ifndef __attribute__ 45 #define __attribute__(x) 46 #endif 47 #endif 48 49 #define PERF_GTK_DSO "libperf-gtk.so" 50 51 /* General helper functions */ 52 void usage(const char *err) NORETURN; 53 void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2))); 54 int error(const char *err, ...) __attribute__((format (printf, 1, 2))); 55 void warning(const char *err, ...) __attribute__((format (printf, 1, 2))); 56 57 void set_warning_routine(void (*routine)(const char *err, va_list params)); 58 59 int prefixcmp(const char *str, const char *prefix); 60 void set_buildid_dir(const char *dir); 61 62 #ifdef __GLIBC_PREREQ 63 #if __GLIBC_PREREQ(2, 1) 64 #define HAVE_STRCHRNUL 65 #endif 66 #endif 67 68 #ifndef HAVE_STRCHRNUL 69 #define strchrnul gitstrchrnul 70 static inline char *gitstrchrnul(const char *s, int c) 71 { 72 while (*s && *s != c) 73 s++; 74 return (char *)s; 75 } 76 #endif 77 78 static inline void *zalloc(size_t size) 79 { 80 return calloc(1, size); 81 } 82 83 #define zfree(ptr) ({ free(*ptr); *ptr = NULL; }) 84 85 struct strlist; 86 87 int mkdir_p(char *path, mode_t mode); 88 int rm_rf(const char *path); 89 struct strlist *lsdir(const char *name, bool (*filter)(const char *, struct dirent *)); 90 bool lsdir_no_dot_filter(const char *name, struct dirent *d); 91 int copyfile(const char *from, const char *to); 92 int copyfile_mode(const char *from, const char *to, mode_t mode); 93 int copyfile_offset(int fromfd, loff_t from_ofs, int tofd, loff_t to_ofs, u64 size); 94 95 unsigned long convert_unit(unsigned long value, char *unit); 96 ssize_t readn(int fd, void *buf, size_t n); 97 ssize_t writen(int fd, void *buf, size_t n); 98 99 struct perf_event_attr; 100 101 void event_attr_init(struct perf_event_attr *attr); 102 103 size_t hex_width(u64 v); 104 int hex2u64(const char *ptr, u64 *val); 105 106 void dump_stack(void); 107 void sighandler_dump_stack(int sig); 108 109 extern unsigned int page_size; 110 extern int cacheline_size; 111 extern int sysctl_perf_event_max_stack; 112 extern int sysctl_perf_event_max_contexts_per_stack; 113 114 struct parse_tag { 115 char tag; 116 int mult; 117 }; 118 119 unsigned long parse_tag_value(const char *str, struct parse_tag *tags); 120 121 int perf_event_paranoid(void); 122 123 void mem_bswap_64(void *src, int byte_size); 124 void mem_bswap_32(void *src, int byte_size); 125 126 const char *get_filename_for_perf_kvm(void); 127 bool find_process(const char *name); 128 129 #ifdef HAVE_ZLIB_SUPPORT 130 int gzip_decompress_to_file(const char *input, int output_fd); 131 #endif 132 133 #ifdef HAVE_LZMA_SUPPORT 134 int lzma_decompress_to_file(const char *input, int output_fd); 135 #endif 136 137 int get_stack_size(const char *str, unsigned long *_size); 138 139 int fetch_kernel_version(unsigned int *puint, 140 char *str, size_t str_sz); 141 #define KVER_VERSION(x) (((x) >> 16) & 0xff) 142 #define KVER_PATCHLEVEL(x) (((x) >> 8) & 0xff) 143 #define KVER_SUBLEVEL(x) ((x) & 0xff) 144 #define KVER_FMT "%d.%d.%d" 145 #define KVER_PARAM(x) KVER_VERSION(x), KVER_PATCHLEVEL(x), KVER_SUBLEVEL(x) 146 147 const char *perf_tip(const char *dirpath); 148 int fetch_current_timestamp(char *buf, size_t sz); 149 150 #ifndef HAVE_SCHED_GETCPU_SUPPORT 151 int sched_getcpu(void); 152 #endif 153 154 int timestamp__scnprintf_usec(u64 timestamp, char *buf, size_t sz); 155 156 int unit_number__scnprintf(char *buf, size_t size, u64 n); 157 158 #endif /* GIT_COMPAT_UTIL_H */ 159