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 #include <api/fs/tracing_path.h> 38 39 extern char buildid_dir[]; 40 41 #ifdef __GNUC__ 42 #define NORETURN __attribute__((__noreturn__)) 43 #else 44 #define NORETURN 45 #ifndef __attribute__ 46 #define __attribute__(x) 47 #endif 48 #endif 49 50 #define PERF_GTK_DSO "libperf-gtk.so" 51 52 /* General helper functions */ 53 void usage(const char *err) NORETURN; 54 void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2))); 55 int error(const char *err, ...) __attribute__((format (printf, 1, 2))); 56 void warning(const char *err, ...) __attribute__((format (printf, 1, 2))); 57 58 void set_warning_routine(void (*routine)(const char *err, va_list params)); 59 60 int prefixcmp(const char *str, const char *prefix); 61 void set_buildid_dir(const char *dir); 62 63 #ifdef __GLIBC_PREREQ 64 #if __GLIBC_PREREQ(2, 1) 65 #define HAVE_STRCHRNUL 66 #endif 67 #endif 68 69 #ifndef HAVE_STRCHRNUL 70 #define strchrnul gitstrchrnul 71 static inline char *gitstrchrnul(const char *s, int c) 72 { 73 while (*s && *s != c) 74 s++; 75 return (char *)s; 76 } 77 #endif 78 79 static inline void *zalloc(size_t size) 80 { 81 return calloc(1, size); 82 } 83 84 #define zfree(ptr) ({ free(*ptr); *ptr = NULL; }) 85 86 struct strlist; 87 88 int mkdir_p(char *path, mode_t mode); 89 int rm_rf(const char *path); 90 struct strlist *lsdir(const char *name, bool (*filter)(const char *, struct dirent *)); 91 bool lsdir_no_dot_filter(const char *name, struct dirent *d); 92 int copyfile(const char *from, const char *to); 93 int copyfile_mode(const char *from, const char *to, mode_t mode); 94 int copyfile_offset(int fromfd, loff_t from_ofs, int tofd, loff_t to_ofs, u64 size); 95 96 unsigned long convert_unit(unsigned long value, char *unit); 97 ssize_t readn(int fd, void *buf, size_t n); 98 ssize_t writen(int fd, void *buf, size_t n); 99 100 struct perf_event_attr; 101 102 void event_attr_init(struct perf_event_attr *attr); 103 104 size_t hex_width(u64 v); 105 int hex2u64(const char *ptr, u64 *val); 106 107 void dump_stack(void); 108 void sighandler_dump_stack(int sig); 109 110 extern unsigned int page_size; 111 extern int cacheline_size; 112 extern int sysctl_perf_event_max_stack; 113 extern int sysctl_perf_event_max_contexts_per_stack; 114 115 struct parse_tag { 116 char tag; 117 int mult; 118 }; 119 120 unsigned long parse_tag_value(const char *str, struct parse_tag *tags); 121 122 int perf_event_paranoid(void); 123 124 void mem_bswap_64(void *src, int byte_size); 125 void mem_bswap_32(void *src, int byte_size); 126 127 const char *get_filename_for_perf_kvm(void); 128 bool find_process(const char *name); 129 130 #ifdef HAVE_ZLIB_SUPPORT 131 int gzip_decompress_to_file(const char *input, int output_fd); 132 #endif 133 134 #ifdef HAVE_LZMA_SUPPORT 135 int lzma_decompress_to_file(const char *input, int output_fd); 136 #endif 137 138 int get_stack_size(const char *str, unsigned long *_size); 139 140 int fetch_kernel_version(unsigned int *puint, 141 char *str, size_t str_sz); 142 #define KVER_VERSION(x) (((x) >> 16) & 0xff) 143 #define KVER_PATCHLEVEL(x) (((x) >> 8) & 0xff) 144 #define KVER_SUBLEVEL(x) ((x) & 0xff) 145 #define KVER_FMT "%d.%d.%d" 146 #define KVER_PARAM(x) KVER_VERSION(x), KVER_PATCHLEVEL(x), KVER_SUBLEVEL(x) 147 148 const char *perf_tip(const char *dirpath); 149 int fetch_current_timestamp(char *buf, size_t sz); 150 151 #ifndef HAVE_SCHED_GETCPU_SUPPORT 152 int sched_getcpu(void); 153 #endif 154 155 int timestamp__scnprintf_usec(u64 timestamp, char *buf, size_t sz); 156 157 int unit_number__scnprintf(char *buf, size_t size, u64 n); 158 159 #endif /* GIT_COMPAT_UTIL_H */ 160