327 lines
7.7 KiB
C
327 lines
7.7 KiB
C
#ifndef __EVIL_UNISTD_H__
|
|
#define __EVIL_UNISTD_H__
|
|
|
|
|
|
/**
|
|
* @file evil_unistd.h
|
|
* @brief The file that provides functions ported from Unix in unistd.h.
|
|
* @defgroup Evil_Unistd_Group Unistd.h functions
|
|
*
|
|
* This header provides functions ported from Unix in unistd.h.
|
|
*
|
|
* @{
|
|
*/
|
|
|
|
|
|
/*
|
|
* Time related functions
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* @brief Return the time spent since the Evil library has been initialized.
|
|
*
|
|
* @return The time spent since the Evil library has been initialized.
|
|
*
|
|
* This function returns the time spent since the Evil library has
|
|
* been initialized. It uses a high-resolution timer and then can have
|
|
* a precision up to the nano-second. The precision is processor
|
|
* dependant. This function can be used to benchmark parts of code in
|
|
* with high precision.
|
|
*
|
|
* Conformity: Not appliclable.
|
|
*
|
|
* Supported OS: Windows XP, Windows CE.
|
|
*/
|
|
EAPI double evil_time_get(void);
|
|
|
|
#ifdef _MSC_VER
|
|
|
|
/**
|
|
* @brief Retrieve the time since the Evil library has been
|
|
* initialized.
|
|
*
|
|
* @param tp Structure to fill.
|
|
* @param tzp Unused.
|
|
* @return Always 1.
|
|
*
|
|
* The function fills @p tp with the time spent since the Evil library
|
|
* has been initialized. It uses a high-resolution timer and then can
|
|
* have a precision up to the nano-second. The precision is processor
|
|
* dependant. This function can be used to benchmark parts of code in
|
|
* with high precision. This function always returns 1.
|
|
*
|
|
* Conformity: Not appliclable.
|
|
*
|
|
* Supported OS: Windows XP, Windows CE.
|
|
*/
|
|
EAPI int evil_gettimeofday(struct timeval * tp, void * tzp);
|
|
|
|
/**
|
|
* @def gettimeofday(tp,tzp)
|
|
*
|
|
* Wrapper around evil_gettimeofday().
|
|
*/
|
|
#define gettimeofday(tp,tzp) evil_gettimeofday((tp),(tzp))
|
|
|
|
/**
|
|
* @brief Suspend the execution of the calling process for microsecond
|
|
* intervals.
|
|
*
|
|
* @param usec The interval in microseconds.
|
|
* @return Always 0 (success).
|
|
*
|
|
* This function suspends the execution of the calling process for (at
|
|
* least) @p usec microseconds.
|
|
*
|
|
* Conformity: Not appliclable.
|
|
*
|
|
* Supported OS: Windows XP, Windows CE.
|
|
*/
|
|
EAPI int evil_usleep(unsigned long usec);
|
|
|
|
/**
|
|
* @def usleep(usec)
|
|
*
|
|
* Wrapper around evil_usleep().
|
|
*/
|
|
#define usleep(usec) evil_usleep(usec);
|
|
|
|
#endif /* _MSC_VER */
|
|
|
|
/*
|
|
* Process identifer related functions
|
|
*
|
|
*/
|
|
|
|
#if defined (_MSC_VER) || defined (_WIN32_WCE)
|
|
/**
|
|
* @brief Return the process identifier of the calling process.
|
|
*
|
|
* @return The process ID.
|
|
*
|
|
* Return the process identifier of the calling process. Until
|
|
* the process terminates, the process identifier uniquely
|
|
* identifies the process throughout the system.
|
|
*
|
|
* Conformity: Not appliclable.
|
|
*
|
|
* Supported OS: Windows XP, Windows CE.
|
|
*/
|
|
EAPI pid_t getpid(void);
|
|
#endif
|
|
|
|
|
|
/*
|
|
* Symbolic links and directory related functions
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* @brief Create a shell link.
|
|
*
|
|
* @param oldpath The file name to be linked.
|
|
* @param newpath The file name to create.
|
|
* @return 0 on success, -1 otherwise.
|
|
*
|
|
* Create a shell link @p newpath to @p oldpath (@p newpath is the
|
|
* name of the file created, @p oldpath is the string used in
|
|
* creating the shell link).
|
|
*
|
|
* On success, this function returns 0. Otherwise, it returns -1 and
|
|
* errno may be set to the following value:
|
|
* - ENOMEM: Not enough memory.
|
|
*
|
|
* On Windows, the symbolic links do not exist. Nevertheless
|
|
* shell links can be created. This function is named like the Unix
|
|
* function for portability reasons.
|
|
*
|
|
* Conformity: None.
|
|
*
|
|
* Supported OS: Windows XP, Windows CE.
|
|
*/
|
|
EAPI int symlink(const char *oldpath, const char *newpath);
|
|
|
|
/**
|
|
* @brief Read value of a shell link.
|
|
*
|
|
* @param path The file name to be linked.
|
|
* @param buf The file name to create.
|
|
* @param bufsiz The size of the buffer.
|
|
* @return 0 on success, -1 otherwise.
|
|
*
|
|
* Place the content of the shell link @p path in the buffer
|
|
* @p buf, which has size @p bufzsiz.
|
|
*
|
|
* On success, this function returns 0. Otherwise, it returns -1 and
|
|
* errno may be set to the following value:
|
|
* - ENOMEM: Not enough memory.
|
|
*
|
|
* On Windows, the symbolic links do not exist. Nevertheless
|
|
* shell links can be managed. This function is named like the Unix
|
|
* function for portability reasons.
|
|
*
|
|
* Conformity: None.
|
|
*
|
|
* Supported OS: Windows XP, Windows CE.
|
|
*/
|
|
EAPI ssize_t readlink(const char *path, char *buf, size_t bufsiz);
|
|
|
|
|
|
/*
|
|
* file related functions
|
|
*
|
|
*/
|
|
|
|
|
|
#ifdef _WIN32_WCE
|
|
|
|
/**
|
|
* @brief Return information about a file.
|
|
*
|
|
* @param file_name The file to retrieve information from.
|
|
* @param st Buffer to fill
|
|
* @return 0 on success, -1 otherwise.
|
|
*
|
|
* This function retrieves information about the file named
|
|
* @p file_name and fill the structure @p st. If the function
|
|
* succeeds, 0 is returned, otherwise -1 is returned.
|
|
*
|
|
* Conformity: None.
|
|
*
|
|
* Supported OS: Windows CE (not cegcc).
|
|
*/
|
|
EAPI int evil_stat(const char *file_name, struct stat *st);
|
|
|
|
/**
|
|
* @def stat(f,st)
|
|
*
|
|
* Wrapper around evil_stat().
|
|
*/
|
|
# define stat(f,st) evil_stat((f),(st))
|
|
|
|
#endif /* _WIN32_WCE */
|
|
|
|
/**
|
|
* @brief Get the current directory.
|
|
*
|
|
* @param buffer Buffer to store the current directory.
|
|
* @param size Size of the buffer.
|
|
* @return The current directory.
|
|
*
|
|
* On Windows desktop, use the _getcwd function in MSVCRT.
|
|
*
|
|
* On Windows CE, get the current directory by extracting the path
|
|
* from the executable that is running and put the result in @p buffer
|
|
* of length @p size. If @p size is less or equal than 0, return NULL.
|
|
* If the current absolute path would require a buffer longer than
|
|
* @p size elements, NULL is returned. If @p buffer is NULL, a buffer
|
|
* of length @p size is allocated and is returned. If the allocation
|
|
* fails, NULL is returned. On success, @p buffer is returned and
|
|
* contains the current directory. The last '\' is not included.
|
|
* If @p buffer is NULL, the returned value must be freed if not NULL.
|
|
*
|
|
* Specially usefull on WinCE where the current directory functionality
|
|
* is not supported.
|
|
*
|
|
* Conformity: Almost POSIX.1 (no errno set)
|
|
*
|
|
* Supported OS: Windows XP, Windows CE.
|
|
*/
|
|
EAPI char *evil_getcwd(char *buffer, size_t size);
|
|
|
|
/**
|
|
* @def getcwd(b,s)
|
|
*
|
|
* Wrapper around evil_getcwd().
|
|
*/
|
|
#define getcwd(b,s) evil_getcwd((b),(s))
|
|
|
|
/*
|
|
* Sockets and pipe related functions
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* @brief Initiates the use of Windows sockets.
|
|
*
|
|
* @return 1 on success, 0 otherwise.
|
|
*
|
|
* Initiates the use of Windows sockets. If the function succeeds,
|
|
* it returns 1, otherwise it returns 0.
|
|
*
|
|
* Conformity: Non applicable.
|
|
*
|
|
* Supported OS: Windows XP, Windows CE.
|
|
*/
|
|
EAPI int evil_sockets_init(void);
|
|
|
|
/**
|
|
* @brief Shutdown the Windows socket system.
|
|
*
|
|
* Shutdown the Windows socket system.
|
|
*
|
|
* Conformity: Non applicable.
|
|
*
|
|
* Supported OS: Windows XP, Windows CE.
|
|
*/
|
|
EAPI void evil_sockets_shutdown(void);
|
|
|
|
/**
|
|
* @brief Create a pair of sockets.
|
|
*
|
|
* @param fds A pointer that contains two sockets.
|
|
*
|
|
* Create a pair of sockets that can be use with select().
|
|
* Hence, evil_sockets_init() must have been caled at least
|
|
* once before. Contrary to Unix, that functions does not
|
|
* create a pair of file descriptors.
|
|
*
|
|
* Conformity: Not applicable.
|
|
*
|
|
* Supported OS: Windows XP, Windows CE.
|
|
*/
|
|
EAPI int evil_pipe(int *fds);
|
|
|
|
/**
|
|
* @def pipe(fds)
|
|
*
|
|
* Wrapper around evil_pipe().
|
|
*/
|
|
#define pipe(fds) evil_pipe(fds)
|
|
|
|
|
|
/*
|
|
* Exec related functions
|
|
*
|
|
*/
|
|
|
|
|
|
#ifdef _WIN32_WCE
|
|
|
|
/**
|
|
* @brief Replace the current process image with a new process image.
|
|
*
|
|
* @param file The file name of the file being executed.
|
|
* @param argv A @c NULL terminated array of strings.
|
|
* @return Always 1.
|
|
*
|
|
* This function does nothing and returns always 1. It is defined for
|
|
* ecore_app only for native Windows CE code.
|
|
*
|
|
* Conformity: Not appliclable.
|
|
*
|
|
* Supported OS: Windows CE (not cegcc).
|
|
*/
|
|
EAPI int execvp( const char *file, char *const argv[]);
|
|
|
|
#endif /* _WIN32_WCE */
|
|
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
|
|
#endif /* __EVIL_UNISTD_H__ */
|