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)
|
||||
# Use the UNIX implementation.
|
||||
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(KWSYS_USE_Process)
|
||||
|
||||
|
|
|
@ -47,6 +47,7 @@ do.
|
|||
|
||||
*/
|
||||
|
||||
#include <stddef.h> /* ptrdiff_t */
|
||||
#include <stdio.h> /* snprintf */
|
||||
#include <stdlib.h> /* malloc, free */
|
||||
#include <string.h> /* strdup, strerror, memset */
|
||||
|
@ -62,6 +63,18 @@ do.
|
|||
#include <dirent.h> /* DIR, dirent */
|
||||
#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
|
||||
and stderr pipes are the first two. One more pipe is used to
|
||||
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. */
|
||||
char const* const* c = command;
|
||||
int n = 0;
|
||||
int i = 0;
|
||||
kwsysProcess_ptrdiff_t n = 0;
|
||||
kwsysProcess_ptrdiff_t i = 0;
|
||||
while(*c++);
|
||||
n = c - command - 1;
|
||||
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 &&
|
||||
FD_ISSET(cp->PipeReadEnds[i], &cp->PipeSet))
|
||||
{
|
||||
int n;
|
||||
kwsysProcess_ssize_t n;
|
||||
|
||||
/* We are handling this pipe now. Remove it from the set. */
|
||||
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
|
||||
pipe or writes data to the pipe to report an error. */
|
||||
{
|
||||
int total = 0;
|
||||
int n = 1;
|
||||
kwsysProcess_ssize_t total = 0;
|
||||
kwsysProcess_ssize_t n = 1;
|
||||
/* Read the entire error message up to the length of our buffer. */
|
||||
while(total < KWSYSPE_PIPE_BUFFER_SIZE && n > 0)
|
||||
{
|
||||
|
@ -2404,7 +2417,7 @@ static int kwsysProcessAppendByte(char* local,
|
|||
/* Allocate space for the character. */
|
||||
if((*end - *begin) >= *size)
|
||||
{
|
||||
int length = *end - *begin;
|
||||
kwsysProcess_ptrdiff_t length = *end - *begin;
|
||||
char* newBuffer = (char*)malloc(*size*2);
|
||||
if(!newBuffer)
|
||||
{
|
||||
|
@ -2442,7 +2455,7 @@ static int kwsysProcessAppendArgument(char** local,
|
|||
/* Allocate space for the argument pointer. */
|
||||
if((*end - *begin) >= *size)
|
||||
{
|
||||
int length = *end - *begin;
|
||||
kwsysProcess_ptrdiff_t length = *end - *begin;
|
||||
char** newPointers = (char**)malloc(*size*2*sizeof(char*));
|
||||
if(!newPointers)
|
||||
{
|
||||
|
@ -2615,14 +2628,14 @@ static char** kwsysProcessParseVerbatimCommand(const char* command)
|
|||
buffer. */
|
||||
if(!failed)
|
||||
{
|
||||
int n = pointer_end - pointer_begin;
|
||||
kwsysProcess_ptrdiff_t n = pointer_end - pointer_begin;
|
||||
newCommand = (char**)malloc((n+1)*sizeof(char*));
|
||||
}
|
||||
|
||||
if(newCommand)
|
||||
{
|
||||
/* 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);
|
||||
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()
|
||||
{
|
||||
|
@ -23,3 +25,27 @@
|
|||
# define KWSYS_PLATFORM_TEST_C_MAIN_ARGS(argc, argv) \
|
||||
main(int argc, char* argv[])
|
||||
#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…
Reference in New Issue