X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=compat%2Fmingw.h;h=a52e657c51916a0032908a87b4d4df259547f4e8;hb=00b718e02d97c956cade8c1b4cbe29a9d3e92765;hp=69b1dde3ca07bdb695eb5c87f124ec3b9a34b714;hpb=5411bdc4e4b170a57a61b2d486ab344896c41500;p=git.git diff --git a/compat/mingw.h b/compat/mingw.h index 69b1dde3c..a52e657c5 100644 --- a/compat/mingw.h +++ b/compat/mingw.h @@ -59,8 +59,6 @@ struct itimerval { }; #define ITIMER_REAL 0 -#define st_blocks st_size/512 /* will be cleaned up later */ - /* * trivial stubs */ @@ -147,6 +145,9 @@ int mingw_open (const char *filename, int oflags, ...); char *mingw_getcwd(char *pointer, int len); #define getcwd mingw_getcwd +char *mingw_getenv(const char *name); +#define getenv mingw_getenv + struct hostent *mingw_gethostbyname(const char *host); #define gethostbyname mingw_gethostbyname @@ -161,20 +162,48 @@ int mingw_rename(const char*, const char*); /* Use mingw_lstat() instead of lstat()/stat() and * mingw_fstat() instead of fstat() on Windows. + * struct stat is redefined because it lacks the st_blocks member. */ -int mingw_lstat(const char *file_name, struct stat *buf); -int mingw_fstat(int fd, struct stat *buf); +struct mingw_stat { + unsigned st_mode; + time_t st_mtime, st_atime, st_ctime; + unsigned st_dev, st_ino, st_uid, st_gid; + size_t st_size; + size_t st_blocks; +}; +int mingw_lstat(const char *file_name, struct mingw_stat *buf); +int mingw_fstat(int fd, struct mingw_stat *buf); #define fstat mingw_fstat #define lstat mingw_lstat -#define stat(x,y) mingw_lstat(x,y) +#define stat mingw_stat +static inline int mingw_stat(const char *file_name, struct mingw_stat *buf) +{ return mingw_lstat(file_name, buf); } + +int mingw_utime(const char *file_name, const struct utimbuf *times); +#define utime mingw_utime pid_t mingw_spawnvpe(const char *cmd, const char **argv, char **env); void mingw_execvp(const char *cmd, char *const *argv); #define execvp mingw_execvp +static inline unsigned int git_ntohl(unsigned int x) +{ return (unsigned int)ntohl(x); } +#define ntohl git_ntohl + sig_handler_t mingw_signal(int sig, sig_handler_t handler); #define signal mingw_signal +/* + * ANSI emulation wrappers + */ + +int winansi_fputs(const char *str, FILE *stream); +int winansi_printf(const char *format, ...) __attribute__((format (printf, 1, 2))); +int winansi_fprintf(FILE *stream, const char *format, ...) __attribute__((format (printf, 2, 3))); +#define fputs winansi_fputs +#define printf(...) winansi_printf(__VA_ARGS__) +#define fprintf(...) winansi_fprintf(__VA_ARGS__) + /* * git specific compatibility */ @@ -184,6 +213,9 @@ sig_handler_t mingw_signal(int sig, sig_handler_t handler); #define PATH_SEP ';' #define PRIuMAX "I64u" +void mingw_open_html(const char *path); +#define open_html mingw_open_html + /* * helpers */ @@ -191,3 +223,16 @@ sig_handler_t mingw_signal(int sig, sig_handler_t handler); char **copy_environ(void); void free_environ(char **env); char **env_setenv(char **env, const char *name); + +/* + * A replacement of main() that ensures that argv[0] has a path + */ + +#define main(c,v) dummy_decl_mingw_main(); \ +static int mingw_main(); \ +int main(int argc, const char **argv) \ +{ \ + argv[0] = xstrdup(_pgmptr); \ + return mingw_main(argc, argv); \ +} \ +static int mingw_main(c,v)