ENH: Adding tests KWSYS_C_HAS_PTRDIFF_T and KWSYS_C_HAS_SSIZE_T to help ProcessUNIX.c build everywhere without warnings.
This commit is contained in:
parent
6c19d3a862
commit
40adb2ce03
@ -621,6 +621,15 @@ IF(KWSYS_USE_Process)
|
|||||||
ELSE(NOT UNIX)
|
ELSE(NOT UNIX)
|
||||||
# Use the UNIX implementation.
|
# Use the UNIX implementation.
|
||||||
SET(KWSYS_C_SRCS ${KWSYS_C_SRCS} ProcessUNIX.c)
|
SET(KWSYS_C_SRCS ${KWSYS_C_SRCS} ProcessUNIX.c)
|
||||||
|
|
||||||
|
# Help ProcessUNIX.c compile properly on all platforms.
|
||||||
|
KWSYS_PLATFORM_C_TEST(KWSYS_C_HAS_PTRDIFF_T
|
||||||
|
"Checking whether C compiler has ptrdiff_t in stddef.h" DIRECT)
|
||||||
|
KWSYS_PLATFORM_C_TEST(KWSYS_C_HAS_SSIZE_T
|
||||||
|
"Checking whether C compiler has ssize_t in unistd.h" DIRECT)
|
||||||
|
SET_SOURCE_FILES_PROPERTIES(ProcessUNIX.c PROPERTIES
|
||||||
|
COMPILE_FLAGS "-DKWSYS_C_HAS_PTRDIFF_T=${KWSYS_C_HAS_PTRDIFF_T} -DKWSYS_C_HAS_SSIZE_T=${KWSYS_C_HAS_SSIZE_T}"
|
||||||
|
)
|
||||||
ENDIF(NOT UNIX)
|
ENDIF(NOT UNIX)
|
||||||
ENDIF(KWSYS_USE_Process)
|
ENDIF(KWSYS_USE_Process)
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ do.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stddef.h> /* ptrdiff_t */
|
||||||
#include <stdio.h> /* snprintf */
|
#include <stdio.h> /* snprintf */
|
||||||
#include <stdlib.h> /* malloc, free */
|
#include <stdlib.h> /* malloc, free */
|
||||||
#include <string.h> /* strdup, strerror, memset */
|
#include <string.h> /* strdup, strerror, memset */
|
||||||
@ -62,6 +63,18 @@ do.
|
|||||||
#include <dirent.h> /* DIR, dirent */
|
#include <dirent.h> /* DIR, dirent */
|
||||||
#include <ctype.h> /* isspace */
|
#include <ctype.h> /* isspace */
|
||||||
|
|
||||||
|
#if defined(KWSYS_C_HAS_PTRDIFF_T) && KWSYS_C_HAS_PTRDIFF_T
|
||||||
|
typedef ptrdiff_t kwsysProcess_ptrdiff_t;
|
||||||
|
#else
|
||||||
|
typedef int kwsysProcess_ptrdiff_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(KWSYS_C_HAS_SSIZE_T) && KWSYS_C_HAS_SSIZE_T
|
||||||
|
typedef ssize_t kwsysProcess_ssize_t;
|
||||||
|
#else
|
||||||
|
typedef int kwsysProcess_ssize_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* The number of pipes for the child's output. The standard stdout
|
/* The number of pipes for the child's output. The standard stdout
|
||||||
and stderr pipes are the first two. One more pipe is used to
|
and stderr pipes are the first two. One more pipe is used to
|
||||||
detect when the child process has terminated. The third pipe is
|
detect when the child process has terminated. The third pipe is
|
||||||
@ -368,8 +381,8 @@ int kwsysProcess_AddCommand(kwsysProcess* cp, char const* const* command)
|
|||||||
{
|
{
|
||||||
/* Copy each argument string individually. */
|
/* Copy each argument string individually. */
|
||||||
char const* const* c = command;
|
char const* const* c = command;
|
||||||
int n = 0;
|
kwsysProcess_ptrdiff_t n = 0;
|
||||||
int i = 0;
|
kwsysProcess_ptrdiff_t i = 0;
|
||||||
while(*c++);
|
while(*c++);
|
||||||
n = c - command - 1;
|
n = c - command - 1;
|
||||||
newCommands[cp->NumberOfCommands] = (char**)malloc((n+1)*sizeof(char*));
|
newCommands[cp->NumberOfCommands] = (char**)malloc((n+1)*sizeof(char*));
|
||||||
@ -904,7 +917,7 @@ int kwsysProcess_WaitForData(kwsysProcess* cp, char** data, int* length,
|
|||||||
if(cp->PipeReadEnds[i] >= 0 &&
|
if(cp->PipeReadEnds[i] >= 0 &&
|
||||||
FD_ISSET(cp->PipeReadEnds[i], &cp->PipeSet))
|
FD_ISSET(cp->PipeReadEnds[i], &cp->PipeSet))
|
||||||
{
|
{
|
||||||
int n;
|
kwsysProcess_ssize_t n;
|
||||||
|
|
||||||
/* We are handling this pipe now. Remove it from the set. */
|
/* We are handling this pipe now. Remove it from the set. */
|
||||||
FD_CLR(cp->PipeReadEnds[i], &cp->PipeSet);
|
FD_CLR(cp->PipeReadEnds[i], &cp->PipeSet);
|
||||||
@ -1501,8 +1514,8 @@ static int kwsysProcessCreate(kwsysProcess* cp, int prIndex,
|
|||||||
/* Block until the child's exec call succeeds and closes the error
|
/* Block until the child's exec call succeeds and closes the error
|
||||||
pipe or writes data to the pipe to report an error. */
|
pipe or writes data to the pipe to report an error. */
|
||||||
{
|
{
|
||||||
int total = 0;
|
kwsysProcess_ssize_t total = 0;
|
||||||
int n = 1;
|
kwsysProcess_ssize_t n = 1;
|
||||||
/* Read the entire error message up to the length of our buffer. */
|
/* Read the entire error message up to the length of our buffer. */
|
||||||
while(total < KWSYSPE_PIPE_BUFFER_SIZE && n > 0)
|
while(total < KWSYSPE_PIPE_BUFFER_SIZE && n > 0)
|
||||||
{
|
{
|
||||||
@ -2404,7 +2417,7 @@ static int kwsysProcessAppendByte(char* local,
|
|||||||
/* Allocate space for the character. */
|
/* Allocate space for the character. */
|
||||||
if((*end - *begin) >= *size)
|
if((*end - *begin) >= *size)
|
||||||
{
|
{
|
||||||
int length = *end - *begin;
|
kwsysProcess_ptrdiff_t length = *end - *begin;
|
||||||
char* newBuffer = (char*)malloc(*size*2);
|
char* newBuffer = (char*)malloc(*size*2);
|
||||||
if(!newBuffer)
|
if(!newBuffer)
|
||||||
{
|
{
|
||||||
@ -2442,7 +2455,7 @@ static int kwsysProcessAppendArgument(char** local,
|
|||||||
/* Allocate space for the argument pointer. */
|
/* Allocate space for the argument pointer. */
|
||||||
if((*end - *begin) >= *size)
|
if((*end - *begin) >= *size)
|
||||||
{
|
{
|
||||||
int length = *end - *begin;
|
kwsysProcess_ptrdiff_t length = *end - *begin;
|
||||||
char** newPointers = (char**)malloc(*size*2*sizeof(char*));
|
char** newPointers = (char**)malloc(*size*2*sizeof(char*));
|
||||||
if(!newPointers)
|
if(!newPointers)
|
||||||
{
|
{
|
||||||
@ -2615,14 +2628,14 @@ static char** kwsysProcessParseVerbatimCommand(const char* command)
|
|||||||
buffer. */
|
buffer. */
|
||||||
if(!failed)
|
if(!failed)
|
||||||
{
|
{
|
||||||
int n = pointer_end - pointer_begin;
|
kwsysProcess_ptrdiff_t n = pointer_end - pointer_begin;
|
||||||
newCommand = (char**)malloc((n+1)*sizeof(char*));
|
newCommand = (char**)malloc((n+1)*sizeof(char*));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(newCommand)
|
if(newCommand)
|
||||||
{
|
{
|
||||||
/* Copy the arguments into the new command buffer. */
|
/* Copy the arguments into the new command buffer. */
|
||||||
int n = pointer_end - pointer_begin;
|
kwsysProcess_ptrdiff_t n = pointer_end - pointer_begin;
|
||||||
memcpy(newCommand, pointer_begin, sizeof(char*)*n);
|
memcpy(newCommand, pointer_begin, sizeof(char*)*n);
|
||||||
newCommand[n] = 0;
|
newCommand[n] = 0;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
/* Macros to define main() in a cross-platform way.
|
/*
|
||||||
Usage:
|
Macros to define main() in a cross-platform way.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
int KWSYS_PLATFORM_TEST_C_MAIN()
|
int KWSYS_PLATFORM_TEST_C_MAIN()
|
||||||
{
|
{
|
||||||
@ -23,3 +25,27 @@
|
|||||||
# define KWSYS_PLATFORM_TEST_C_MAIN_ARGS(argc, argv) \
|
# define KWSYS_PLATFORM_TEST_C_MAIN_ARGS(argc, argv) \
|
||||||
main(int argc, char* argv[])
|
main(int argc, char* argv[])
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
#ifdef TEST_KWSYS_C_HAS_PTRDIFF_T
|
||||||
|
#include <stddef.h>
|
||||||
|
int f(ptrdiff_t n) { return n > 0; }
|
||||||
|
int KWSYS_PLATFORM_TEST_C_MAIN()
|
||||||
|
{
|
||||||
|
char* p = 0;
|
||||||
|
ptrdiff_t d = p - p;
|
||||||
|
(void)d;
|
||||||
|
return f(p - p);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
#ifdef TEST_KWSYS_C_HAS_SSIZE_T
|
||||||
|
#include <unistd.h>
|
||||||
|
int f(ssize_t n) { return (int)n; }
|
||||||
|
int KWSYS_PLATFORM_TEST_C_MAIN()
|
||||||
|
{
|
||||||
|
ssize_t n = 0;
|
||||||
|
return f(n);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user