forked from OSchip/llvm-project
Added some MSVC required functions in Windows.cpp. Moved MSVC specific getopt code inside its own folder.
llvm-svn: 190238
This commit is contained in:
parent
3613fd7a35
commit
d87fc157d2
|
@ -40,4 +40,42 @@ char* realpath(const char * name, char * resolved);
|
|||
#define S_IRWXG 0
|
||||
#define S_IRWXO 0
|
||||
|
||||
#ifdef _MSC_VER
|
||||
|
||||
#include <stdint.h>
|
||||
#include <io.h>
|
||||
typedef unsigned short mode_t;
|
||||
typedef uint32_t pid_t;
|
||||
|
||||
int usleep(uint32_t useconds);
|
||||
|
||||
char* getcwd(char* path, int max);
|
||||
char* basename(char *path);
|
||||
char *dirname(char *path);
|
||||
|
||||
int strcasecmp(const char* s1, const char* s2);
|
||||
int strncasecmp(const char* s1, const char* s2, size_t n);
|
||||
|
||||
|
||||
#define PATH_MAX MAX_PATH
|
||||
#define STDIN_FILENO 0
|
||||
#define STDOUT_FILENO 1
|
||||
#define STDERR_FILENO 2
|
||||
|
||||
#define __PRETTY_FUNCTION__ __FUNCSIG__
|
||||
|
||||
#define S_IFDIR _S_IFDIR
|
||||
#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
|
||||
|
||||
#define snprintf _snprintf
|
||||
|
||||
// timespec
|
||||
struct timespec
|
||||
{
|
||||
time_t tv_sec;
|
||||
long tv_nsec;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif // LLDB_lldb_win32_h_
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include "lldb/Host/OptionParser.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include "../windows/getopt.inc"
|
||||
#include "../windows/msvc/getopt.inc"
|
||||
#else
|
||||
#ifdef _WIN32
|
||||
#define _BSD_SOURCE // Required so that getopt.h defines optreset
|
||||
|
|
|
@ -46,7 +46,7 @@ int vasprintf(char **ret, const char *fmt, va_list ap)
|
|||
return len;
|
||||
}
|
||||
|
||||
char * strcasestr(const char *s, const char* find)
|
||||
char* strcasestr(const char *s, const char* find)
|
||||
{
|
||||
char c, sc;
|
||||
size_t len;
|
||||
|
@ -144,3 +144,66 @@ char* realpath(const char * name, char * resolved)
|
|||
|
||||
return retname;
|
||||
}
|
||||
|
||||
#ifdef _MSC_VER
|
||||
|
||||
char* basename(char *path)
|
||||
{
|
||||
char* l1 = strrchr(path, '\\');
|
||||
char* l2 = strrchr(path, '/');
|
||||
if (l2 > l1) l1 = l2;
|
||||
if (!l1) return path; // no base name
|
||||
return &l1[1];
|
||||
}
|
||||
|
||||
char* getcwd(char* path, int max)
|
||||
{
|
||||
if (GetCurrentDirectory(max, path) == 0)
|
||||
return path;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *dirname(char *path)
|
||||
{
|
||||
char* l1 = strrchr(path, '\\');
|
||||
char* l2 = strrchr(path, '/');
|
||||
if (l2 > l1) l1 = l2;
|
||||
if (!l1) return NULL; // no dir name
|
||||
*l1 = 0;
|
||||
return path;
|
||||
}
|
||||
|
||||
int strcasecmp(const char* s1, const char* s2)
|
||||
{
|
||||
while (*s1 != '\0' && tolower(*s1) == tolower(*s2))
|
||||
{
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
|
||||
return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2);
|
||||
}
|
||||
|
||||
int strncasecmp(const char* s1, const char* s2, size_t n)
|
||||
{
|
||||
if (n == 0)
|
||||
return 0;
|
||||
|
||||
while (n-- != 0 && tolower(*s1) == tolower(*s2))
|
||||
{
|
||||
if (n == 0 || *s1 == '\0' || *s2 == '\0')
|
||||
break;
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
|
||||
return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2);
|
||||
}
|
||||
|
||||
int usleep(uint32_t useconds)
|
||||
{
|
||||
Sleep(useconds / 1000);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif // _MSC_VER
|
||||
|
|
|
@ -50,7 +50,44 @@
|
|||
*/
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include "lldb/Host/msvc/getopt.h"
|
||||
|
||||
// getopt.h
|
||||
enum {
|
||||
no_argument = 0,
|
||||
required_argument,
|
||||
optional_argument
|
||||
};
|
||||
|
||||
struct option {
|
||||
/* name of long option */
|
||||
const char *name;
|
||||
/*
|
||||
* one of no_argument, required_argument, and optional_argument:
|
||||
* whether option takes an argument
|
||||
*/
|
||||
int has_arg;
|
||||
/* if not NULL, set *flag to val when option found */
|
||||
int *flag;
|
||||
/* if flag not NULL, value to set *flag to; else return value */
|
||||
int val;
|
||||
};
|
||||
|
||||
int getopt(int argc, char * const argv[],
|
||||
const char *optstring);
|
||||
|
||||
extern char *optarg;
|
||||
extern int optind, opterr, optopt;
|
||||
|
||||
int getopt_long(int argc, char * const *argv,
|
||||
const char *optstring,
|
||||
const struct option *longopts, int *longindex);
|
||||
|
||||
int getopt_long_only(int argc, char * const *argv,
|
||||
const char *optstring,
|
||||
const struct option *longopts, int *longindex);
|
||||
extern int optreset;
|
||||
|
||||
// getopt.cpp
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
@ -511,4 +548,5 @@ getopt_long_only(int nargc, char * const *nargv, const char *options,
|
|||
return (getopt_internal(nargc, nargv, options, long_options, idx,
|
||||
FLAG_PERMUTE|FLAG_LONGONLY));
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue