Clean up stripspace a bit, use strbuf even more.
[gitweb.git] / git-compat-util.h
index b2ab3f82567d54607a07f4061153adae86854fa9..f23d934f667cc2b10ee668a3bfef8492aadbbe7d 100644 (file)
@@ -172,6 +172,12 @@ extern uintmax_t gitstrtoumax(const char *, char **, int);
 extern const char *githstrerror(int herror);
 #endif
 
+#ifdef NO_MEMMEM
+#define memmem gitmemmem
+void *gitmemmem(const void *haystack, size_t haystacklen,
+                const void *needle, size_t needlelen);
+#endif
+
 extern void release_pack_memory(size_t, int);
 
 static inline char* xstrdup(const char *str)
@@ -205,19 +211,20 @@ static inline void *xmalloc(size_t size)
        return ret;
 }
 
-static inline char *xstrndup(const char *str, size_t len)
+static inline void *xmemdupz(const void *data, size_t len)
 {
-       char *p;
-
-       p = memchr(str, '\0', len);
-       if (p)
-               len = p - str;
-       p = xmalloc(len + 1);
-       memcpy(p, str, len);
+       char *p = xmalloc(len + 1);
+       memcpy(p, data, len);
        p[len] = '\0';
        return p;
 }
 
+static inline char *xstrndup(const char *str, size_t len)
+{
+       char *p = memchr(str, '\0', len);
+       return xmemdupz(str, p ? p - str : len);
+}
+
 static inline void *xrealloc(void *ptr, size_t size)
 {
        void *ret = realloc(ptr, size);
@@ -287,6 +294,32 @@ static inline ssize_t xwrite(int fd, const void *buf, size_t len)
        }
 }
 
+static inline int xdup(int fd)
+{
+       int ret = dup(fd);
+       if (ret < 0)
+               die("dup failed: %s", strerror(errno));
+       return ret;
+}
+
+static inline FILE *xfdopen(int fd, const char *mode)
+{
+       FILE *stream = fdopen(fd, mode);
+       if (stream == NULL)
+               die("Out of memory? fdopen failed: %s", strerror(errno));
+       return stream;
+}
+
+static inline int xmkstemp(char *template)
+{
+       int fd;
+
+       fd = mkstemp(template);
+       if (fd < 0)
+               die("Unable to create temporary file: %s", strerror(errno));
+       return fd;
+}
+
 static inline size_t xsize_t(off_t len)
 {
        return (size_t)len;