From 02f4d9518378031c63df7a36c49d8b2eabdaab90 Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Fri, 21 Aug 2020 22:49:39 +0800 Subject: [PATCH] add program folder --- program/cp_library/cp_dictionary.c | 398 program/serial2socket/thread_mode/cp_socket.c | 357 program/cp_library/cp_dictionary.h | 165 program/serial2socket/thread_mode/cp_socket.h | 65 program/cp_library/test/test_queue.c | 84 program/cp_library/cp_array.h | 41 program/fwed/gpsd/gpsd.c | 211 program/cp_library/cp_klist.h | 723 program/cp_library/makefile | 107 program/fwed/gpsd/nmea_parse.h | 65 program/converterd/cp_logger.h | 111 program/fwed/gpsd/gpsd.h | 52 program/cp_library/cp_array.c | 168 program/cp_library/test/test_vector.c | 67 program/cp_library/cp_iniparser.c | 807 program/cp_library/test/test_klist.c | 79 program/fwed/gpsd/nmea_parse.c | 681 program/cp_library/tags | 1322 program/cp_library/cp_iniparser.h | 308 program/converterd/cp_logger.c | 433 program/cp_library/cp_string.c | 673 program/cp_library/cp_string.h | 86 program/cp_library/cp_fds.c | 633 program/cp_library/at91_ioctl.h | 91 program/cp_library/cp_fds.h | 114 program/cp_library/cp_queue.c | 155 program/cp_library/cscope.out | 132502 ++++++++++++++++++++++++++++++++++++++++++++++++++ program/cp_library/cp_queue.h | 49 program/cp_library/cp_atcmd.h | 68 program/cp_library/cp_atcmd.c | 668 program/fwed/makefile | 201 program/serial2socket/thread_mode/sp2sck.h | 31 program/converterd/cvd_main.c | 309 program/converterd/cp_iniparser.h | 308 program/converterd/makefile | 114 program/cp_library/cp_sock.h | 184 program/serial2socket/thread_mode/cp_comport.h | 67 program/cp_library/cp_sock.c | 854 program/unp/makefile | 79 program/converterd/cp_iniparser.c | 807 program/cp_library/test/test_array.c | 82 program/serial2socket/thread_mode/cp_comport.c | 600 program/cp_library/cp_common.h | 68 program/cp_library/test/test_sock_client.c | 110 program/serial2socket/thread_mode/makefile | 70 program/cp_library/cp_gprs.h | 126 program/fwed/zigd/makefile | 95 program/cp_library/cp_gprs.c | 705 program/fwed/gpsd/makefile | 95 program/cp_library/cp_proc.h | 42 program/converterd/cp_proc.c | 341 program/unp/socket_server_thread.c | 272 program/converterd/cp_comport.c | 600 program/cp_library/cp_proc.c | 341 program/cp_library/cp_time.h | 123 program/converterd/cp_comport.h | 67 program/cp_library/test/test_hh.c | 85 program/cp_library/cp_network.h | 37 program/sqlite/build.sh | 124 program/cp_library/cp_gsmmux.h | 44 program/cp_library/test/swe_tpdud.c | 360 program/converterd/cp_proc.h | 42 program/converterd/cp_dictionary.c | 398 program/serial2socket/thread_mode/cp_proc.h | 42 program/cp_library/test/sample.ini | 11 program/cp_library/test/swe_tpdud.h | 42 program/cp_library/cp_logger.h | 110 program/fwed/zigd/zigd.c | 152 program/fwed/zigd/zigd.h | 51 program/cp_library/cp_network.c | 358 program/unp/test.sh | 10 program/fwed/gpsd/nmea_info.h | 234 program/cp_library/cp_logger.c | 420 program/sqlite/makefile | 123 program/converterd/cvd_main.h | 40 program/fwed/gpsd/nmea_info.c | 195 program/serial2socket/thread_mode/cp_logger.h | 111 program/serial2socket/thread_mode/cp_proc.c | 342 program/cp_library/test/test_logger.c | 58 program/serial2socket/thread_mode/sp2sck.c | 319 program/fwed/fwe_entry.h | 39 program/serial2socket/thread_mode/cp_logger.c | 433 program/cp_library/test/test_ini.c | 48 program/cp_library/cscope.in.out | 0 program/fwed/fwe_entry.c | 96 program/converterd/cvd_conf.c | 121 program/cp_library/cp_ppp.c | 552 program/cp_library/cp_comport.h | 67 program/converterd/cvd_conf.h | 31 program/cp_library/cp_comport.c | 600 program/fwed/gsmd/makefile | 95 program/unp/socket_server_select.c | 435 program/cp_library/cp_ringbuf.h | 57 program/fwed/gsmd/gsmd.h | 43 program/cp_library/cp_ppp.h | 138 program/cp_library/cscope.po.out | 0 program/cp_library/test/comport.c | 238 program/fwed/gsmd/gsmd.c | 153 program/cp_library/cp_ringbuf.c | 103 program/sqlite/test_sqlite.c | 150 program/cp_library/cp_hal.c | 257 program/cp_library/test/test_string.c | 77 program/cp_library/cp_vector.c | 96 program/cp_library/test/test_hal.c | 210 program/cp_library/cp_hal.h | 56 program/converterd/cp_socket.h | 40 program/unp/socket_client.c | 209 program/converterd/cp_socket.c | 252 program/cp_library/test/makefile | 121 program/converterd/cp_dictionary.h | 165 program/cp_library/test/test_sock_server.c | 98 program/cp_library/cp_gsmmux.c | 75 program/cp_library/cp_vector.h | 40 program/fwed/etc/default_apn.conf | 741 114 files changed, 157,518 insertions(+), 0 deletions(-) diff --git a/program/converterd/cp_comport.c b/program/converterd/cp_comport.c new file mode 100644 index 0000000..2aecafa --- /dev/null +++ b/program/converterd/cp_comport.c @@ -0,0 +1,600 @@ +/* ******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_comport.c + * Description: It's the comport operate library. + * + * Version: 1.0.0(10/17/2011~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/17/2011 03:33:25 PM" + * + ********************************************************************************/ + +#include "cp_comport.h" + +/************************************************************************************** + * Description: Set the comport structure + * Input Args: dev_name: The comport device name path, such as '/dev/ttyS3' + * baudrate: The baudrate, such as 115200 + * settings: The databit,parity,stopbit,flowctrl settings, such as '8N1N' + * Output Args: NONE + * Return Value: The COM_PORT structure pointer. + *************************************************************************************/ +COM_PORT *comport_init(const char *dev_name, int baudrate, const char *settings) +{ + COM_PORT *comport = NULL; + if (NULL == (comport = (COM_PORT *) malloc(sizeof(COM_PORT)))) + { + return NULL; + } + memset(comport, 0, sizeof(COM_PORT)); + comport->is_connted = 0; + comport->frag_size = 128; + + strncpy(comport->dev_name, dev_name, DEVNAME_LEN); + comport->baudrate = baudrate; + + set_settings(comport, settings); +#ifdef COM_DEBUG + disp_settings(comport); +#endif + + return comport; +} + +#ifdef COM_DEBUG +void disp_settings(COM_PORT * comport) +{ + COM_PRINT("Device:\t\t\t\"%s\"\n", comport->dev_name); + COM_PRINT("Baudrate:\t\t%ld\n", comport->baudrate); + COM_PRINT("DataBit:\t\t\'%d\'\n", comport->databit); + switch (comport->parity) + { + case 0: + COM_PRINT("Parity:\t\t\t\'N\'\n"); + break; + case 1: + COM_PRINT("Parity:\t\t\t\'O\'\n"); + break; + case 2: + COM_PRINT("Parity:\t\t\t\'E\'\n"); + break; + case 3: + COM_PRINT("Parity:\t\t\t\'S\'\n"); + break; + } + COM_PRINT("StopBit:\t\t\'%ld\'\n", (long int)comport->stopbit); + switch (comport->flowctrl) + { + case 0: + COM_PRINT("FlowCtrl:\t\t\'N\'\n"); + break; + case 1: + COM_PRINT("FlowCtrl:\t\t\'S\'\n"); + break; + case 2: + COM_PRINT("FlowCtrl:\t\t\'H\'\n"); + break; + case 3: + COM_PRINT("FlowCtrl:\t\t\'B\'\n"); + break; + } + COM_PRINT("\n"); + return; +} +#endif + +/************************************************************************************** + * Description: Set the comport databit,parity,stopbit,flowctrl + * Input Args: comport: the COM_PORT pointer + * settings: The databit/parity/stopbit/flowctrl settings as like "8N1N" + * Output Args: NONE + * Return Value: NONE + *************************************************************************************/ +void set_settings(COM_PORT * comport, const char *settings) +{ + if(NULL==settings || NULL==comport) + return ; + + switch (settings[0]) /* data bit */ + { + case '7': + comport->databit = 7; + break; + case '8': + default: + comport->databit = 8; + break; + } + + switch (settings[1]) /* parity */ + { + case 'O': + case 'o': + comport->parity = 1; + break; + case 'E': + case 'e': + comport->parity = 2; + break; + case 'S': + case 's': + comport->parity = 3; + break; + case 'N': + case 'n': + default: + comport->parity = 0; + break; + } + + switch (settings[2]) /* stop bit */ + { + case '0': + comport->stopbit = 0; + break; + case '1': + default: + comport->stopbit = 1; + break; + } + + switch (settings[3]) /* flow control */ + { + case 'S': + case 's': + comport->flowctrl = 1; + break; + case 'H': + case 'h': + comport->flowctrl = 2; + break; + case 'B': + case 'b': + comport->flowctrl = 3; + break; + case 'N': + case 'n': + default: + comport->flowctrl = 0; + break; + } +} + +void comport_close(COM_PORT * comport) +{ + if (0 != comport->fd) + { + COM_PRINT("Close device \"%s\"\n", comport->dev_name); + close(comport->fd); + } + comport->is_connted = 0x00; + comport->fd = -1; +} + +void comport_term(COM_PORT * comport) +{ + if(NULL == comport) + return; + + if (0 != comport->fd) + { + comport_close(comport); + } + memset(comport, 0x00, sizeof(COM_PORT)); + free(comport); + comport = NULL; + + return; +} + +int comport_open(COM_PORT * comport) +{ + int retval = -1; + struct termios old_cfg, new_cfg; + int old_flags; + long tmp; + + if(NULL==comport) + return -1; + + comport_close(comport); + + + /* Not a TTY device */ + if( !strstr(comport->dev_name, "tty")) + { + COM_PRINT("Open Not tty device \"%s\"\n", comport->dev_name); + comport->fd = open(comport->dev_name, O_RDWR); + retval = comport->fd<0 ? -2 : comport->fd; + goto CleanUp; + } + + comport->fd = open(comport->dev_name, O_RDWR | O_NOCTTY | O_NONBLOCK); + if (comport->fd < 0) + { + retval = -3; + goto CleanUp; + } + COM_PRINT("Open device \"%s\"\n", comport->dev_name); + + if ((-1 != (old_flags = fcntl(comport->fd, F_GETFL, 0))) + && (-1 != fcntl(comport->fd, F_SETFL, old_flags & ~O_NONBLOCK))) + { + // Flush input and output + if (-1 == tcflush(comport->fd, TCIOFLUSH)) + { + retval = -4; + goto CleanUp; + } + } + else // Failure + { + retval = -5; + goto CleanUp; + } + + if (0 != tcgetattr(comport->fd, &old_cfg)) + { + retval = -6; // Failed to get Com settings + goto CleanUp; + } + + memset(&new_cfg, 0, sizeof(new_cfg)); + + /*=====================================*/ + /* Configure comport */ + /*=====================================*/ + + new_cfg.c_cflag &= ~CSIZE; + new_cfg.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); + new_cfg.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); + new_cfg.c_oflag &= ~(OPOST); + + /* Set the data bit */ + switch (comport->databit) + { + case 0x07: + new_cfg.c_cflag |= CS7; + break; + case 0x06: + new_cfg.c_cflag |= CS6; + break; + case 0x05: + new_cfg.c_cflag |= CS5; + break; + default: + new_cfg.c_cflag |= CS8; + break; + } + + /* Set the parity */ + switch (comport->parity) + { + case 0x01: // Odd + new_cfg.c_cflag |= (PARENB | PARODD); + new_cfg.c_cflag |= (INPCK | ISTRIP); + break; + case 0x02: // Even + new_cfg.c_cflag |= PARENB; + new_cfg.c_cflag &= ~PARODD;; + new_cfg.c_cflag |= (INPCK | ISTRIP); + break; + case 0x03: + new_cfg.c_cflag &= ~PARENB; + new_cfg.c_cflag &= ~CSTOPB; + break; + default: + new_cfg.c_cflag &= ~PARENB; + } + + /* Set Stop bit */ + if (0x01 != comport->stopbit) + { + new_cfg.c_cflag |= CSTOPB; + } + else + { + new_cfg.c_cflag &= ~CSTOPB; + } + + /* Set flow control */ + switch (comport->flowctrl) + { + case 1: // Software control + case 3: + new_cfg.c_cflag &= ~(CRTSCTS); + new_cfg.c_iflag |= (IXON | IXOFF); + break; + case 2: // Hardware control + new_cfg.c_cflag |= CRTSCTS; // Also called CRTSCTS + new_cfg.c_iflag &= ~(IXON | IXOFF); + break; + default: // NONE + new_cfg.c_cflag &= ~(CRTSCTS); + new_cfg.c_iflag &= ~(IXON | IXOFF); + break; + } + + /* Set baudrate */ + switch (comport->baudrate) + { + case 115200: + tmp = B115200; + break; + case 57600: + tmp = B57600; + break; + case 38400: + tmp = B38400; + break; + case 19200: + tmp = B19200; + break; + case 9600: + tmp = B9600; + break; + case 4800: + tmp = B4800; + break; + case 2400: + tmp = B2400; + break; + case 1800: + tmp = B1800; + break; + case 1200: + tmp = B1200; + break; + case 600: + tmp = B600; + break; + case 300: + tmp = B300; + break; + case 200: + tmp = B200; + break; + case 150: + tmp = B150; + break; + case 134: + tmp = B134; + break; + case 110: + tmp = B110; + break; + case 75: + tmp = B75; + break; + case 50: + tmp = B50; + break; + default: + tmp = B115200; + } + cfsetispeed(&new_cfg, tmp); + cfsetispeed(&new_cfg, tmp); + + /* Set the Com port timeout settings */ + new_cfg.c_cc[VMIN] = 0; + new_cfg.c_cc[VTIME] = 0; + + tcflush(comport->fd, TCIFLUSH); + if (0 != tcsetattr(comport->fd, TCSANOW, &new_cfg)) + { + retval = -7; // Failed to set device com port settings + goto CleanUp; + } + + COM_PRINT("Connected device \"%s\".\n", comport->dev_name); + comport->is_connted = 0x01; + retval = comport->fd; + +CleanUp: + COM_PRINT("Open device \"%s\" %s.\n", comport->dev_name, retval>0 ? "successfully" : "failure"); + return retval; +} + +void nonblock() +{ + struct termios ttystate; + + //get the terminal state + tcgetattr(STDIN_FILENO, &ttystate); + + //turn off canonical mode + ttystate.c_lflag &= ~ICANON; + //minimum of number input read. + ttystate.c_cc[VMIN] = 1; + + //set the terminal attributes. + tcsetattr(STDIN_FILENO, TCSANOW, &ttystate); +} + +int kbhit() +{ + struct timeval tv; + fd_set fds; + tv.tv_sec = 0; + tv.tv_usec = 0; + FD_ZERO(&fds); + FD_SET(STDIN_FILENO, &fds); //STDIN_FILENO is 0 + select(STDIN_FILENO + 1, &fds, NULL, NULL, &tv); + return FD_ISSET(STDIN_FILENO, &fds); +} + +int comport_recv(COM_PORT * comport, char *buf, int buf_size, unsigned long timeout) +{ + int retval = 0; // Function return value + int iRet; + fd_set stReadFds, stExcpFds; + struct timeval stTime; + + if (NULL == buf || 0 >= buf_size) + { + COM_PRINT("%s() usage error.\n", __FUNCTION__); + retval = -1; + goto CleanUp; + } + + if (0x01 != comport->is_connted) + { + COM_PRINT("%s() comport not connected.\n", __FUNCTION__); + retval = -2; + goto CleanUp; + } + + //printf("bufsize=%d timeout=%lu\n", buf_size, timeout); + + FD_ZERO(&stReadFds); + FD_ZERO(&stExcpFds); + FD_SET(comport->fd, &stReadFds); + FD_SET(comport->fd, &stExcpFds); + + if (0xFFFFFFFF != timeout) + { + stTime.tv_sec = (time_t) (timeout / 1000); + stTime.tv_usec = (long)(1000 * (timeout % 1000)); + + iRet = select(comport->fd + 1, &stReadFds, 0, &stExcpFds, &stTime); + if (0 == iRet) + { + retval = 0; // No data in Com port buffer + goto CleanUp; + } + else if (0 < iRet) + { + if (0 != FD_ISSET(comport->fd, &stExcpFds)) + { + retval = -6; // Error during checking recv status + COM_PRINT("Error checking recv status.\n"); + goto CleanUp; + } + + if (0 == FD_ISSET(comport->fd, &stReadFds)) + { + retval = 0; // No incoming data + COM_PRINT("No incoming data.\n"); + goto CleanUp; + } + } + else + { + if (EINTR == errno) + { + COM_PRINT("catch interrupt signal.\n"); + retval = 0; // Interrupted signal catched + } + else + { + COM_PRINT("Check recv status failure.\n"); + retval = -7; // Error during checking recv status + } + + goto CleanUp; + } + } + + usleep(10000); /* sleep for 10ms for data incoming */ + + // Get data from Com port + iRet = read(comport->fd, buf, buf_size); + if (0 > iRet) + { + if (EINTR == errno) + retval = 0; // Interrupted signal catched + else + retval = -3; // Failed to read Com port + + goto CleanUp; + } + +#if 0 + { + int i=0; + printf("Receive %d bytes data: \n", iRet); + for(i=0; i<iRet; i++) + { + printf("0x%02x ", buf[i]); + } + printf("\n"); + } +#endif + + retval = iRet; + + CleanUp: + return retval; + +} + +int comport_send(COM_PORT * comport, char *buf, int send_bytes) +{ + char *ptr, *end; + int retval = 0; + int send = 0; + + if (NULL == buf || 0 >= send_bytes) + { + COM_PRINT("%s() Usage error.\n", __FUNCTION__); + retval = -1; + goto CleanUp; + } + + if (0x01 != comport->is_connted) // Comport not opened ? + { + retval = -3; + COM_PRINT("Serail not connected.\n"); + goto CleanUp; + } + + //printf("Send %s with %d bytes.\n", buf, send_bytes); + + // Large data, then slice them and send + if (comport->frag_size < send_bytes) + { + ptr = buf; + end = buf + send_bytes; + + do + { + // Large than frag_size + if (comport->frag_size < (end - ptr)) + { + send = write(comport->fd, ptr, comport->frag_size); + if (0 >= send || comport->frag_size != send) + { + retval = -4; + goto CleanUp; + } + ptr += comport->frag_size; + } + else // Less than frag_size, maybe last fragmention. + { + send = write(comport->fd, ptr, (end - ptr)); + if (0 >= send || (end - ptr) != send) + { + retval = -4; + goto CleanUp; + } + ptr += (end - ptr); + } + } + while (ptr < end); + } + else // The send data is not large than a fragmention. + { + send = write(comport->fd, buf, send_bytes); + if (0 >= send || send_bytes != send) + { + retval = -5; + goto CleanUp; + } + } + + CleanUp: + return retval; +} + diff --git a/program/converterd/cp_comport.h b/program/converterd/cp_comport.h new file mode 100644 index 0000000..4dea2f1 --- /dev/null +++ b/program/converterd/cp_comport.h @@ -0,0 +1,67 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_comport.h + * Description: This head file is for the common TTY/Serial port operator library + * + * Version: 1.0.0(10/17/2011~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/17/2011 03:33:25 PM" + * + ********************************************************************************/ +#ifndef _CP_COMPORT_H +#define _CP_COMPORT_H + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <getopt.h> +#include <fcntl.h> +#include <errno.h> +#include <termios.h> +#include <sys/stat.h> +#include <sys/wait.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/select.h> + +#define BUF_64 64 + +#ifndef DEVNAME_LEN +#define DEVNAME_LEN 64 +#endif + +//#define COM_DEBUG +#ifdef COM_DEBUG +#define COM_PRINT(format,args...) printf(format, ##args) +#else +#define COM_PRINT(format,args...) do{} while(0); +#endif + +//#define msleep(m) {struct timespec cSleep; cSleep.tv_sec = 0; cSleep.tv_nsec = m * 1000; nanosleep(&cSleep, 0);} + +typedef struct __COM_PORT +{ + unsigned char databit, parity, stopbit, flowctrl, is_connted; + char dev_name[DEVNAME_LEN]; + unsigned char used; /* This comport used or not now */ + int fd; + int frag_size; + long baudrate; +} COM_PORT; + +COM_PORT *comport_init(const char *dev_name, int baudrate, const char *settings); +void comport_close(COM_PORT * comport); +int comport_open(COM_PORT * comport); +void comport_term(COM_PORT * comport); +int comport_recv(COM_PORT * comport, char *buf, int buf_size, unsigned long timeout); +int comport_send(COM_PORT * comport, char *buf, int send_bytes); + +void set_settings(COM_PORT * comport, const char *settings); +void disp_settings(COM_PORT * comport); +void nonblock(); +int kbhit(); + +#endif diff --git a/program/converterd/cp_dictionary.c b/program/converterd/cp_dictionary.c new file mode 100644 index 0000000..96fb783 --- /dev/null +++ b/program/converterd/cp_dictionary.c @@ -0,0 +1,398 @@ +/*-------------------------------------------------------------------------*/ +/** + @file cp_dictionary.c + @author N. Devillard + @brief Implements a dictionary for string variables. + + This module implements a simple dictionary object, i.e. a list + of string/string associations. This object is useful to store e.g. + informations retrieved from a configuration file (ini files). +*/ +/*--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- + Includes + ---------------------------------------------------------------------------*/ +#include "cp_dictionary.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +/** Maximum value size for integers and doubles. */ +#define MAXVALSZ 1024 + +/** Minimal allocated number of entries in a dictionary */ +#define DICTMINSZ 128 + +/** Invalid key token */ +#define DICT_INVALID_KEY ((char*)-1) + +/*--------------------------------------------------------------------------- + Private functions + ---------------------------------------------------------------------------*/ + +/* Doubles the allocated size associated to a pointer */ +/* 'size' is the current allocated size. */ +static void * mem_double(void * ptr, int size) +{ + void * newptr ; + + newptr = calloc(2*size, 1); + if (newptr==NULL) { + return NULL ; + } + memcpy(newptr, ptr, size); + free(ptr); + return newptr ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Duplicate a string + @param s String to duplicate + @return Pointer to a newly allocated string, to be freed with free() + + This is a replacement for strdup(). This implementation is provided + for systems that do not have it. + */ +/*--------------------------------------------------------------------------*/ +static char * xstrdup(const char * s) +{ + char * t ; + if (!s) + return NULL ; + t = (char*)malloc(strlen(s)+1) ; + if (t) { + strcpy(t,s); + } + return t ; +} + +/*--------------------------------------------------------------------------- + Function codes + ---------------------------------------------------------------------------*/ +/*-------------------------------------------------------------------------*/ +/** + @brief Compute the hash key for a string. + @param key Character string to use for key. + @return 1 unsigned int on at least 32 bits. + + This hash function has been taken from an Article in Dr Dobbs Journal. + This is normally a collision-free function, distributing keys evenly. + The key is stored anyway in the struct so that collision can be avoided + by comparing the key itself in last resort. + */ +/*--------------------------------------------------------------------------*/ +unsigned dictionary_hash(const char * key) +{ + int len ; + unsigned hash ; + int i ; + + len = strlen(key); + for (hash=0, i=0 ; i<len ; i++) { + hash += (unsigned)key[i] ; + hash += (hash<<10); + hash ^= (hash>>6) ; + } + hash += (hash <<3); + hash ^= (hash >>11); + hash += (hash <<15); + return hash ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Create a new dictionary object. + @param size Optional initial size of the dictionary. + @return 1 newly allocated dictionary objet. + + This function allocates a new dictionary object of given size and returns + it. If you do not know in advance (roughly) the number of entries in the + dictionary, give size=0. + */ +/*--------------------------------------------------------------------------*/ +dictionary * dictionary_new(int size) +{ + dictionary * d ; + + /* If no size was specified, allocate space for DICTMINSZ */ + if (size<DICTMINSZ) size=DICTMINSZ ; + + if (!(d = (dictionary *)calloc(1, sizeof(dictionary)))) { + return NULL; + } + d->size = size ; + d->val = (char **)calloc(size, sizeof(char*)); + d->key = (char **)calloc(size, sizeof(char*)); + d->hash = (unsigned int *)calloc(size, sizeof(unsigned)); + return d ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete a dictionary object + @param d dictionary object to deallocate. + @return void + + Deallocate a dictionary object and all memory associated to it. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_del(dictionary * d) +{ + int i ; + + if (d==NULL) return ; + for (i=0 ; i<d->size ; i++) { + if (d->key[i]!=NULL) + free(d->key[i]); + if (d->val[i]!=NULL) + free(d->val[i]); + } + free(d->val); + free(d->key); + free(d->hash); + free(d); + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get a value from a dictionary. + @param d dictionary object to search. + @param key Key to look for in the dictionary. + @param def Default value to return if key not found. + @return 1 pointer to internally allocated character string. + + This function locates a key in a dictionary and returns a pointer to its + value, or the passed 'def' pointer if no such key can be found in + dictionary. The returned character pointer points to data internal to the + dictionary object, you should not try to free it or modify it. + */ +/*--------------------------------------------------------------------------*/ +char * dictionary_get(dictionary * d, const char * key, char * def) +{ + unsigned hash ; + int i ; + + hash = dictionary_hash(key); + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + /* Compare hash */ + if (hash==d->hash[i]) { + /* Compare string, to avoid hash collisions */ + if (!strcmp(key, d->key[i])) { + return d->val[i] ; + } + } + } + return def ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Set a value in a dictionary. + @param d dictionary object to modify. + @param key Key to modify or add. + @param val Value to add. + @return int 0 if Ok, anything else otherwise + + If the given key is found in the dictionary, the associated value is + replaced by the provided one. If the key cannot be found in the + dictionary, it is added to it. + + It is Ok to provide a NULL value for val, but NULL values for the dictionary + or the key are considered as errors: the function will return immediately + in such a case. + + Notice that if you dictionary_set a variable to NULL, a call to + dictionary_get will return a NULL value: the variable will be found, and + its value (NULL) is returned. In other words, setting the variable + content to NULL is equivalent to deleting the variable from the + dictionary. It is not possible (in this implementation) to have a key in + the dictionary without value. + + This function returns non-zero in case of failure. + */ +/*--------------------------------------------------------------------------*/ +int dictionary_set(dictionary * d, const char * key, const char * val) +{ + int i ; + unsigned hash ; + + if (d==NULL || key==NULL) return -1 ; + + /* Compute hash for this key */ + hash = dictionary_hash(key) ; + /* Find if value is already in dictionary */ + if (d->n>0) { + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + if (hash==d->hash[i]) { /* Same hash value */ + if (!strcmp(key, d->key[i])) { /* Same key */ + /* Found a value: modify and return */ + if (d->val[i]!=NULL) + free(d->val[i]); + d->val[i] = val ? xstrdup(val) : NULL ; + /* Value has been modified: return */ + return 0 ; + } + } + } + } + /* Add a new value */ + /* See if dictionary needs to grow */ + if (d->n==d->size) { + + /* Reached maximum size: reallocate dictionary */ + d->val = (char **)mem_double(d->val, d->size * sizeof(char*)) ; + d->key = (char **)mem_double(d->key, d->size * sizeof(char*)) ; + d->hash = (unsigned int *)mem_double(d->hash, d->size * sizeof(unsigned)) ; + if ((d->val==NULL) || (d->key==NULL) || (d->hash==NULL)) { + /* Cannot grow dictionary */ + return -1 ; + } + /* Double size */ + d->size *= 2 ; + } + + /* Insert key in the first empty slot. Start at d->n and wrap at + d->size. Because d->n < d->size this will necessarily + terminate. */ + for (i=d->n ; d->key[i] ; ) { + if(++i == d->size) i = 0; + } + /* Copy key */ + d->key[i] = xstrdup(key); + d->val[i] = val ? xstrdup(val) : NULL ; + d->hash[i] = hash; + d->n ++ ; + return 0 ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete a key in a dictionary + @param d dictionary object to modify. + @param key Key to remove. + @return void + + This function deletes a key in a dictionary. Nothing is done if the + key cannot be found. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_unset(dictionary * d, const char * key) +{ + unsigned hash ; + int i ; + + if (key == NULL) { + return; + } + + hash = dictionary_hash(key); + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + /* Compare hash */ + if (hash==d->hash[i]) { + /* Compare string, to avoid hash collisions */ + if (!strcmp(key, d->key[i])) { + /* Found key */ + break ; + } + } + } + if (i>=d->size) + /* Key not found */ + return ; + + free(d->key[i]); + d->key[i] = NULL ; + if (d->val[i]!=NULL) { + free(d->val[i]); + d->val[i] = NULL ; + } + d->hash[i] = 0 ; + d->n -- ; + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Dump a dictionary to an opened file pointer. + @param d Dictionary to dump + @param f Opened file pointer. + @return void + + Dumps a dictionary onto an opened file pointer. Key pairs are printed out + as @c [Key]=[Value], one per line. It is Ok to provide stdout or stderr as + output file pointers. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_dump(dictionary * d, FILE * out) +{ + int i ; + + if (d==NULL || out==NULL) return ; + if (d->n<1) { + fprintf(out, "empty dictionary\n"); + return ; + } + for (i=0 ; i<d->size ; i++) { + if (d->key[i]) { + fprintf(out, "%20s\t[%s]\n", + d->key[i], + d->val[i] ? d->val[i] : "UNDEF"); + } + } + return ; +} + + +/* Test code */ +#ifdef TESTDIC +#define NVALS 20000 +int main(int argc, char *argv[]) +{ + dictionary * d ; + char * val ; + int i ; + char cval[90] ; + + /* Allocate dictionary */ + printf("allocating...\n"); + d = dictionary_new(0); + + /* Set values in dictionary */ + printf("setting %d values...\n", NVALS); + for (i=0 ; i<NVALS ; i++) { + sprintf(cval, "%04d", i); + dictionary_set(d, cval, "salut"); + } + printf("getting %d values...\n", NVALS); + for (i=0 ; i<NVALS ; i++) { + sprintf(cval, "%04d", i); + val = dictionary_get(d, cval, DICT_INVALID_KEY); + if (val==DICT_INVALID_KEY) { + printf("cannot get value for key [%s]\n", cval); + } + } + printf("unsetting %d values...\n", NVALS); + for (i=0 ; i<NVALS ; i++) { + sprintf(cval, "%04d", i); + dictionary_unset(d, cval); + } + if (d->n != 0) { + printf("error deleting values\n"); + } + printf("deallocating...\n"); + dictionary_del(d); + return 0 ; +} +#endif +/* vim: set ts=4 et sw=4 tw=75 */ diff --git a/program/converterd/cp_dictionary.h b/program/converterd/cp_dictionary.h new file mode 100644 index 0000000..70fd42c --- /dev/null +++ b/program/converterd/cp_dictionary.h @@ -0,0 +1,165 @@ + +/*-------------------------------------------------------------------------*/ +/** + @file cp_dictionary.h + @author N. Devillard + @brief Implements a dictionary for string variables. + + This module implements a simple dictionary object, i.e. a list + of string/string associations. This object is useful to store e.g. + informations retrieved from a configuration file (ini files). +*/ +/*--------------------------------------------------------------------------*/ + +#ifndef _CP_DICTIONARY_H_ +#define _CP_DICTIONARY_H_ + +/*--------------------------------------------------------------------------- + Includes + ---------------------------------------------------------------------------*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +/*--------------------------------------------------------------------------- + New types + ---------------------------------------------------------------------------*/ + + +/*-------------------------------------------------------------------------*/ +/** + @brief Dictionary object + + This object contains a list of string/string associations. Each + association is identified by a unique string key. Looking up values + in the dictionary is speeded up by the use of a (hopefully collision-free) + hash function. + */ +/*-------------------------------------------------------------------------*/ +typedef struct _dictionary_ { + int n ; /** Number of entries in dictionary */ + int size ; /** Storage size */ + char ** val ; /** List of string values */ + char ** key ; /** List of string keys */ + unsigned * hash ; /** List of hash values for keys */ +} dictionary ; + + +/*--------------------------------------------------------------------------- + Function prototypes + ---------------------------------------------------------------------------*/ + +/*-------------------------------------------------------------------------*/ +/** + @brief Compute the hash key for a string. + @param key Character string to use for key. + @return 1 unsigned int on at least 32 bits. + + This hash function has been taken from an Article in Dr Dobbs Journal. + This is normally a collision-free function, distributing keys evenly. + The key is stored anyway in the struct so that collision can be avoided + by comparing the key itself in last resort. + */ +/*--------------------------------------------------------------------------*/ +unsigned dictionary_hash(const char * key); + +/*-------------------------------------------------------------------------*/ +/** + @brief Create a new dictionary object. + @param size Optional initial size of the dictionary. + @return 1 newly allocated dictionary objet. + + This function allocates a new dictionary object of given size and returns + it. If you do not know in advance (roughly) the number of entries in the + dictionary, give size=0. + */ +/*--------------------------------------------------------------------------*/ +dictionary * dictionary_new(int size); + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete a dictionary object + @param d dictionary object to deallocate. + @return void + + Deallocate a dictionary object and all memory associated to it. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_del(dictionary * vd); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get a value from a dictionary. + @param d dictionary object to search. + @param key Key to look for in the dictionary. + @param def Default value to return if key not found. + @return 1 pointer to internally allocated character string. + + This function locates a key in a dictionary and returns a pointer to its + value, or the passed 'def' pointer if no such key can be found in + dictionary. The returned character pointer points to data internal to the + dictionary object, you should not try to free it or modify it. + */ +/*--------------------------------------------------------------------------*/ +char * dictionary_get(dictionary * d, const char * key, char * def); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Set a value in a dictionary. + @param d dictionary object to modify. + @param key Key to modify or add. + @param val Value to add. + @return int 0 if Ok, anything else otherwise + + If the given key is found in the dictionary, the associated value is + replaced by the provided one. If the key cannot be found in the + dictionary, it is added to it. + + It is Ok to provide a NULL value for val, but NULL values for the dictionary + or the key are considered as errors: the function will return immediately + in such a case. + + Notice that if you dictionary_set a variable to NULL, a call to + dictionary_get will return a NULL value: the variable will be found, and + its value (NULL) is returned. In other words, setting the variable + content to NULL is equivalent to deleting the variable from the + dictionary. It is not possible (in this implementation) to have a key in + the dictionary without value. + + This function returns non-zero in case of failure. + */ +/*--------------------------------------------------------------------------*/ +int dictionary_set(dictionary * vd, const char * key, const char * val); + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete a key in a dictionary + @param d dictionary object to modify. + @param key Key to remove. + @return void + + This function deletes a key in a dictionary. Nothing is done if the + key cannot be found. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_unset(dictionary * d, const char * key); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Dump a dictionary to an opened file pointer. + @param d Dictionary to dump + @param f Opened file pointer. + @return void + + Dumps a dictionary onto an opened file pointer. Key pairs are printed out + as @c [Key]=[Value], one per line. It is Ok to provide stdout or stderr as + output file pointers. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_dump(dictionary * d, FILE * out); + +#endif diff --git a/program/converterd/cp_iniparser.c b/program/converterd/cp_iniparser.c new file mode 100644 index 0000000..b18cf84 --- /dev/null +++ b/program/converterd/cp_iniparser.c @@ -0,0 +1,807 @@ + +/*-------------------------------------------------------------------------*/ +/** + @file cp_iniparser.c + @author N. Devillard + @brief Parser for ini files. +*/ +/*--------------------------------------------------------------------------*/ +/*---------------------------- Includes ------------------------------------*/ +#include <ctype.h> +#include "cp_iniparser.h" + +/*---------------------------- Defines -------------------------------------*/ +#define ASCIILINESZ (1024) +#define INI_INVALID_KEY ((char*)-1) + +/*--------------------------------------------------------------------------- + Private to this module + ---------------------------------------------------------------------------*/ +/** + * This enum stores the status for each parsed line (internal use only). + */ +typedef enum _line_status_ { + LINE_UNPROCESSED, + LINE_ERROR, + LINE_EMPTY, + LINE_COMMENT, + LINE_SECTION, + LINE_VALUE +} line_status ; + +/*-------------------------------------------------------------------------*/ +/** + @brief Convert a string to lowercase. + @param s String to convert. + @return ptr to statically allocated string. + + This function returns a pointer to a statically allocated string + containing a lowercased version of the input string. Do not free + or modify the returned string! Since the returned string is statically + allocated, it will be modified at each function call (not re-entrant). + */ +/*--------------------------------------------------------------------------*/ +static char * strlwc(const char * s) +{ + static char l[ASCIILINESZ+1]; + int i ; + + if (s==NULL) return NULL ; + memset(l, 0, ASCIILINESZ+1); + i=0 ; + while (s[i] && i<ASCIILINESZ) { + l[i] = (char)tolower((int)s[i]); + i++ ; + } + l[ASCIILINESZ]=(char)0; + return l ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Remove blanks at the beginning and the end of a string. + @param s String to parse. + @return ptr to statically allocated string. + + This function returns a pointer to a statically allocated string, + which is identical to the input string, except that all blank + characters at the end and the beg. of the string have been removed. + Do not free or modify the returned string! Since the returned string + is statically allocated, it will be modified at each function call + (not re-entrant). + */ +/*--------------------------------------------------------------------------*/ +static char * strstrip(const char * s) +{ + static char l[ASCIILINESZ+1]; + char * last ; + + if (s==NULL) return NULL ; + + while (isspace((int)*s) && *s) s++; + memset(l, 0, ASCIILINESZ+1); + strcpy(l, s); + last = l + strlen(l); + while (last > l) { + if (!isspace((int)*(last-1))) + break ; + last -- ; + } + *last = (char)0; + return (char*)l ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get number of sections in a dictionary + @param d Dictionary to examine + @return int Number of sections found in dictionary + + This function returns the number of sections found in a dictionary. + The test to recognize sections is done on the string stored in the + dictionary: a section name is given as "section" whereas a key is + stored as "section:key", thus the test looks for entries that do not + contain a colon. + + This clearly fails in the case a section name contains a colon, but + this should simply be avoided. + + This function returns -1 in case of error. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getnsec(dictionary * d) +{ + int i ; + int nsec ; + + if (d==NULL) return -1 ; + nsec=0 ; + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + if (strchr(d->key[i], ':')==NULL) { + nsec ++ ; + } + } + return nsec ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get name for section n in a dictionary. + @param d Dictionary to examine + @param n Section number (from 0 to nsec-1). + @return Pointer to char string + + This function locates the n-th section in a dictionary and returns + its name as a pointer to a string statically allocated inside the + dictionary. Do not free or modify the returned string! + + This function returns NULL in case of error. + */ +/*--------------------------------------------------------------------------*/ +char * iniparser_getsecname(dictionary * d, int n) +{ + int i ; + int foundsec ; + + if (d==NULL || n<0) return NULL ; + foundsec=0 ; + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + if (strchr(d->key[i], ':')==NULL) { + foundsec++ ; + if (foundsec>n) + break ; + } + } + if (foundsec<=n) { + return NULL ; + } + return d->key[i] ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Dump a dictionary to an opened file pointer. + @param d Dictionary to dump. + @param f Opened file pointer to dump to. + @return void + + This function prints out the contents of a dictionary, one element by + line, onto the provided file pointer. It is OK to specify @c stderr + or @c stdout as output files. This function is meant for debugging + purposes mostly. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_dump(dictionary * d, FILE * f) +{ + int i ; + + if (d==NULL || f==NULL) return ; + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + if (d->val[i]!=NULL) { + fprintf(f, "[%s]=[%s]\n", d->key[i], d->val[i]); + } else { + fprintf(f, "[%s]=UNDEF\n", d->key[i]); + } + } + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Save a dictionary to a loadable ini file + @param d Dictionary to dump + @param f Opened file pointer to dump to + @return void + + This function dumps a given dictionary into a loadable ini file. + It is Ok to specify @c stderr or @c stdout as output files. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_dump_ini(dictionary * d, FILE * f) +{ + int i ; + int nsec ; + char * secname ; + + if (d==NULL || f==NULL) return ; + + nsec = iniparser_getnsec(d); + if (nsec<1) { + /* No section in file: dump all keys as they are */ + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + fprintf(f, "%s = %s\n", d->key[i], d->val[i]); + } + return ; + } + for (i=0 ; i<nsec ; i++) { + secname = iniparser_getsecname(d, i) ; + iniparser_dumpsection_ini(d, secname, f) ; + } + fprintf(f, "\n"); + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Save a dictionary section to a loadable ini file + @param d Dictionary to dump + @param s Section name of dictionary to dump + @param f Opened file pointer to dump to + @return void + + This function dumps a given section of a given dictionary into a loadable ini + file. It is Ok to specify @c stderr or @c stdout as output files. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f) +{ + int j ; + char keym[ASCIILINESZ+1]; + int seclen ; + + if (d==NULL || f==NULL) return ; + if (! iniparser_find_entry(d, s)) return ; + + seclen = (int)strlen(s); + fprintf(f, "\n[%s]\n", s); + sprintf(keym, "%s:", s); + for (j=0 ; j<d->size ; j++) { + if (d->key[j]==NULL) + continue ; + if (!strncmp(d->key[j], keym, seclen+1)) { + fprintf(f, + "%-30s = %s\n", + d->key[j]+seclen+1, + d->val[j] ? d->val[j] : ""); + } + } + fprintf(f, "\n"); + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the number of keys in a section of a dictionary. + @param d Dictionary to examine + @param s Section name of dictionary to examine + @return Number of keys in section + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getsecnkeys(dictionary * d, char * s) +{ + int seclen, nkeys ; + char keym[ASCIILINESZ+1]; + int j ; + + nkeys = 0; + + if (d==NULL) return nkeys; + if (! iniparser_find_entry(d, s)) return nkeys; + + seclen = (int)strlen(s); + sprintf(keym, "%s:", s); + + for (j=0 ; j<d->size ; j++) { + if (d->key[j]==NULL) + continue ; + if (!strncmp(d->key[j], keym, seclen+1)) + nkeys++; + } + + return nkeys; + +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the number of keys in a section of a dictionary. + @param d Dictionary to examine + @param s Section name of dictionary to examine + @return pointer to statically allocated character strings + + This function queries a dictionary and finds all keys in a given section. + Each pointer in the returned char pointer-to-pointer is pointing to + a string allocated in the dictionary; do not free or modify them. + + This function returns NULL in case of error. + */ +/*--------------------------------------------------------------------------*/ +char ** iniparser_getseckeys(dictionary * d, char * s) +{ + + char **keys; + + int i, j ; + char keym[ASCIILINESZ+1]; + int seclen, nkeys ; + + keys = NULL; + + if (d==NULL) return keys; + if (! iniparser_find_entry(d, s)) return keys; + + nkeys = iniparser_getsecnkeys(d, s); + + keys = (char**) malloc(nkeys*sizeof(char*)); + + seclen = (int)strlen(s); + sprintf(keym, "%s:", s); + + i = 0; + + for (j=0 ; j<d->size ; j++) { + if (d->key[j]==NULL) + continue ; + if (!strncmp(d->key[j], keym, seclen+1)) { + keys[i] = d->key[j]; + i++; + } + } + + return keys; + +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key + @param d Dictionary to search + @param key Key string to look for + @param def Default value to return if key not found. + @return pointer to statically allocated character string + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the pointer passed as 'def' is returned. + The returned char pointer is pointing to a string allocated in + the dictionary, do not free or modify it. + */ +/*--------------------------------------------------------------------------*/ +char * iniparser_getstring(dictionary * d, const char * key, char * def) +{ + char * lc_key ; + char * sval ; + + if (d==NULL || key==NULL) + return def ; + + lc_key = strlwc(key); + sval = dictionary_get(d, lc_key, def); + return sval ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to an int + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return integer + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + + Supported values for integers include the usual C notation + so decimal, octal (starting with 0) and hexadecimal (starting with 0x) + are supported. Examples: + + "42" -> 42 + "042" -> 34 (octal -> decimal) + "0x42" -> 66 (hexa -> decimal) + + Warning: the conversion may overflow in various ways. Conversion is + totally outsourced to strtol(), see the associated man page for overflow + handling. + + Credits: Thanks to A. Becker for suggesting strtol() + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getint(dictionary * d, const char * key, int notfound) +{ + char * str ; + + str = iniparser_getstring(d, key, INI_INVALID_KEY); + if (str==INI_INVALID_KEY) return notfound ; + return (int)strtol(str, NULL, 0); +} + +int iniparser_getlong(dictionary * d, const char * key, int notfound) +{ + char * str ; + + str = iniparser_getstring(d, key, INI_INVALID_KEY); + if (str==INI_INVALID_KEY) return notfound ; + return strtol(str, NULL, 0); +} +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to a double + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return double + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + */ +/*--------------------------------------------------------------------------*/ +double iniparser_getdouble(dictionary * d, const char * key, double notfound) +{ + char * str ; + + str = iniparser_getstring(d, key, INI_INVALID_KEY); + if (str==INI_INVALID_KEY) return notfound ; + return atof(str); +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to a boolean + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return integer + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + + A true boolean is found if one of the following is matched: + + - A string starting with 'y' + - A string starting with 'Y' + - A string starting with 't' + - A string starting with 'T' + - A string starting with '1' + + A false boolean is found if one of the following is matched: + + - A string starting with 'n' + - A string starting with 'N' + - A string starting with 'f' + - A string starting with 'F' + - A string starting with '0' + + The notfound value returned if no boolean is identified, does not + necessarily have to be 0 or 1. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getboolean(dictionary * d, const char * key, int notfound) +{ + char * c ; + int ret ; + + c = iniparser_getstring(d, key, INI_INVALID_KEY); + if (c==INI_INVALID_KEY) return notfound ; + if (c[0]=='y' || c[0]=='Y' || c[0]=='1' || c[0]=='t' || c[0]=='T') { + ret = 1 ; + } else if (c[0]=='n' || c[0]=='N' || c[0]=='0' || c[0]=='f' || c[0]=='F') { + ret = 0 ; + } else { + ret = notfound ; + } + return ret; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Finds out if a given entry exists in a dictionary + @param ini Dictionary to search + @param entry Name of the entry to look for + @return integer 1 if entry exists, 0 otherwise + + Finds out if a given entry exists in the dictionary. Since sections + are stored as keys with NULL associated values, this is the only way + of querying for the presence of sections in a dictionary. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_find_entry( + dictionary * ini, + const char * entry +) +{ + int found=0 ; + if (iniparser_getstring(ini, entry, INI_INVALID_KEY)!=INI_INVALID_KEY) { + found = 1 ; + } + return found ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Set an entry in a dictionary. + @param ini Dictionary to modify. + @param entry Entry to modify (entry name) + @param val New value to associate to the entry. + @return int 0 if Ok, -1 otherwise. + + If the given entry can be found in the dictionary, it is modified to + contain the provided value. If it cannot be found, -1 is returned. + It is Ok to set val to NULL. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_set(dictionary * ini, const char * entry, const char * val) +{ + return dictionary_set(ini, strlwc(entry), val) ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete an entry in a dictionary + @param ini Dictionary to modify + @param entry Entry to delete (entry name) + @return void + + If the given entry can be found, it is deleted from the dictionary. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_unset(dictionary * ini, const char * entry) +{ + dictionary_unset(ini, strlwc(entry)); +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Load a single line from an INI file + @param input_line Input line, may be concatenated multi-line input + @param section Output space to store section + @param key Output space to store key + @param value Output space to store value + @return line_status value + */ +/*--------------------------------------------------------------------------*/ +static line_status iniparser_line( + char * input_line, + char * section, + char * key, + char * value) +{ + line_status sta ; + char line[ASCIILINESZ+1]; + static char left_line[ASCIILINESZ+1]; + int len, offset ; + + strcpy(line, strstrip(input_line)); + len = (int)strlen(line); + + sta = LINE_UNPROCESSED ; + if (len<1) { + /* Empty line */ + sta = LINE_EMPTY ; + memset(input_line, 0, len); + } else if (line[0]=='#' || line[0]==';') { + /* Comment line */ + sta = LINE_COMMENT ; + memset(input_line, 0, len); + } else if (line[0]=='[') { + /* Section name */ + sscanf(line, "[%[^]]", section); + strcpy(section, strstrip(section)); + strcpy(section, strlwc(section)); + + /* Left configure will go to next time to parser */ + offset = strlen(section) + 2; + strcpy( left_line, strstrip(&(line[offset])) ); + strcpy( left_line, strstrip(left_line)); + + if( strlen(left_line) > 0) + { + strcpy(input_line, left_line); + strcat(input_line, "\n"); + } + else + { + memset(input_line, 0, len); + } + sta = LINE_SECTION ; + } else if (sscanf (line, "%[^=] = \"%[^\"]\"", key, value) == 2 + || sscanf (line, "%[^=] = '%[^\']'", key, value) == 2 + || sscanf (line, "%[^=] = %[^;#]", key, value) == 2) { + char *ptr = NULL; + + /* Usual key=value, with or without comments */ + strcpy(key, strstrip(key)); + strcpy(key, strlwc(key)); + strcpy(value, strstrip(value)); + /* + * sscanf cannot handle '' or "" as empty values + * this is done here + */ + if (!strncmp(value, "\"\"", 2) || (!strncmp(value, "''", 2)) ) { + value[0]=0 ; + } + + ptr = strchr(line, '='); + if('\''==*(ptr+1) || '\"'==*(ptr+1)) + { + offset = strlen(key)+strlen(value) + 1 + 2; /* Skip $key='$val' */ + } + else + { + offset = strlen(key)+strlen(value) + 1; /* Skip $key=$val */ + } + strcpy( left_line, strstrip(&(line[offset])) ); + + if( strlen(left_line) > 0) + { + strcpy(input_line, left_line); + strcat(input_line, "\n"); + } + else + { + memset(input_line, 0, len); + } + sta = LINE_VALUE ; + } else if (sscanf(line, "%[^=] = %[;#]", key, value)==2 + || sscanf(line, "%[^=] %[=]", key, value) == 2) { + /* + * Special cases: + * key= + * key=; + * key=# + */ + strcpy(key, strstrip(key)); + strcpy(key, strlwc(key)); + value[0]=0 ; + sta = LINE_VALUE ; + } else { + /* Generate syntax error */ + sta = LINE_ERROR ; + memset(input_line, 0, len); + } + return sta ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Parse an ini file and return an allocated dictionary object + @param ininame Name of the ini file to read. + @return Pointer to newly allocated dictionary + + This is the parser for ini files. This function is called, providing + the name of the file to be read. It returns a dictionary object that + should not be accessed directly, but through accessor functions + instead. + + The returned dictionary must be freed using iniparser_freedict(). + */ +/*--------------------------------------------------------------------------*/ +dictionary * iniparser_load(const char * ininame) +{ + FILE * in ; + + char line [ASCIILINESZ+1] ; + char section [ASCIILINESZ+1] ; + char key [ASCIILINESZ+1] ; + char tmp [ASCIILINESZ+1] ; + char val [ASCIILINESZ+1] ; + + int last=0 ; + int len ; + int lineno=0 ; + int errs=0; + + dictionary * dict ; + + if ((in=fopen(ininame, "r"))==NULL) { + fprintf(stderr, "iniparser: cannot open %s\n", ininame); + return NULL ; + } + + dict = dictionary_new(0) ; + if (!dict) { + fclose(in); + return NULL ; + } + + memset(line, 0, ASCIILINESZ); + memset(section, 0, ASCIILINESZ); + memset(key, 0, ASCIILINESZ); + memset(val, 0, ASCIILINESZ); + last=0 ; + + while (fgets(line+last, ASCIILINESZ-last, in)!=NULL) { + lineno++ ; +CONTINUE_PARSER: + len = (int)strlen(line)-1; + if (len==0) + continue; + /* Safety check against buffer overflows */ + if (line[len]!='\n') { + fprintf(stderr, + "iniparser: input line too long in %s (%d)\n", + ininame, + lineno); + dictionary_del(dict); + fclose(in); + return NULL ; + } + /* Get rid of \n and spaces at end of line */ + while ((len>=0) && + ((line[len]=='\n') || (isspace(line[len])))) { + line[len]=0 ; + len-- ; + } + /* Detect multi-line */ + if (line[len]=='\\') { + /* Multi-line value */ + last=len ; + continue ; + } else { + last=0 ; + } + + switch ( iniparser_line(line, section, key, val) ) { + case LINE_EMPTY: + case LINE_COMMENT: + break ; + + case LINE_SECTION: + errs = dictionary_set(dict, section, NULL); + break ; + + case LINE_VALUE: + sprintf(tmp, "%s:%s", section, key); + errs = dictionary_set(dict, tmp, val) ; + break ; + + case LINE_ERROR: + fprintf(stderr, "iniparser: syntax error in %s (%d):\n", + ininame, + lineno); + fprintf(stderr, "-> %s\n", line); + errs++ ; + break; + + default: + break ; + } + + if( strlen(line) > 0) + { + goto CONTINUE_PARSER; + } + + memset(line, 0, ASCIILINESZ); + last=0; + if (errs<0) { + fprintf(stderr, "iniparser: memory allocation failure\n"); + break ; + } + } + if (errs) { + dictionary_del(dict); + dict = NULL ; + } + fclose(in); + return dict ; +} + + +/*-------------------------------------------------------------------------*/ +/** + @brief Free all memory associated to an ini dictionary + @param d Dictionary to free + @return void + + Free all memory associated to an ini dictionary. + It is mandatory to call this function before the dictionary object + gets out of the current context. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_freedict(dictionary * d) +{ + dictionary_del(d); +} + +/* vim: set ts=4 et sw=4 tw=75 */ diff --git a/program/converterd/cp_iniparser.h b/program/converterd/cp_iniparser.h new file mode 100644 index 0000000..1e5de9c --- /dev/null +++ b/program/converterd/cp_iniparser.h @@ -0,0 +1,308 @@ + +/*-------------------------------------------------------------------------*/ +/** + @file cp_iniparser.h + @author N. Devillard + @brief Parser for ini files. +*/ +/*--------------------------------------------------------------------------*/ + +#ifndef _CP_INIPARSER_H_ +#define _CP_INIPARSER_H_ + +/*--------------------------------------------------------------------------- + Includes + ---------------------------------------------------------------------------*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +/* + * The following #include is necessary on many Unixes but not Linux. + * It is not needed for Windows platforms. + * Uncomment it if needed. + */ +/* #include <unistd.h> */ + +#include "cp_dictionary.h" + +/*-------------------------------------------------------------------------*/ +/** + @brief Get number of sections in a dictionary + @param d Dictionary to examine + @return int Number of sections found in dictionary + + This function returns the number of sections found in a dictionary. + The test to recognize sections is done on the string stored in the + dictionary: a section name is given as "section" whereas a key is + stored as "section:key", thus the test looks for entries that do not + contain a colon. + + This clearly fails in the case a section name contains a colon, but + this should simply be avoided. + + This function returns -1 in case of error. + */ +/*--------------------------------------------------------------------------*/ + +int iniparser_getnsec(dictionary * d); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Get name for section n in a dictionary. + @param d Dictionary to examine + @param n Section number (from 0 to nsec-1). + @return Pointer to char string + + This function locates the n-th section in a dictionary and returns + its name as a pointer to a string statically allocated inside the + dictionary. Do not free or modify the returned string! + + This function returns NULL in case of error. + */ +/*--------------------------------------------------------------------------*/ + +char * iniparser_getsecname(dictionary * d, int n); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Save a dictionary to a loadable ini file + @param d Dictionary to dump + @param f Opened file pointer to dump to + @return void + + This function dumps a given dictionary into a loadable ini file. + It is Ok to specify @c stderr or @c stdout as output files. + */ +/*--------------------------------------------------------------------------*/ + +void iniparser_dump_ini(dictionary * d, FILE * f); + +/*-------------------------------------------------------------------------*/ +/** + @brief Save a dictionary section to a loadable ini file + @param d Dictionary to dump + @param s Section name of dictionary to dump + @param f Opened file pointer to dump to + @return void + + This function dumps a given section of a given dictionary into a loadable ini + file. It is Ok to specify @c stderr or @c stdout as output files. + */ +/*--------------------------------------------------------------------------*/ + +void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f); + +/*-------------------------------------------------------------------------*/ +/** + @brief Dump a dictionary to an opened file pointer. + @param d Dictionary to dump. + @param f Opened file pointer to dump to. + @return void + + This function prints out the contents of a dictionary, one element by + line, onto the provided file pointer. It is OK to specify @c stderr + or @c stdout as output files. This function is meant for debugging + purposes mostly. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_dump(dictionary * d, FILE * f); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the number of keys in a section of a dictionary. + @param d Dictionary to examine + @param s Section name of dictionary to examine + @return Number of keys in section + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getsecnkeys(dictionary * d, char * s); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the number of keys in a section of a dictionary. + @param d Dictionary to examine + @param s Section name of dictionary to examine + @return pointer to statically allocated character strings + + This function queries a dictionary and finds all keys in a given section. + Each pointer in the returned char pointer-to-pointer is pointing to + a string allocated in the dictionary; do not free or modify them. + + This function returns NULL in case of error. + */ +/*--------------------------------------------------------------------------*/ +char ** iniparser_getseckeys(dictionary * d, char * s); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key + @param d Dictionary to search + @param key Key string to look for + @param def Default value to return if key not found. + @return pointer to statically allocated character string + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the pointer passed as 'def' is returned. + The returned char pointer is pointing to a string allocated in + the dictionary, do not free or modify it. + */ +/*--------------------------------------------------------------------------*/ +char * iniparser_getstring(dictionary * d, const char * key, char * def); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to an int + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return integer + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + + Supported values for integers include the usual C notation + so decimal, octal (starting with 0) and hexadecimal (starting with 0x) + are supported. Examples: + + - "42" -> 42 + - "042" -> 34 (octal -> decimal) + - "0x42" -> 66 (hexa -> decimal) + + Warning: the conversion may overflow in various ways. Conversion is + totally outsourced to strtol(), see the associated man page for overflow + handling. + + Credits: Thanks to A. Becker for suggesting strtol() + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getint(dictionary * d, const char * key, int notfound); +int iniparser_getlong(dictionary * d, const char * key, int notfound); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to a double + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return double + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + */ +/*--------------------------------------------------------------------------*/ +double iniparser_getdouble(dictionary * d, const char * key, double notfound); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to a boolean + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return integer + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + + A true boolean is found if one of the following is matched: + + - A string starting with 'y' + - A string starting with 'Y' + - A string starting with 't' + - A string starting with 'T' + - A string starting with '1' + + A false boolean is found if one of the following is matched: + + - A string starting with 'n' + - A string starting with 'N' + - A string starting with 'f' + - A string starting with 'F' + - A string starting with '0' + + The notfound value returned if no boolean is identified, does not + necessarily have to be 0 or 1. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getboolean(dictionary * d, const char * key, int notfound); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Set an entry in a dictionary. + @param ini Dictionary to modify. + @param entry Entry to modify (entry name) + @param val New value to associate to the entry. + @return int 0 if Ok, -1 otherwise. + + If the given entry can be found in the dictionary, it is modified to + contain the provided value. If it cannot be found, -1 is returned. + It is Ok to set val to NULL. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_set(dictionary * ini, const char * entry, const char * val); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete an entry in a dictionary + @param ini Dictionary to modify + @param entry Entry to delete (entry name) + @return void + + If the given entry can be found, it is deleted from the dictionary. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_unset(dictionary * ini, const char * entry); + +/*-------------------------------------------------------------------------*/ +/** + @brief Finds out if a given entry exists in a dictionary + @param ini Dictionary to search + @param entry Name of the entry to look for + @return integer 1 if entry exists, 0 otherwise + + Finds out if a given entry exists in the dictionary. Since sections + are stored as keys with NULL associated values, this is the only way + of querying for the presence of sections in a dictionary. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_find_entry(dictionary * ini, const char * entry) ; + +/*-------------------------------------------------------------------------*/ +/** + @brief Parse an ini file and return an allocated dictionary object + @param ininame Name of the ini file to read. + @return Pointer to newly allocated dictionary + + This is the parser for ini files. This function is called, providing + the name of the file to be read. It returns a dictionary object that + should not be accessed directly, but through accessor functions + instead. + + The returned dictionary must be freed using iniparser_freedict(). + */ +/*--------------------------------------------------------------------------*/ +dictionary * iniparser_load(const char * ininame); + +/*-------------------------------------------------------------------------*/ +/** + @brief Free all memory associated to an ini dictionary + @param d Dictionary to free + @return void + + Free all memory associated to an ini dictionary. + It is mandatory to call this function before the dictionary object + gets out of the current context. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_freedict(dictionary * d); + +#endif diff --git a/program/converterd/cp_logger.c b/program/converterd/cp_logger.c new file mode 100644 index 0000000..efb04e5 --- /dev/null +++ b/program/converterd/cp_logger.c @@ -0,0 +1,433 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_log.c + * Description: This file is the linux infrastructural logger system library + * + * Version: 1.0.0(08/08/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "08/08/2012 04:24:01 PM" + * + ********************************************************************************/ + +#include "cp_logger.h" +//#include "cp_common.h" + +#define PRECISE_TIME_FACTOR 1000 + +static unsigned long log_rollback_size = LOG_ROLLBACK_NONE; + +static cp_logger *logger = NULL; + +char *log_str[LOG_LEVEL_MAX + 1] = { "", "F", "E", "W", "N", "D", "I", "T", "M" }; + +static char *cp_time_format = DEFAULT_TIME_FORMAT; + +void cp_log_set_time_format(char *time_format) +{ + cp_time_format = time_format; +} + +static void cp_log_default_signal_handler(int sig) +{ + if(!logger) + return ; + + if (sig == SIGHUP) + { + signal(SIGHUP, cp_log_default_signal_handler); + log_fatal("SIGHUP received - reopenning log file [%s]", logger->file); + cp_log_reopen(); + } +} + +static void log_banner(char *prefix) +{ + if(!logger) + return ; + + fprintf(logger->fp, "%s log \"%s\" on level [%s] size [%lu] KiB, log system version %s\n", + prefix, logger->file, log_str[logger->level], log_rollback_size / 1024, LOG_VERSION_STR); +#ifdef LOG_FILE_LINE + fprintf(logger->fp, " [Date] [Time] [Level] [PID/TID] [File/Line] [Content]\n"); +#else + fprintf(logger->fp, " [Date] [Time] [Level] [PID/TID] [Content]\n"); +#endif + fprintf(logger->fp, "-------------------------------------------------------------\n"); +} + +static void check_and_rollback(void) +{ + if(!logger) + return ; + + if (log_rollback_size != LOG_ROLLBACK_NONE) + { + long _curOffset = ftell(logger->fp); + + if ((_curOffset != -1) && (_curOffset >= log_rollback_size)) + { + char cmd[512]; + + snprintf(cmd, sizeof(cmd), "cp -f %s %s.roll", logger->file, logger->file); + system(cmd); + + if (-1 == fseek(logger->fp, 0L, SEEK_SET)) + fprintf(logger->fp, "log rollback fseek failed \n"); + + rewind(logger->fp); + + truncate(logger->file, 0); + log_banner("Already rollback"); + } + } +} + +cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size) +{ + if(NULL == log) + { + logger = malloc(sizeof(cp_logger)); + memset(logger, 0, sizeof(cp_logger)); + logger->flag |= CP_LOGGER_MALLOC; + } + else + { + logger = log; + logger->flag |= CP_LOGGER_ARGUMENT; + } + + if(NULL == logger) + { + return NULL; + } + + strncpy(logger->file, filename, FILENAME_LEN); + logger->level = level; + logger->size = log_size; + + return logger; +} + +int cp_log_open(void) +{ + struct sigaction act; + char *filemode; + + if(!logger) + { + return -1; + } + + log_rollback_size = logger->size <= 0 ? LOG_ROLLBACK_NONE : logger->size*1024; /* Unit KiB */ + + if ('\0' == logger->file) + return -1; + + if (!strcmp(logger->file, DBG_LOG_FILE)) + { + logger->fp = stderr; + log_rollback_size = LOG_ROLLBACK_NONE; + logger->flag |= CP_LOGGER_CONSOLE; + goto OUT; + } + + filemode = (log_rollback_size==LOG_ROLLBACK_NONE) ? "a+" : "w+"; + + logger->fp = fopen(logger->file, filemode); + if (NULL == logger->fp) + { + fprintf(stderr, "Open log file \"%s\" in %s failure\n", logger->file, filemode); + return -2; + } + + act.sa_handler = cp_log_default_signal_handler; + sigemptyset(&act.sa_mask); + act.sa_flags = 0; + sigaction(SIGHUP, &act, NULL); + + OUT: + log_banner("Initialize"); + + return 0; +} + +void cp_log_close(void) +{ + if (!logger || !logger->fp ) + return; + + log_banner("\nTerminate"); + cp_log_raw("\n\n\n\n"); + + fflush(logger->fp); + + fclose(logger->fp); + logger->fp = NULL; + + return ; +} + +int cp_log_reopen(void) +{ + int rc = 0; + char *filemode; + + if( !logger ) + return -1; + + log_rollback_size = logger->size <= 0 ? LOG_ROLLBACK_NONE : logger->size*1024; /* Unit KiB */ + + if (logger->flag & CP_LOGGER_CONSOLE ) + { + fflush(logger->fp); + logger->fp = stderr; + return 0; + } + + if (logger->fp) + { + cp_log_close(); + filemode = log_rollback_size==LOG_ROLLBACK_NONE ? "a+" : "w+"; + logger->fp = fopen(logger->file, filemode); + + if (logger->fp == NULL) + rc = -2; + } + else + { + rc = -3; + } + + if (!rc) + { + log_banner("\nReopen"); + } + return rc; +} + +void cp_log_term(void) +{ + if(!logger) + return ; + + cp_log_close(); + + if (logger->flag & CP_LOGGER_MALLOC ) + { + free(logger); + } + logger = NULL; +} + +void cp_log_raw(const char *fmt, ...) +{ + va_list argp; + + if (!logger || !logger->fp) + return; + + check_and_rollback(); + + va_start(argp, fmt); + vfprintf(logger->fp, fmt, argp); + va_end(argp); +} + +static void cp_printout(char *level, char *fmt, va_list argp) +{ + char buf[MAX_LOG_MESSAGE_LEN]; + struct tm *local; + struct timeval now; + char timestr[256]; + + if(!logger) + return ; + + pthread_t tid; + + check_and_rollback(); + +#ifdef MULTHREADS + tid = pthread_self(); +#else + tid = getpid(); +#endif + + gettimeofday(&now, NULL); + local = localtime(&now.tv_sec); + + strftime(timestr, 256, cp_time_format, local); + vsnprintf(buf, MAX_LOG_MESSAGE_LEN, fmt, argp); + +#ifdef DUMPLICATE_OUTPUT + printf("%s.%03ld [%s] [%06lu]: %s", + timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, buf); +#endif + + if (logger->fp) + fprintf(logger->fp, "%s.%03ld [%s] [%06lu]: %s", timestr, now.tv_usec / PRECISE_TIME_FACTOR, + level, tid, buf); + + if (logger->fp) + fflush(logger->fp); +} + +static void cp_printout_line(char *level, char *fmt, char *file, int line, va_list argp) +{ + char buf[MAX_LOG_MESSAGE_LEN]; + struct tm *local; + struct timeval now; + char timestr[256]; + + if(!logger) + return ; + + pthread_t tid; + + check_and_rollback(); + +#ifdef MULTHREADS + tid = pthread_self(); +#else + tid = getpid(); +#endif + + gettimeofday(&now, NULL); + local = localtime(&now.tv_sec); + + strftime(timestr, 256, cp_time_format, local); + vsnprintf(buf, MAX_LOG_MESSAGE_LEN, fmt, argp); + +#ifdef DUMPLICATE_OUTPUT + printf("%s.%03ld [%s] [%06lu] (%s [%04d]) : %s", + timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, file, line, buf); +#endif + + if (logger->fp) + fprintf(logger->fp, "%s.%03ld [%s] [%06lu] (%s [%04d]) : %s", + timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, file, line, buf); + + if (logger->fp) + fflush(logger->fp); +} + +void cp_log_str(int level, const char *msg) +{ + if (!logger || level>logger->level) + return; + + check_and_rollback(); + + if (logger->fp) + fwrite(msg, 1, strlen(msg), logger->fp); + + if(logger->fp) + fflush(logger->fp); +} + +void cp_log(int level, char *fmt, ...) +{ + va_list argp; + + if (!logger || level>logger->level) + return; + + va_start(argp, fmt); + cp_printout(log_str[level], fmt, argp); + va_end(argp); +} + +void cp_log_line(int level, char *file, int line, char *fmt, ...) +{ + va_list argp; + + if (!logger || level>logger->level) + return; + + va_start(argp, fmt); + cp_printout_line(log_str[level], fmt, file, line, argp); + + va_end(argp); +} + +#define LINELEN 81 +#define CHARS_PER_LINE 16 +static char *print_char = + " " + " " + " !\"#$%&'()*+,-./" + "0123456789:;<=>?" + "@ABCDEFGHIJKLMNO" + "PQRSTUVWXYZ[\\]^_" + "`abcdefghijklmno" + "pqrstuvwxyz{|}~ " + " " + " " + " ???????????????" + "????????????????" + "????????????????" + "????????????????" + "????????????????" + "????????????????"; + +void cp_log_dump(int level, char *buf, int len) +{ + int rc; + int idx; + char prn[LINELEN]; + char lit[CHARS_PER_LINE + 2]; + char hc[4]; + short line_done = 1; + + if (!logger || level>logger->level) + return; + + rc = len; + idx = 0; + lit[CHARS_PER_LINE] = '\0'; + + while (rc > 0) + { + if (line_done) + snprintf(prn, LINELEN, "%08X: ", idx); + + do + { + unsigned char c = buf[idx]; + snprintf(hc, 4, "%02X ", c); + strncat(prn, hc, LINELEN); + + lit[idx % CHARS_PER_LINE] = print_char[c]; + } + while (--rc > 0 && (++idx % CHARS_PER_LINE != 0)); + + line_done = (idx % CHARS_PER_LINE) == 0; + if (line_done) + { +#ifdef DUMPLICATE_OUTPUT + printf("%s %s\n", prn, lit); +#endif + if (logger->fp) + fprintf(logger->fp, "%s %s\n", prn, lit); + } + } + + if (!line_done) + { + int ldx = idx % CHARS_PER_LINE; + lit[ldx++] = print_char[(int)buf[idx]]; + lit[ldx] = '\0'; + + while ((++idx % CHARS_PER_LINE) != 0) + strncat(prn, " ", LINELEN); + +#ifdef DUMPLICATE_OUTPUT + printf("%s %s\n", prn, lit); +#endif + if (logger->fp) + fprintf(logger->fp, "%s %s\n", prn, lit); + + } +} diff --git a/program/converterd/cp_logger.h b/program/converterd/cp_logger.h new file mode 100644 index 0000000..7548514 --- /dev/null +++ b/program/converterd/cp_logger.h @@ -0,0 +1,111 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_logger.h + * Description: This file is the linux infrastructural logger system library + * + * Version: 1.0.0(08/08/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "08/08/2012 05:16:56 PM" + * + ********************************************************************************/ + +#ifndef __CP_LOG_H +#define __CP_LOG_H + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <signal.h> +#include <time.h> +#include <errno.h> + +#include <pthread.h> +#include <sys/types.h> +#include <sys/time.h> + +#define LOG_VERSION_STR "1.0.0" + +#ifndef FILENAME_LEN +#define FILENAME_LEN 64 +#endif + +#define DEFAULT_LOGFILE "cp_logger.log" +#define DBG_LOG_FILE "console" /* Debug mode log file is console */ + +#define LOG_ROLLBACK_SIZE 512 /* Default rollback log size */ +#define LOG_ROLLBACK_NONE 0 /* Set rollback size to 0 will not rollback */ + +#define DEFAULT_TIME_FORMAT "%Y-%m-%d %H:%M:%S" +#define MAX_LOG_MESSAGE_LEN 0x1000 + +//#define DUMPLICATE_OUTPUT /* Log to file and printf on console */ +#define LOG_FILE_LINE /* Log the file and line */ + +enum +{ + LOG_LEVEL_DISB = 0, /* Disable "Debug" */ + LOG_LEVEL_FATAL, /* Debug Level "Fatal" */ + LOG_LEVEL_ERROR, /* Debug Level "ERROR" */ + LOG_LEVEL_WARN, /* Debug Level "warnning" */ + LOG_LEVEL_NRML, /* Debug Level "Normal" */ + LOG_LEVEL_DEBUG, /* Debug Level "Debug" */ + LOG_LEVEL_INFO, /* Debug Level "Information" */ + LOG_LEVEL_TRACE, /* Debug Level "Trace" */ + LOG_LEVEL_MAX, +}; + +#define CP_LOGGER_MALLOC 1<<0 +#define CP_LOGGER_ARGUMENT 0<<0 + +#define CP_LOGGER_CONSOLE 1<<1 +#define CP_LOGGER_FILE 0<<1 + +#define CP_LOGGER_LEVEL_OPT 1<<2 /* The log level is sepcified by the command option */ +typedef struct _cp_logger +{ + unsigned char flag; /* This logger pointer is malloc() or passed by argument */ + char file[FILENAME_LEN]; + int level; + int size; + + FILE *fp; +} cp_logger; + +extern char *log_str[]; + +extern cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size); +extern int cp_log_open(void); +extern void cp_log_set_time_format(char *time_format); +extern int cp_log_reopen(void); +extern void cp_log_term(void); +extern void cp_log_raw(const char *fmt, ...); +extern void cp_log(int level, char *fmt, ...); +extern void cp_log_line(int level, char *file, int line, char *fmt, ...); +extern void cp_log_str(int level, const char *msg); + +extern void cp_log_dump(int level, char *buf, int len); + +#ifdef LOG_FILE_LINE +#define log_trace(fmt, ...) cp_log_line(LOG_LEVEL_TRACE, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_info(fmt, ...) cp_log_line(LOG_LEVEL_INFO, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_dbg(fmt, ...) cp_log_line(LOG_LEVEL_DEBUG, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_nrml(fmt, ...) cp_log_line(LOG_LEVEL_NRML, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_warn(fmt, ...) cp_log_line(LOG_LEVEL_WARN, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_err(fmt, ...) cp_log_line(LOG_LEVEL_ERROR, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_fatal(fmt, ...) cp_log_line(LOG_LEVEL_FATAL, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#else +#define log_trace(fmt, ...) cp_log(LOG_LEVEL_TRACE, fmt, ##__VA_ARGS__) +#define log_info(fmt, ...) cp_log(LOG_LEVEL_INFO, fmt, ##__VA_ARGS__) +#define log_dbg(fmt, ...) cp_log(LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__) +#define log_nrml(fmt, ...) cp_log(LOG_LEVEL_NRML, fmt, ##__VA_ARGS__) +#define log_warn(fmt, ...) cp_log(LOG_LEVEL_WARN, fmt, ##__VA_ARGS__) +#define log_err(fmt, ...) cp_log(LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__) +#define log_fatal(fmt, ...) cp_log(LOG_LEVEL_FATAL, fmt, ##__VA_ARGS__) +#endif + + +#endif /* __CP_LOG_H */ diff --git a/program/converterd/cp_proc.c b/program/converterd/cp_proc.c new file mode 100644 index 0000000..652a328 --- /dev/null +++ b/program/converterd/cp_proc.c @@ -0,0 +1,341 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_proc.c + * Description: This file is the process API + * + * Version: 1.0.0(11/06/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/06/2012 09:19:02 PM" + * + ********************************************************************************/ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <libgen.h> +#include <fcntl.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <pthread.h> + +#include "cp_proc.h" +#include "cp_logger.h" + +CP_PROC_SIG g_cp_signal={0}; + +void cp_proc_sighandler(int sig) +{ + switch(sig) + { + case SIGINT: + log_warn("SIGINT - stopping\n"); + g_cp_signal.stop = 1; + break; + + case SIGTERM: + log_warn("SIGTERM - stopping\n"); + g_cp_signal.stop = 1; + break; + case SIGSEGV: + log_warn("SIGSEGV - stopping\n"); +#if 0 + if(g_cp_signal.stop) + exit(0); + + g_cp_signal.stop = 1; +#endif + break; + + case SIGPIPE: + log_warn("SIGPIPE - warnning\n"); + break; + + default: + break; + } +} + + +void cp_install_proc_signal(void) +{ + struct sigaction sigact, sigign; + + log_nrml("Install default signal handler.\n"); + + /* Initialize the catch signal structure. */ + sigemptyset(&sigact.sa_mask); + sigact.sa_flags = 0; + sigact.sa_handler = cp_proc_sighandler; + + /* Setup the ignore signal. */ + sigemptyset(&sigign.sa_mask); + sigign.sa_flags = 0; + sigign.sa_handler = SIG_IGN; + + sigaction(SIGTERM, &sigact, 0); /* catch terminate signal "kill" command */ + sigaction(SIGINT, &sigact, 0); /* catch interrupt signal CTRL+C */ + //sigaction(SIGSEGV, &sigact, 0); /* catch segmentation faults */ + sigaction(SIGPIPE, &sigact, 0); /* catch broken pipe */ +#if 0 + sigaction(SIGCHLD, &sigact, 0); /* catch child process return */ + sigaction(SIGUSR2, &sigact, 0); /* catch USER signal */ +#endif +} + + +/* **************************************************************************** + * FunctionName: daemonize + * Description : Set the programe runs as daemon in background + * Inputs : nodir: DON'T change the work directory to / : 1:NoChange 0:Change + * noclose: close the opened file descrtipion or not 1:Noclose 0:Close + * Output : NONE + * Return : NONE + * *****************************************************************************/ +void daemonize(int nochdir, int noclose) +{ + int retval, fd; + int i; + + /* already a daemon */ + if (1 == getppid()) + return; + + /* fork error */ + retval = fork(); + if (retval < 0) exit(1); + + /* parent process exit */ + if (retval > 0) + exit(0); + + /* obtain a new process session group */ + setsid(); + + if (!noclose) + { + /* close all descriptors */ + for (i = getdtablesize(); i >= 0; --i) + { + //if (i != g_logPtr->fd) + close(i); + } + + /* Redirect Standard input [0] to /dev/null */ + fd = open("/dev/null", O_RDWR); + + /* Redirect Standard output [1] to /dev/null */ + dup(fd); + + /* Redirect Standard error [2] to /dev/null */ + dup(fd); + } + + umask(0); + + if (!nochdir) + chdir("/"); + + return; +} + +/* **************************************************************************** + * FunctionName: record_daemon_pid + * Description : Record the running daemon program PID to the file "pid_file" + * Inputs : pid_file:The record PID file path + * Output : NONE + * Return : 0: Record successfully Else: Failure + * *****************************************************************************/ +int record_daemon_pid(const char *pid_file) +{ + struct stat fStatBuf; + int fd = -1; + int mode = S_IROTH | S_IXOTH | S_IRGRP | S_IXGRP | S_IRWXU; + char ipc_dir[64] = { 0 }; + + strncpy(ipc_dir, pid_file, 64); + + /* dirname() will modify ipc_dir and save the result */ + dirname(ipc_dir); + + /* If folder pid_file PATH doesnot exist, then we will create it" */ + if (stat(ipc_dir, &fStatBuf) < 0) + { + if (mkdir(ipc_dir, mode) < 0) + { + log_fatal("cannot create %s: %s\n", ipc_dir, strerror(errno)); + return -1; + } + + (void)chmod(ipc_dir, mode); + } + + /* Create the process running PID file */ + mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; + if ((fd = open(pid_file, O_RDWR | O_CREAT | O_TRUNC, mode)) >= 0) + { + char pid[PID_ASCII_SIZE]; + snprintf(pid, sizeof(pid), "%u\n", (unsigned)getpid()); + write(fd, pid, strlen(pid)); + close(fd); + + log_dbg("Record PID<%u> to file %s.\n", getpid(), pid_file); + } + else + { + log_fatal("cannot create %s: %s\n", pid_file, strerror(errno)); + return -1; + } + + return 0; +} + +/* **************************************************************************** + * FunctionName: get_daemon_pid + * Description : Get the daemon process PID from the PID record file "pid_file" + * Inputs : pid_file: the PID record file + * Output : NONE + * Return : pid_t: The daemon process PID number + * *****************************************************************************/ +pid_t get_daemon_pid(const char *pid_file) +{ + FILE *f; + pid_t pid; + + if ((f = fopen(pid_file, "rb")) != NULL) + { + char pid_ascii[PID_ASCII_SIZE]; + (void)fgets(pid_ascii, PID_ASCII_SIZE, f); + (void)fclose(f); + pid = atoi(pid_ascii); + } + else + { + log_fatal("Can't open PID record file %s: %s\n", pid_file, strerror(errno)); + return -1; + } + return pid; +} + +/* **************************************************************************** + * FunctionName: check_daemon_running + * Description : Check the daemon program already running or not + * Inputs : pid_file: The record running daemon program PID + * Output : NONE + * Return : 1: The daemon program alread running 0: Not running + * *****************************************************************************/ +int check_daemon_running(const char *pid_file) +{ + int retVal = -1; + struct stat fStatBuf; + + retVal = stat(pid_file, &fStatBuf); + if (0 == retVal) + { + pid_t pid = -1; + printf("PID record file \"%s\" exist.\n", pid_file); + + pid = get_daemon_pid(pid_file); + if (pid > 0) /* Process pid exist */ + { + if ((retVal = kill(pid, 0)) == 0) + { + printf("Program with PID[%d] seems running.\n", pid); + return 1; + } + else /* Send signal to the old process get no reply. */ + { + printf("Program with PID[%d] seems exit.\n", pid); + remove(pid_file); + return 0; + } + } + else if (0 == pid) + { + printf("Can not read program PID form record file.\n"); + remove(pid_file); + return 0; + } + else /* Read pid from file "pid_file" failure */ + { + printf("Read record file \"%s\" failure, maybe program still running.\n", pid_file); + return 1; + } + } + + return 0; +} + +/* **************************************************************************** + * FunctionName: set_daemon_running + * Description : Set the programe running as daemon if it's not running and record + * its PID to the pid_file. + * Inputs : pid_file: The record running daemon program PID + * Output : NONE + * Return : 0: Successfully. 1: Failure + * *****************************************************************************/ +int set_daemon_running(const char *pid_file) +{ + daemonize(0, 1); + log_nrml("Program running as daemon [PID:%d].\n", getpid()); + + if (record_daemon_pid(pid_file) < 0) + { + log_fatal("Record PID to file \"%s\" failure.\n", pid_file); + return -2; + } + + return 0; +} + + +int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg) +{ + int retval = 0; + + pthread_attr_t thread_attr; + + /* Initialize the thread attribute */ + retval = pthread_attr_init(&thread_attr); + if(retval) + return -1; + + /* Set the stack size of the thread */ + retval = pthread_attr_setstacksize(&thread_attr, 120 * 1024); + if(retval) + goto CleanUp; + + /* Set thread to detached state:Don`t need pthread_join */ + retval = pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED); + if(retval) + goto CleanUp; + + /* Create the thread */ + retval = pthread_create(thread_id, &thread_attr, thread_workbody, thread_arg); + if(retval) + goto CleanUp; + +CleanUp: + /* Destroy the attributes of thread */ + pthread_attr_destroy(&thread_attr); + return retval; +} + + +void exec_system_cmd(const char *format, ...) +{ + char cmd[256]; + va_list args; + int done; + + memset(cmd, 0, sizeof(cmd)); + + va_start(args, format); + done = vsnprintf(cmd, sizeof(cmd), format, args); + va_end(args); + + system(cmd); +} + + diff --git a/program/converterd/cp_proc.h b/program/converterd/cp_proc.h new file mode 100644 index 0000000..f79abe8 --- /dev/null +++ b/program/converterd/cp_proc.h @@ -0,0 +1,42 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_proc.h + * Description: This head file is for Linux process API + * + * Version: 1.0.0(11/06/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/06/2012 09:21:33 PM" + * + ********************************************************************************/ + +#ifndef __CP_PROC_H +#define __CP_PROC_H + +#include <signal.h> + +#define PID_ASCII_SIZE 11 + +typedef struct __CP_PROC_SIG +{ + int signal; + unsigned stop; /* 0: Not term 1: Stop */ +} CP_PROC_SIG; + +typedef void *(THREAD_BODY) (void *thread_arg); + +extern CP_PROC_SIG g_cp_signal; +extern void cp_install_proc_signal(void); + +extern void daemonize(int nochdir, int noclose); +extern int record_daemon_pid(const char *pid_file); +extern pid_t get_daemon_pid(const char *pid_file); +extern int check_daemon_running(const char *pid_file); +extern int set_daemon_running(const char *pid_file); + +extern void exec_system_cmd(const char *format, ...); + +extern int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg); + +#endif diff --git a/program/converterd/cp_socket.c b/program/converterd/cp_socket.c new file mode 100644 index 0000000..2c50bae --- /dev/null +++ b/program/converterd/cp_socket.c @@ -0,0 +1,252 @@ +/********************************************************************************* + * Copyright: (C) 2014 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_socket.c + * Description: This file + * + * Version: 1.0.0(11/18/2014) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/18/2014 11:15:04 PM" + * + ********************************************************************************/ +#include <stdio.h> +#include <unistd.h> +#include <string.h> +#include <netdb.h> +#include <unistd.h> +#include <fcntl.h> + +#include <sys/un.h> +#include <sys/types.h> +#include <linux/sockios.h> +#include <sys/ioctl.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> + +#include "cp_logger.h" +#include "cp_socket.h" + +int cp_sock_set_nonblock(int sockfd) +{ + int opts; + /* + * fcntl may set: + * + * EACCES, EAGAIN: Operation is prohibited by locks held by other + * processes. Or, operation is prohibited because the file has + * been memory-mapped by another process. + * EBADF: fd is not an open file descriptor, or the command was F_SETLK + * or F_SETLKW and the file descriptor open mode doesn't match + * with the type of lock requested. + * EDEADLK: It was detected that the specified F_SETLKW command would + * cause a deadlock. + * EFAULT: lock is outside your accessible address space. + * EINTR: For F_SETLKW, the command was interrupted by a signal. For + * F_GETLK and F_SETLK, the command was interrupted by a signal + * before the lock was checked or acquired. Most likely when + * locking a remote file (e.g. locking over NFS), but can + * sometimes happen locally. + * EINVAL: For F_DUPFD, arg is negative or is greater than the maximum + * allowable value. For F_SETSIG, arg is not an allowable signal + * number. + * EMFILE: For F_DUPFD, the process already has the maximum number of + * file descriptors open. + * ENOLCK: Too many segment locks open, lock table is full, or a remote + * locking protocol failed (e.g. locking over NFS). + * EPERM: Attempted to clear the O_APPEND flag on a file that has the + * append-only attribute set. + */ + opts = fcntl(sockfd, F_GETFL); + if (opts < 0) + { + log_warn("fcntl() get socket options failure: %s\n", strerror(errno)); + return -1; + } + + opts |= O_NONBLOCK; + if (fcntl(sockfd, F_SETFL, opts) < 0) + { + log_warn("fcntl() set socket options failure: %s\n", strerror(errno)); + return -1; + } + + log_dbg("Set socket[%d] none blocking\n", sockfd); + return opts; +} + +int cp_sock_connect(cp_sock_t *sock) +{ + int rv = -1; + int sock_fd = -1; + char service[20]; + struct addrinfo hints, *rp; + struct addrinfo *res = NULL; + struct in_addr inaddr; + char ipstr[20]; + + if(!sock) + { + log_err("Invalid input argument\n"); + return -1; + } + + if(SOCK_STAT_CONNECTED == sock->status) + { + return 0; + } + else if(SOCK_STAT_CONNECTING == sock->status) + { + goto connecting; + } + + log_nrml("Start socket connect to [%s:%d]...\n", sock->host, sock->port); + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_INET; /* Only support IPv4 */ + hints.ai_socktype = SOCK_STREAM; + + /* If Hostname is a valid IP address, then don't use name resolution */ + if( inet_aton(sock->host, &inaddr) ) + { + log_info("%s is a valid IP address, don't use name resolution.\n", sock->host); + hints.ai_flags |= AI_NUMERICHOST; + } + + /* Obtain address(es) matching host/port */ + snprintf(service, sizeof(service), "%d", sock->port); + if( (rv=getaddrinfo(sock->host, service, &hints, &res)) ) + { + log_err("getaddrinfo() parser [%s:%s] failed: %s\n", sock->host, service, gai_strerror(rv)); + rv = -2; + goto failed; + } + + + /* getaddrinfo() returns a list of address structures. Try each + * address until we successfully connect or bind + */ + rv = -3; /* Connect failure */ + for (rp=res; rp!=NULL; rp=rp->ai_next) + { + /* Create the socket */ + sock_fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + if( sock_fd < 0) + { + log_err("socket() create failed: %s\n", strerror(errno)); + rv = -4; + continue; + } + + inet_ntop(AF_INET, &(((struct sockaddr_in *)(rp->ai_addr))->sin_addr), ipstr, sizeof(ipstr)); + log_dbg("DNS resolve IP address [%s]\n", ipstr); + + cp_sock_set_nonblock(sock_fd); + + /* Nono block Connect to the remote server */ + if(0==connect(sock_fd, rp->ai_addr, rp->ai_addrlen)) + { + /* Conenct to server successfully */ + memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr)); + sock->fd = sock_fd; + sock->status = SOCK_STAT_CONNECTED; + rv = 0; + goto connected; + } + else + { + if(EINPROGRESS == errno) + { + /* Connect to server now in progress */ + memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr)); + sock->fd = sock_fd; + sock->status = SOCK_STAT_CONNECTING; + rv = 0; + goto connecting; + } + else + { + /* Connect to server failed. */ + close(sock_fd); + rv = -5; + log_err("connect() to server failed: %s\n", strerror(errno)); + goto failed; + } + } + + close(sock_fd); + } + + +failed: + log_err("create socket connect to [%s:%d] failed: %s\n", sock->host, sock->port, strerror(errno)); + sock->status = SOCK_STAT_DISCONNECT; + sock->fd = -1; + return rv; + +connecting: + if(SOCK_STAT_CONNECTING == sock->status) + { + int len; + + len = sizeof(sock->saddr); + + errno = 0; + if( 0 == connect(sock->fd, &sock->saddr, len) ) + { + /* connect() return 0 means it already connected */ + sock->status = SOCK_STAT_CONNECTED; + rv = 0; + goto connected; + } + + /* Connect failure will continue to check */ + switch (errno) + { + case EISCONN: + sock->status = SOCK_STAT_CONNECTED; + rv = 0; + goto connected; + + case EALREADY: + case EINPROGRESS: + log_dbg("socket[%d] connect to remote [%s:%d] in progress\n", sock->fd, sock->host, sock->port); + rv = 0; + goto cleanup; + + default: + log_err("socket[%d] connect to remote [%s:%d] failed: %s\n", sock->fd, sock->host, sock->port, strerror(errno)); + sock->status = SOCK_STAT_DISCONNECT; + rv = -7; + break; + } + } + +connected: + if(SOCK_STAT_CONNECTED == sock->status) + { + rv = 0; + log_nrml("socket[%d] connected to remote server [%s:%d]\n", sock->fd, sock->host, sock->port); + goto cleanup; + } + +cleanup: + if(res) + freeaddrinfo(res); /* No longer needed */ + + return rv; +} + +void cp_sock_close(cp_sock_t *sock) +{ + close(sock->fd); + sock->fd = 0; + sock->status = SOCK_STAT_INIT; +} + +void cp_sock_term(cp_sock_t *sock) +{ + close(sock->fd); + memset(sock, 0, sizeof(*sock)); +} diff --git a/program/converterd/cp_socket.h b/program/converterd/cp_socket.h new file mode 100644 index 0000000..7f1cfd7 --- /dev/null +++ b/program/converterd/cp_socket.h @@ -0,0 +1,40 @@ +/******************************************************************************** + * Copyright: (C) 2014 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_socket.h + * Description: This head file + * + * Version: 1.0.0(11/19/2014) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/19/2014 12:16:45 AM" + * + ********************************************************************************/ +#ifndef __CP_SOCKET_H_ +#define __CP_SOCKET_H_ + +#include <sys/types.h> +#include <sys/socket.h> + +#define DOMAIN_MAX_LEN 128 + +#define SOCK_STAT_INIT 0 +#define SOCK_STAT_CONNECTING 1 +#define SOCK_STAT_CONNECTED 2 +#define SOCK_STAT_DISCONNECT 3 + +typedef struct cp_sock_s +{ + char host[DOMAIN_MAX_LEN]; /* Connect/Listen hostname or IP address */ + int port; /* Connect/Listen server port */ + int fd; /* Connected/Listen socket fd */ + int status; /* Socket connected or not */ + struct sockaddr saddr; /* sockaddr for none-block connect */ + +} cp_sock_t; /*--- end of struct cp_sock_s ---*/ + +extern int cp_sock_connect(cp_sock_t *sock); +extern void cp_sock_close(cp_sock_t *sock); +extern void cp_sock_term(cp_sock_t *sock); +#endif + diff --git a/program/converterd/cvd_conf.c b/program/converterd/cvd_conf.c new file mode 100644 index 0000000..3bd6cc4 --- /dev/null +++ b/program/converterd/cvd_conf.c @@ -0,0 +1,121 @@ +/********************************************************************************* + * Copyright: (C) 2014 GuoWenxue<guowenxue@email.com> + * All rights reserved. + * + * Filename: cvd_conf.c + * Description: This file + * + * Version: 1.0.0(11/19/2014) + * Author: GuoWenxue <guowenxue@email.com> + * ChangeLog: 1, Release initial version on "11/19/2014 01:58:28 PM" + * + ********************************************************************************/ + +#include "cp_logger.h" +#include "cvd_conf.h" +#include "cp_iniparser.h" + + +int parser_cvd_conf(char *ini_name, cp_logger *logger, comport_sock_bind_t *cvd_bind) +{ + dictionary *ini; + char *str; + int val, i; + + if(!ini_name || !logger || !cvd_bind) + { + log_err("Invalid input arguments\n"); + return -1 ; + } + + ini = iniparser_load(ini_name); + if (ini==NULL) + { + log_err("cannot parse file: %s\n", ini_name); + return -2 ; + } + + /************************************************ + * Parser the Logger configuration + ************************************************/ + + log_nrml("Parser configure file %s with original logger file [%s]\n", ini_name, logger->file); + + str = iniparser_getstring(ini, "log:file", NULL); + strncpy(logger->file, (strlen(str)>0 ? str : CVD_DEF_LOG_FILE), FILENAME_LEN); + log_nrml("Set log file [%d] from configuration.\n", logger->level); + + /*If not set the log level from command line, then use the configure one*/ + if( !(logger->flag&CP_LOGGER_LEVEL_OPT) ) + { + val = iniparser_getint(ini, "log:level", -1); + logger->level = (-1==val ? LOG_LEVEL_NRML : val); + log_nrml("Set log level[%d] from configuration.\n", logger->level); + } + + /* Set the log maximum file size in the configure file */ + val = iniparser_getint(ini, "log:size", -1); + logger->size = -1==val ? CVD_DEF_LOG_SIZE : val; + log_nrml("Set log size [%dKiB] from configuration\n", logger->size); + + if ( cp_log_reopen() ) + { + printf("Log file reopen failure, exit now...\n"); + return -3; + } + + log_nrml("Configure Log file \"%s\" with level [%s], maximum size %d KiB.\n", + logger->file, log_str[logger->level], logger->size); + + + for(i=0; i<MAX_BIND_TUNNEL; i++) + { + char key[64]; + + snprintf(key, sizeof(key), "TUNNEL%d:comport", i+1); + str = iniparser_getstring(ini, key, NULL); + if( NULL!=str && strlen(str) > 0 ) + { + strncpy(cvd_bind->comport_dev, str, DEVNAME_LEN); + log_info("Configure comport: %s\n", cvd_bind->comport_dev); + } + else + { + log_err("Configure file lost serial port configuration\n"); + return -3; + } + + /*----------------------------------------------------------------------------- + * Connect socket configuration + *-----------------------------------------------------------------------------*/ + + snprintf(key, sizeof(key), "TUNNEL%d:conn_host", i+1); + str = iniparser_getstring(ini, key, NULL); + if( NULL!=str && strlen(str) > 0 ) + { + char *ptr; + ptr = strtok(str, ":"); + if(ptr) + { + strncpy(cvd_bind->sock.host, ptr, DOMAIN_MAX_LEN); + if( NULL != (ptr=strtok(NULL, ":")) ) + { + cvd_bind->sock.port = atoi(ptr); + } + else + { + log_err("Configure file lost connect port configuration\n"); + return -4; + } + } + else + { + log_err("Configure file lost connect host configuration\n"); + return -5; + } + } + log_nrml("Bind tunnel serial[%s] <==> socket[%s:%d]\n", cvd_bind->comport_dev, cvd_bind->sock.host, cvd_bind->sock.port); + } + + return 0; +} diff --git a/program/converterd/cvd_conf.h b/program/converterd/cvd_conf.h new file mode 100644 index 0000000..99b056a --- /dev/null +++ b/program/converterd/cvd_conf.h @@ -0,0 +1,31 @@ +/******************************************************************************** + * Copyright: (C) 2014 GuoWenxue<guowenxue@email.com> + * All rights reserved. + * + * Filename: cvd_conf.h + * Description: This head file + * + * Version: 1.0.0(11/19/2014) + * Author: GuoWenxue <guowenxue@email.com> + * ChangeLog: 1, Release initial version on "11/19/2014 02:28:07 PM" + * + ********************************************************************************/ +#ifndef __CVD_CONF_ +#define __CVD_CONF_ + +#include "cvd_main.h" + +#define MAX_BIND_TUNNEL 1 + +#define DEF_SERIAL_PORT "/dev/ttyS1" +//#define DEF_CONN_HOST "192.168.1.78" +#define DEF_CONN_HOST "emblinux.com" +#define DEF_CONN_PORT 9001 + +#define CVD_DEF_LOG_FILE "/var/log/converterd.log" +#define CVD_DEF_LOG_SIZE 8 + +extern int parser_cvd_conf(char *ini_name, cp_logger *logger, comport_sock_bind_t *cvd_bind); + +#endif + diff --git a/program/converterd/cvd_main.c b/program/converterd/cvd_main.c new file mode 100644 index 0000000..38490e8 --- /dev/null +++ b/program/converterd/cvd_main.c @@ -0,0 +1,309 @@ +/********************************************************************************* + * Copyright: (C) 2014 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cvd_main.c + * Description: This file + * + * Version: 1.0.0(11/18/2014) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/18/2014 10:30:53 PM" + * + ********************************************************************************/ +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <string.h> +#include <unistd.h> +#include <libgen.h> +#include <sys/types.h> /* basic system data types */ +#include <sys/socket.h> /* basic socket definitions */ +#include <sys/epoll.h> /* epoll function */ + +#include "cp_comport.h" +#include "cp_socket.h" +#include "cp_logger.h" +#include "cp_proc.h" +#include "cvd_conf.h" +#include "cvd_main.h" +#include "version.h" + +int epoll_add_socket(int epfd, cp_sock_t *sock); +int epoll_add_comport(int epfd, COM_PORT *comport, char *comport_dev); +void epoll_del_fd(int epfd, int fd); + +static void prog_usage(const char *progname) +{ + banner(progname); + + printf("Usage: %s [OPTION]...\n", progname); + printf("Receive date from a serial port and transfer the data to remote server by socket.\n"); + printf("\nMandatory arguments to long options are mandatory for short options too:\n"); + + printf(" -d[debug ] Running in debug mode\n"); + printf(" -l[level ] Set the log level as [0..%d]\n", LOG_LEVEL_MAX-1); + printf(" -h[help ] Display this help information\n"); + printf(" -v[version ] Display the program version\n"); + return ; +} + +int main(int argc, char **argv) +{ + int i, epfd, nfds, nbytes; + comport_sock_bind_t cvd_bind; + cp_logger *logger; + struct epoll_event evts[MAXEPOLLSIZE]; + int opt; + int debug = 0; + char pid_file[64] = { 0 }; /* The file used to record the PID */ + char *conf_file = CVD_DEF_CONF_FILE; + char *log_file; + int log_level = LOG_LEVEL_TRACE; + const char *progname=NULL; + + struct option long_options[] = { + {"conf", required_argument, NULL, 'c'}, + {"debug", no_argument, NULL, 'd'}, + {"level", required_argument, NULL, 'l'}, + {"version", no_argument, NULL, 'v'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} + }; + + progname = basename(argv[0]); + /* Parser the command line parameters */ + while ((opt = getopt_long(argc, argv, "c:dl:vh", long_options, NULL)) != -1) + { + switch (opt) + { + case 'c': /* Set configure file */ + conf_file = optarg; + break; + + case 'd': /* Set debug running */ + debug = 1; + log_file = DBG_LOG_FILE; + break; + + case 'l': /* Set the log level */ + i = atoi(optarg); + log_level = i>LOG_LEVEL_MAX ? LOG_LEVEL_MAX-1 : LOG_LEVEL_MAX-1; + break; + + case 'v': /* Get software version */ + banner(progname); /* Defined in version.h */ + return EXIT_SUCCESS; + + case 'h': /* Get help information */ + prog_usage(progname); + return 0; + + default: + break; + } /* end of "switch(opt)" */ + } + + memset(&cvd_bind, 0, sizeof(cvd_bind)); + + if( !debug ) + { + snprintf(pid_file, sizeof(pid_file), "/var/run/%s.pid", progname); + if( check_daemon_running(pid_file) ) + { + printf("Programe already running, exit now.\n"); + return -1; + } + } + + if( !(logger=cp_log_init(NULL, log_file, log_level, 0)) || cp_log_open()<0 ) + { + printf("Init logger system failed, program exit now...\n"); + return -1; + } + + if( parser_cvd_conf(conf_file, logger, &cvd_bind) < 0) + { + printf("Parser configure file '%s' failed, program exit now...\n", conf_file); + return -1; + } + + cvd_bind.comport = comport_init(cvd_bind.comport_dev, 115200, "8N1N"); + if( !cvd_bind.comport ) + { + log_err("Init comport '%s' as 115200 8N1N failure\n", cvd_bind.comport_dev); + return -2; + } + + if( (epfd=epoll_create(MAXEPOLLSIZE)) < 0) + { + log_err("epoll_create failure: %s\n", strerror(errno)); + goto CleanUp; + } + + + if( !debug ) + { + if( set_daemon_running(pid_file) ) + { + log_fatal("Set program \"%s\" running as daemon failure.\n", progname); + goto CleanUp; + } + } + + cp_install_proc_signal(); + + while( !g_cp_signal.stop ) + { + /* Open comport if it's not opened */ + if( !cvd_bind.comport->is_connted ) + { + epoll_add_comport(epfd, cvd_bind.comport, cvd_bind.comport_dev); + } + + /* Connect to host if not connected */ + if( SOCK_STAT_CONNECTED != cvd_bind.sock.status ) + { + epoll_add_socket(epfd, &cvd_bind.sock); + } + + /* Epoll wait the added socket event */ + nfds=epoll_wait(epfd, evts, MAXEPOLLSIZE, EPOLL_TIMEOUT); + if (nfds < 0) + { + log_err("epoll_wait get error: %s\n", strerror(errno)); + continue; + } + + for (i=0; i<nfds; ++i) + { + /* Comport get data arriving event happened */ + if ( evts[i].data.fd == cvd_bind.comport->fd ) + { + nbytes = comport_recv(cvd_bind.comport, cvd_bind.buf, sizeof(cvd_bind.buf), COMPORT_TIMEOUT); + if( nbytes>0 ) + { + if( SOCK_STAT_CONNECTED == cvd_bind.sock.status ) + { + log_dbg("Transfer data from comport to socket\n"); + write(cvd_bind.sock.fd, cvd_bind.buf, nbytes); + } + else + { + log_err("Receive data from serial port [%s] but socket to [%s:%d] disconnect.\n", + cvd_bind.comport->dev_name, cvd_bind.sock.host, cvd_bind.sock.port); + } + } + } + /* Socket get data arriving event happened */ + else if ( evts[i].data.fd == cvd_bind.sock.fd ) + { + nbytes = read(cvd_bind.sock.fd, cvd_bind.buf, sizeof(cvd_bind.buf)); + /* Socket disconnected */ + if(nbytes == 0) + { + log_warn("Socket[%d] connect to [%s:%d] disconnect\n", + cvd_bind.sock.fd, cvd_bind.sock.host, cvd_bind.sock.port); + epoll_del_fd(epfd, evts[i].data.fd); + cp_sock_close(&cvd_bind.sock); + } + /* Socket read error */ + else if(nbytes < 0) + { + log_warn("Read data from socket[%d] get error: %s, close socket now.\n", + cvd_bind.sock.fd, strerror(errno)); + epoll_del_fd(epfd, evts[i].data.fd); + cp_sock_close(&cvd_bind.sock); + } + /* Socket read ok then transmiter to serial port */ + else if( nbytes>0 ) + { + if( cvd_bind.comport->is_connted) + { + log_dbg("Transfer data from socket to comport\n"); + write(cvd_bind.comport->fd, cvd_bind.buf, nbytes); + } + else + { + log_err("Receive data from socket to [%s:%d] but serial port [%s] disconnect.\n", + cvd_bind.sock.host, cvd_bind.sock.port, cvd_bind.comport->dev_name); + } + } + } + } + } + +CleanUp: + comport_term(cvd_bind.comport); + cp_log_term(); + + return 0; +} + +void epoll_del_fd(int epfd, int fd) +{ + struct epoll_event ev; + + log_warn("Remove fd[%d] from epoll\n", fd); + ev.events = EPOLLIN | EPOLLET; + epoll_ctl(epfd, EPOLL_CTL_DEL, fd, &ev); +} + +int epoll_add_comport(int epfd, COM_PORT *comport, char *comport_dev) +{ + int rv = -1; + struct epoll_event ev; + + if( comport_open(comport) < 0 ) + { + rv = -2; + log_err("Open comport '%s' as 115200 8N1N failure\n", comport_dev); + goto failed; + } + + ev.data.fd = comport->fd; + ev.events = EPOLLIN | EPOLLET; + if (epoll_ctl(epfd, EPOLL_CTL_ADD, comport->fd, &ev) < 0) + { + rv = -3; + log_err("epoll add comport fd[%d] failure\n", comport->fd); + goto failed; + } + + log_nrml("Add comport [%s] to epoll ok\n", comport_dev); + + return 0; + +failed: + comport->fd = -1; + return rv; +} + + +int epoll_add_socket(int epfd, cp_sock_t *sock) +{ + struct epoll_event ev; + + if(SOCK_STAT_CONNECTED == sock->status) + return 0; + + /* Try to connect to remote server again */ + cp_sock_connect(sock); + + if( SOCK_STAT_CONNECTED != sock->status ) + { + return -1; + } + + ev.data.fd = sock->fd; + ev.events = EPOLLIN | EPOLLET; + if (epoll_ctl(epfd, EPOLL_CTL_ADD, sock->fd, &ev) < 0) + { + log_err("epoll add socket[%d] failure\n", sock->fd); + return -2; + } + + log_nrml("Add socket[%d] connect to [%s:%d] to epoll ok\n", sock->fd, sock->host, sock->port); + return 0; +} + + diff --git a/program/converterd/cvd_main.h b/program/converterd/cvd_main.h new file mode 100644 index 0000000..36fd77b --- /dev/null +++ b/program/converterd/cvd_main.h @@ -0,0 +1,40 @@ +/******************************************************************************** + * Copyright: (C) 2014 GuoWenxue<guowenxue@email.com> + * All rights reserved. + * + * Filename: cvd_main.h + * Description: This head file + * + * Version: 1.0.0(11/19/2014) + * Author: GuoWenxue <guowenxue@email.com> + * ChangeLog: 1, Release initial version on "11/19/2014 02:35:33 PM" + * + ********************************************************************************/ + +#ifndef __CVD_MAIN_H_ +#define __CVD_MAIN_H_ + +#include "cp_comport.h" +#include "cp_socket.h" + +#define CVD_DEF_CONF_FILE "/apps/etc/converterd.conf" + +#define MAXEPOLLSIZE 2 +#define BUF_SIZE 4096 + +#define EPOLL_TIMEOUT 2000 +#define COMPORT_TIMEOUT 100 + + +typedef struct comport_sock_bind_s +{ + char buf[BUF_SIZE]; /* Comport/Socket receive buffer */ + char comport_dev[DEVNAME_LEN]; /* Receive/Transmit comport device name */ + + COM_PORT *comport; /* Receive/Transmit comport */ + cp_sock_t sock; /* Connected socket */ +} comport_sock_bind_t; /* --- end of struct comport_sock_bind_s ---*/ + + + +#endif diff --git a/program/converterd/makefile b/program/converterd/makefile new file mode 100644 index 0000000..afc55ed --- /dev/null +++ b/program/converterd/makefile @@ -0,0 +1,114 @@ +#********************************************************************************* +# Copyright: (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com> +# All rights reserved. +# +# Filename: Makefile +# Description: This Makefile used to call function to compile all the C source +# in current folder and links all the objects file into a excutable +# binary file. +# +# Version: 1.0.0(10/08/2011~) +# Author: Guo Wenxue <guowenxue@gmail.com> +# ChangeLog: 1, Release initial version on "10/08/2011 01:29:33 AM" +# +#********************************************************************************/ + +PWD=$(shell pwd) +INSTPATH=/tftp + +APP_BINARY_NAME = converterd +ARCH?=arm920t +#ARCH?=i386 + +LINK_MODE=STATIC +MODE=PRODUCTION +DEBUG=1 + +LDFLAGS+=-lpthread +CFLAGS+=-Wall -Werror + +ifeq ("${MODE}", "PRODUCTION") + CFLAGS+=-DPRODUCTION_MODE +endif +ifdef DEBUG + CFLAGS+=-g -DDEBUG +endif + +COMPILE_DATE=$(shell date -u +"%Y-%m-%d %H:%M") +VPATH= . +SRCS = $(wildcard ${VPATH}/*.c) +OBJS = $(patsubst %.c,%.o,$(SRCS)) + +TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]") +ifneq (,$(filter i386,$(TMP))) + CROSS_COMPILE= +else + CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux- +endif + +CFLAGS+=-I${PWD} + +export CC=${CROSS_COMPILE}gcc +export CXX=${CROSS_COMPILE}g++ +export AR=${CROSS_COMPILE}ar +export AS=${CROSS_COMPILE}as +export RANLIB=${CROSS_COMPILE}ranlib +export STRIP=${CROSS_COMPILE}strip +export CFLAGS +export LDFLAGS +export ARCH +export LINK_MODE + +ifeq ("${LINK_MODE}", "STATIC") + CFLAGS+=--static + LDFLAGS+=-static +else + LDFLAGS+=-ldl +endif + +all: entry version $(APP_BINARY_NAME) + make install + +entry: + @echo " "; + @echo " ========================================================="; + @echo " ** Compile ${APP_BINARY_NAME} for ${ARCH} "; + @echo " ========================================================="; + +version: + @echo "/* Generated by makefile, don't Edit it by hand */" > version.h + @echo "#define DATE \"$(COMPILE_DATE)\"" >> version.h + @echo "#define MAJOR 1" >>version.h + @echo "#define MINOR 0" >>version.h + @echo "#define REVER 0" >>version.h + @if [ -f .svn/entries ] ; then \ + echo "#define SVNVER `sed -n -e 11p .svn/entries`" >>version.h; \ + else \ + echo "#define SVNVER 0" >>version.h; \ + fi; + @echo "" >> version.h + @echo '#define version(progname) printf("%s Version %d.%d.%d Build @%05d (%s)\\n", progname, MAJOR, MINOR, REVER,SVNVER, DATE)' >> version.h + @echo '#define copyright() printf("Copyright: (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com\\n")' >>version.h + @echo '#define banner(progname) {version(progname); copyright(); printf("\\n");}' >>version.h + @echo "" >> version.h + +$(APP_BINARY_NAME): $(OBJS) + $(CC) -o $@ *.c ${LDFLAGS} + @$(STRIP) $(APP_BINARY_NAME) + +tag: + @ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R . + @cscope -Rbq + +install: + @cp $(APP_BINARY_NAME) ${INSTPATH} + +clean: + @rm -f version.h + @rm -f *.o $(APP_BINARY_NAME) + @rm -rf *.gdb *.a *.so *.elf* + +distclean: clean + @rm -f tags cscope* + +.PHONY: clean entry diff --git a/program/cp_library/at91_ioctl.h b/program/cp_library/at91_ioctl.h new file mode 100644 index 0000000..fbf63d8 --- /dev/null +++ b/program/cp_library/at91_ioctl.h @@ -0,0 +1,91 @@ +/********************************************************************************* + * Copyright: (C) Guo Wenxue<guowenxue@gmail.com> + * All ringhts reserved. + * + * Filename: at91_ioctl.h + * Description: ioctl() cmd argument for driver definition here + * + * Version: 1.0.0(05/15/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "05/15/2012 04:28:09 PM" + * + ********************************************************************************/ + +#ifndef __AT91_IOCTL_H +#define __AT91_IOCTL_H + +#include <asm/ioctl.h> +#ifndef __KERNEL__ +#include <sys/ioctl.h> +#endif + +/*=========================================================================== + * Common ioctl command definition + *===========================================================================*/ + +#define PLATDRV_MAGIC 0x60 + +/*=========================================================================== + * ioctl command for all the drivers 0x01~0x0F + *===========================================================================*/ + +/*args is enable or disable*/ +#define SET_DRV_DEBUG _IO (PLATDRV_MAGIC, 0x01) +#define GET_DRV_VER _IO (PLATDRV_MAGIC, 0x02) + +/*=========================================================================== + * ioctl command for few ioctl() cmd driver 0x05~0x2F + *===========================================================================*/ + +/* ADC driver */ +#define GET_BATTERY_STAT _IO (PLATDRV_MAGIC, 0x06) +#define GET_GMTUBE_VHIGH _IO (PLATDRV_MAGIC, 0x08) +#define GET_GPRS_VBAT _IO (PLATDRV_MAGIC, 0x09) +#define GET_ADC_DATA _IO (PLATDRV_MAGIC, 0x10) +#define SET_ADC_INTERVEL _IO (PLATDRV_MAGIC, 0x11) + + +/* Buzzer driver */ +#define BUZZER_ON _IO (PLATDRV_MAGIC, 0x12) +#define BUZZER_BEEP _IO (PLATDRV_MAGIC, 0x13) +#define BUZZER_OFF _IO (PLATDRV_MAGIC, 0x14) +#define BUZZER_FREQ _IO (PLATDRV_MAGIC, 0x15) + +/* Button driver */ +#define GET_BUTTON_STATUS _IO (PLATDRV_MAGIC, 0x17) + +/* LED driver */ +#define LED_OFF _IO (PLATDRV_MAGIC, 0x18) +#define LED_ON _IO (PLATDRV_MAGIC, 0x19) +#define LED_BLINK _IO (PLATDRV_MAGIC, 0x1A) +#define TURN_ALL_LED _IO (PLATDRV_MAGIC, 0x1B) + +/* Zigbee driver */ +#define ZIGBEE_RESET _IO (PLATDRV_MAGIC, 0x1E) +#define ZIGBEE_STATUS _IO (PLATDRV_MAGIC, 0x1F) + +/*=========================================================================== + * ioctl command for GPS/GPRS driver 0x30~0x3F + *===========================================================================*/ +#define GSM_SET_POWER _IO (PLATDRV_MAGIC, 0x30) /* Set GPRS power On(1)/Off(0)/Reset(2) */ +#define GSM_GET_POWER _IO (PLATDRV_MAGIC, 0x31) /* Get current GPRS power status */ +#define GSM_GET_ADC _IO (PLATDRV_MAGIC, 0x32) /* Get current GPRS power status */ + +#define GPS_SET_POWER _IO (PLATDRV_MAGIC, 0x3A) /* Set GPS power On(1)/Off(0) */ +#define GPS_GET_POWER _IO (PLATDRV_MAGIC, 0x3B) /* Get current GPS power status */ + +/*=========================================================================== + * ioctl command for GM Tube driver 0x40~0x4F + *===========================================================================*/ +#define GM_SET_MEASURE_RADI _IO (PLATDRV_MAGIC, 0x40) /* Start/Stop GM tube radioation measurement */ +#define GM_GET_MEASURE_DOSE _IO (PLATDRV_MAGIC, 0x41) /* Get sample radiation dose, arg=0:get last time, arg=1: Total*/ +#define GM_SET_DUTY _IO (PLATDRV_MAGIC, 0x42) /* Set GM tube PWM low duty */ +#define GM_SET_INTERVAL _IO (PLATDRV_MAGIC, 0x43) /* Set GM tube timer interval */ +#define GM_GET_VOLTAGE _IO (PLATDRV_MAGIC, 0x44) /* Get GM tube high voltage */ + +#define GM_SET_POWER _IO (PLATDRV_MAGIC, 0x45) /* Enable/Disable GM tube 3.3V power */ +#define GM_SET_PWM_TC _IO (PLATDRV_MAGIC, 0x46) /* Start/Stop GM tube pwm output TC*/ +#define GM_SET_MEASURE_TC _IO (PLATDRV_MAGIC, 0x47) /* Start/Stop GM tube measurement TC */ +#define GM_SET_TIMER_TC _IO (PLATDRV_MAGIC, 0x48) /* Start/Stop GM tube timer TC*/ + +#endif /* End of __AT91_IOCTL_H */ diff --git a/program/cp_library/cp_array.c b/program/cp_library/cp_array.c new file mode 100644 index 0000000..8b08ed0 --- /dev/null +++ b/program/cp_library/cp_array.c @@ -0,0 +1,168 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_array.c + * Description: This file is a dynamic array implement + * + * Version: 1.0.0(12/20/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "12/20/2012 01:48:27 PM" + * + ********************************************************************************/ + +#include <stdlib.h> +#include "cp_array.h" +#include "cp_common.h" +#include "cp_logger.h" + +CP_ARRAY *cp_array_init(CP_ARRAY *array, int size) +{ + int i; + + if( !array ) + { + if( !(array=t_malloc(sizeof(*array))) ) + { + return NULL; + } + else + { + memset(array, 0, sizeof(*array)); + array->flag |= CP_ARRAY_FLAG_MALLOC; + } + } + else + { + /* array is a variable,so clear it */ + memset(array, 0, sizeof(*array)); + } + + array->size = size; + if( !array->data && !(array->data=(void **)malloc(array->size*sizeof(void *))) ) + { + cp_array_term(array); + return NULL; + } + + for(i=0; i<array->size; i++) + { + array->data[i] = NULL; + } + + return array; +} + +void cp_array_term(CP_ARRAY *array) +{ + if(!array) + return; + + if(array->data) + t_free(array->data); + + if(array->flag&CP_ARRAY_FLAG_MALLOC) + { + t_free(array); + } + + return ; +} + + +int cp_array_add(CP_ARRAY *array, void *data) +{ + int i; + void *entry; + + if(!array || !data) + { + log_err("Invalude input arguments\n"); + return -1; + } + + /* array already full */ + if(array->items >= array->size) + { + log_err("array is full,can not add data [%p]\n", data); + return -2; + } + + /* We don't start the array from 0 but 1 */ + cp_list_array_for_each(array, i, entry) + { + if( !entry ) + { + log_dbg("Array[%d] add data[%p] ok\n", i, data); + array->data[i] = data; + array->items ++; + break; + } + } + + return i; +} + +void cp_array_rm_byindex(CP_ARRAY *array, int index) +{ + /* We don't start the array from 0 but 1 */ + if(!array || index<0) + { + log_err("Invalude input arguments\n"); + return; + } + + if(array->data[index]) + { + array->items --; + array->data[index] = NULL; + } +} + +int cp_array_rm_bydata(CP_ARRAY *array, void *data) +{ + int i, rv = -3; + void *entry; + + if(!array || !data) + { + log_err("Invalude input arguments\n"); + return -1; + } + + if(array->items <= 0) + { + log_err("array is empty,can not remove data [%p]\n", data); + return -2; + } + + /* We don't start the array from 0 but 1 */ + cp_list_array_for_each(array, i, entry) + { + if( entry == data ) + { + array->items --; + array->data[i] = NULL; + rv = 0; + break; + } + } + + return rv; +} + +void cp_array_travel(CP_ARRAY *array) +{ + int i; + void *data; + + /* We don't start the array from 0 but 1 */ + cp_list_array_for_each(array, i, data) + { + log_dbg("array data[%d] save data [%p]\n", i, data); + } + + return ; +} + + diff --git a/program/cp_library/cp_array.h b/program/cp_library/cp_array.h new file mode 100644 index 0000000..87167b8 --- /dev/null +++ b/program/cp_library/cp_array.h @@ -0,0 +1,41 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_array.h + * Description: This head file is for the dynaic array implement + * + * Version: 1.0.0(12/20/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "12/20/2012 01:49:11 PM" + * + ********************************************************************************/ + +#ifndef __CP_ARRAY_H +#define __CP_ARRAY_H + +#define CP_ARRAY_FLAG_MALLOC (1<<0) +typedef struct _CP_ARRAY +{ + unsigned char flag; + int size; + int items; + void **data; +} CP_ARRAY; + +#define cp_array_is_full(arr) ( (arr)->size-1==(arr)->items ? 1 :0 ) +#define cp_array_is_empty(arr) ( 0==(arr)->items ? 1 : 0) +#define cp_array_count(arr) ( (arr)->items ) +#define cp_array_size(arr) ( (arr)->size-1 ) + +#define cp_list_array_for_each(arr, i, entry) for(i=0,entry=arr->data[i]; i<arr->size; ++i,entry=i<arr->size?arr->data[i]:NULL) + + +CP_ARRAY *cp_array_init(CP_ARRAY *array, int size); +void cp_array_term(CP_ARRAY *array); +int cp_array_add(CP_ARRAY *array, void *data); +void cp_array_rm_byindex(CP_ARRAY *array, int index); +int cp_array_rm_bydata(CP_ARRAY *array, void *data); +void cp_array_travel(CP_ARRAY *array); + +#endif /* __CP_ARRAY_H */ diff --git a/program/cp_library/cp_atcmd.c b/program/cp_library/cp_atcmd.c new file mode 100644 index 0000000..aedd5c9 --- /dev/null +++ b/program/cp_library/cp_atcmd.c @@ -0,0 +1,668 @@ +/********************************************************************************* + * Copyright: (C) guowenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_atcmd.c + * Description: This is file is used to send AT command to GPRS module. + * + * Version: 1.0.0(02/02/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "02/02/2012 10:28:44 AM" + * + ********************************************************************************/ + +#include "cp_atcmd.h" +#include "cp_string.h" +#include "cp_logger.h" +#include "cp_time.h" + +#ifndef ATCMD_REPLY_LEN +#define ATCMD_REPLY_LEN 512 +#endif + +/* + * Description: Send the AT command which modem will only reply "OK" or "ERROR", + * such as AT,ATE0,AT+CNMP=2 etc. + * + * Return Value: 0: OK -X: ERROR + */ +int send_atcmd_check_ok(COM_PORT *comport, char *atcmd, unsigned long timeout) +{ + int retval; + retval = send_atcmd(comport, atcmd, "OK\r\n", "ERROR\r\n", timeout, NULL, 0); + + return 0==retval ? 0 : -2; +} + +/* + * Description: Send the AT command which will reply the value directly in a + * single line, such as AT+CGMM, AT+CGSN + * + * Output Value: Buf: The AT command query value + * Return Value: 0: OK -X: ERROR + * + */ +int send_atcmd_check_value(COM_PORT *comport, char *atcmd, unsigned long timeout, char *buf, int buf_len) +{ + int i = 0; + int retval=0; + char tmp[ATCMD_REPLY_LEN]; + char *start; + + if(NULL==buf) + { + log_err("Function call arguments error!\n"); + return -1; + } + + memset(tmp, 0, sizeof(tmp)); + retval = send_atcmd(comport, atcmd, "OK\r\n", "ERROR\r\n", timeout, tmp, sizeof(tmp)); + if( 0 != retval) + { + return -2; /* AT command can not get reply */ + } + + /* Parser the receive string to get the expect value*/ + if(NULL != (start=strchr(tmp, '\n')) ) + { + start ++; /* Skip '\n' character */ + while(*start!='\r' && i<buf_len-1) + { + buf[i++] = *start; + start ++; + } + } + buf[i] = '\0'; /* End of the string */ + + return ('\0'==buf[0] ? -3 : 0); +} + +/* + * Description: Send the AT command which will reply the value with a prefix "+CMD: " + * single line, such as AT+CGMR AT+CPIN? AT+CNMP? AT+CSQ + * + * Output Value: Buf: The AT command query value by remove "+XXX:" prefix + * Return Value: 0: OK -X: ERROR + * + */ +int send_atcmd_check_request(COM_PORT *comport, char *atcmd, unsigned long timeout, char *buf, int buf_len) +{ + int retval; + int i = 0; + char tmp[ATCMD_REPLY_LEN]; + char *ptr = NULL; + + if(NULL==buf) + { + log_err("%s() call arguments error!\n", __FUNCTION__); + return -1; + } + + memset(tmp, 0, sizeof(tmp)); + retval = send_atcmd(comport, atcmd, "OK\r\n", "ERROR\r\n", timeout, tmp, sizeof(tmp)); + if( 0 != retval) + { + return -2; + } + + /* Parser the receive string to get the expect value*/ + if(NULL != (ptr=strchr (tmp, ':')) ) + { + ptr += 2; /* Skip the ':' and SPACE character */ + while(*ptr!='\r' && i<buf_len-1) + { + buf[i++] = *ptr; + ptr ++; + } + } + buf[i] = '\0'; /* End of the string */ + + return ('\0'==buf[0] ? -3 : 0); +} + + +/* + * Description: Send ATE0 command to the GSM module to check GSM module ready or not + * Return Value: 0: Success !0:Failure + */ +int atcmd_check_at_ready(COM_PORT *comport) +{ + int retval; + retval=send_atcmd_check_ok(comport, "ATE0\r", 500); + if(retval) + { + log_err("ATE0 check AT command ready [FAILED]\n"); + } + else + log_nrml("ATE0 check AT command ready [OK]\n"); + + return retval; +} + +/* + * Description: Send AT+CPIN? command to the GSM module to check SIM card exist or not + * Return Value: 0: Success !0:Failure + */ +int atcmd_check_sim_valid(COM_PORT *comport) +{ + int retval = 0; + char recv_buf[ATCMD_REPLY_LEN]; + + retval = send_atcmd_check_request(comport, "AT+CPIN?\r", 800, recv_buf, sizeof(recv_buf)); + if(0x00 != retval) + { + retval = 1; + log_warn("AT+CPIN? Check SIM Validation: [FAILED]\n"); + return retval; + } + + if(strstr(recv_buf, "READY")) + { + log_nrml("AT+CPIN? Check SIM Validataion: [OK]\n"); + return 0; + } + else + return -1; +} + +/* Send AT+CSQ command to check GPRS signal*/ +int atcmd_check_gprs_signal(COM_PORT *comport) +{ + char recv_buf[ATCMD_REPLY_LEN]; + int retval; + int signal = -1; + + memset(recv_buf, 0, sizeof(recv_buf)); + retval = send_atcmd_check_request(comport, "AT+CSQ\r", 3000, recv_buf, sizeof(recv_buf)); + if( 0 != retval) + { + log_err("AT+CSQ Check Signal Strength: [FAILED]\n"); + return retval; + } + + split_string_to_value(recv_buf, "%d,%d", &signal, NULL); + + log_nrml("AT+CSQ Check Signal Strength: [%d]\n", signal); + + return signal; +} + +/* Send AT+CREG? command to check SIM card register status */ +int atcmd_check_gprs_register(COM_PORT *comport) +{ + int retval, stat = -1; + char recv_buf[ATCMD_REPLY_LEN]; + + memset(recv_buf, 0, sizeof(recv_buf)); + retval = send_atcmd_check_request(comport, "AT+CREG?\r", 3000, recv_buf, sizeof(recv_buf)); + if( 0 != retval) + { + log_err("AT+CREG? Check SIM card Register: [FAILED]\n"); + return stat; + } + + split_string_to_value(recv_buf, "%d,%d", NULL, &stat); + log_nrml("AT+CREG? Check SIM Card Register: [%d]\n", stat); + + return stat; +} + + +int atcmd_check_gprs_carrier(COM_PORT *comport, char *carrier) +{ + int retval; + char recv_buf[ATCMD_REPLY_LEN]; + + if(carrier == NULL) + { + return -1; + } + + retval = send_atcmd_check_request(comport, "AT+COPS?\r", 5000, recv_buf, sizeof(recv_buf)); + if(retval) + { + log_warn("AT+COPS? Check SIM Card Carrier: [FAILED]\n"); + return retval; + } + + split_string_to_value(recv_buf, "%d,%d,%s,%d", NULL, NULL, carrier, NULL); + del_char_from_string(carrier, '\"'); + + log_nrml("AT+COPS? Check SIM Card Carrier: [%s]\n", carrier); + + return 0; +} + +int atcmd_check_gprs_mcc_mnc(COM_PORT *comport, char *mcc_mnc) +{ + int retval; + char recv_buf[ATCMD_REPLY_LEN]; + int status; + char mcc[5]; + char mnc[5]; + char *ptr = NULL; + + retval=send_atcmd_check_ok(comport, "AT+QENG=1\r", 1000); + if(retval) + { + log_err("Send AT command AT+QENG=1 failure\n"); + return retval; + } + + retval = send_atcmd(comport, "AT+QENG?\r", "OK\r\n", "ERROR\r\n", 5000, recv_buf, sizeof(recv_buf)); + if(retval) + { + log_err("AT+QENG? Check GPRS MCC and MNC failure\n"); + return retval; + } + + /* AT+QENG? respond value: + * +QENG: 1,0 + * +QENG: 0,460,00,7108,80c4,554,41,-95,18,50,0,10,x,x,x,x,x,x,x + */ + if(NULL != (ptr=strrchr (recv_buf, ':')) ) + { + split_string_to_value(ptr, "%d,%s,%s,%s", &status, mcc, mnc, NULL); + if(!status) + { + sprintf(mcc_mnc, "%s-%s", mcc, mnc); + log_nrml("AT+QGSMLOC=1 Check GPRS Location MCC-MNC: %s\n", mcc_mnc); + return 0; + } + } + + printf("ptr: %s\n", ptr); + + return -1; +} + + +int atcmd_check_gprs_location(COM_PORT *comport, GPRS_LOCATION *loc) +{ + int retval; + char recv_buf[ATCMD_REPLY_LEN]; + int status; + + retval=send_atcmd_check_ok(comport, "AT+QIFGCNT=0\r", 1000); + if(retval) + { + log_warn("Send AT command AT+QIFGCNT=0 failure\n"); + return retval; + } + + retval = send_atcmd_check_request(comport, "AT+QGSMLOC=1\r", 10000, recv_buf, sizeof(recv_buf)); + if(retval) + { + log_warn("AT+QGSMLOC=1 Check GPRS Location: [FAILED]\n"); + return retval; + } + + /* +QGSMLOC: 0,114.389210,30.500380,2013/01/16,14:03:12, it's GMT time */ + split_string_to_value(recv_buf, "%d,%s,%s,%s,%s", &status, loc->longitude, loc->latitude, loc->date, loc->time); + + if(status) /* Get LOC failure */ + { + memset(loc->longitude, 0, sizeof(loc->longitude)); + memset(loc->latitude, 0, sizeof(loc->latitude)); + memset(loc->date, 0, sizeof(loc->date)); + memset(loc->time, 0, sizeof(loc->time)); + log_warn("AT+QGSMLOC=1 Check GPRS Location failure: %s\n", recv_buf); + return -1; + } + + log_nrml("GPRS location result=%d latitude,longitude: [%s,%s]\n", status, loc->latitude, loc->longitude); + log_nrml("GPRS Date and time: %s,%s\n", loc->date, loc->time); + + return retval; +} + + +int atcmd_set_network_mode(COM_PORT *comport, int mode) +{ + int retval; + char atcmd[64]={0}; + + sprintf (atcmd, "AT+CNMP=%d\r", mode); + if(0 != (retval=send_atcmd_check_ok(comport, atcmd, 3000)) ) + { + log_warn("AT+CNMP Set Network Mode as %d: [FAILED]\n", mode); + return retval; + } + log_nrml("AT+CNMP=%d Set Network Mode: [OK]\n", mode); + + /* AT+CNAOP=?: 0->Automatic, 1->GSM,WCDMA, 2->WCDMA,GSM */ + strncpy (atcmd, "AT+CNAOP=2\r", sizeof(atcmd)); + if(0 != (retval=send_atcmd_check_ok(comport, atcmd, 3000)) ) + { + log_warn("AT+CNAOP=2 Set Acquisitions order preference to WCDMA,GSM [FAILED]\n"); + return retval; + } + log_nrml("AT+CNAOP=2 Set Network Preference [OK]\n"); + + return 0; +} + +int atcmd_check_gprs_name(COM_PORT *comport, char *name) +{ + int retval; + char recv_buf[ATCMD_REPLY_LEN]; + + if(name == NULL) + { + return -1; + } + + retval = send_atcmd_check_value(comport, "AT+CGMM\r", 5000, recv_buf, sizeof(recv_buf)); + if(retval) + { + log_warn("AT+CGMM Check GPRS Module Name: [FAILED]\n"); + return retval; + } + + strcpy(name, recv_buf); + + log_nrml("AT+CGMM Check GPRS Module Name: [%s]\n", name); + + return 0; +} + + +int atcmd_check_gprs_version(COM_PORT *comport, char *version) +{ + int retval; + char recv_buf[ATCMD_REPLY_LEN]; + + if(version == NULL) + { + return -1; + } + + retval = send_atcmd_check_request(comport, "AT+CGMR\r", 5000, recv_buf, sizeof(recv_buf)); + if(retval) + { + log_warn("AT+CGMR Check GPRS Module Version: [FAILED]\n"); + return retval; + } + + strcpy(version, recv_buf); + log_nrml("AT+CGMR Check GPRS Module Version: [%s]\n", version); + + return 0; +} + +int atcmd_check_gprs_iemi(COM_PORT *comport, char *iemi) +{ + int retval; + char recv_buf[ATCMD_REPLY_LEN]; + + if(iemi == NULL) + { + return -1; + } + + retval = send_atcmd_check_value(comport, "AT+CGSN\r", 5000, recv_buf, sizeof(recv_buf)); + if(retval) + { + log_warn("AT+CGSN Check GPRS Module IEMI: [FAILED]\n"); + return retval; + } + + strcpy(iemi, recv_buf); + log_nrml("AT+CGSN Check GPRS Module IEMI: [%s]\n", iemi); + + return 0; +} + + +int atcmd_check_gprs_network(COM_PORT *comport, int *network) +{ + int retval; + char recv_buf[ATCMD_REPLY_LEN]; + + if(network == NULL) + { + return -1; + } + + retval = send_atcmd_check_request(comport, "AT+CNSMOD?\r", 5000, recv_buf, sizeof(recv_buf)); + if(retval) + { + log_warn("AT+CNSMOD Check Network Mode: [FAILED]\n"); + return retval; + } + + split_string_to_value(recv_buf, "%d,%d", NULL, network); + + log_nrml("AT+CNSMOD? Check Network Mode: [%d]\n", *network); + return 0; +} + + +int atcmd_set_apn(COM_PORT *comport, char *apn) +{ + char atcmd[64]={0}; + int retval; + + sprintf (atcmd, "AT+CGDCONT=1,\"IP\",\"%s\"\r", apn); + if(0 != (retval=send_atcmd_check_ok(comport, atcmd, 2000)) ) + { + log_err("AT+CGDCONT Set APN as \"%s\" [FAILED]\n", apn); + return retval; + } + + log_nrml("AT+CGDCONT Set APN as \"%s\" [OK]\n"); + return retval; +} + + +unsigned char at_match (char *p_pcStr, char *p_pcMatch) +{ + char acBuf [256], + *pcStart = NULL, + *pcTab = NULL; + + pcStart = p_pcMatch; + + while (0 != pcStart) + { + memset (acBuf, 0x00, sizeof (acBuf)); + + pcTab = strchr (pcStart, 9); // Find for TAB + if (0 != pcTab) + { + if (pcTab != pcStart) + { + strncpy (acBuf, pcStart, pcTab - pcStart); + } + pcStart = (0 != *(++pcTab)) ? pcTab : 0; + } + else + { + strcpy (acBuf, pcStart); + pcStart = NULL; + } + if (0 != acBuf [0] && 0 != strstr (p_pcStr, acBuf)) + { + return 0x00; + } + } + return 0x01; +} + + +/*========================================================================================================= + * Parameter Description: + * COM_PORT *comport: The GPRS module data port(/dev/ttyS2); + * char *atCmd: The AT command which will be sent to GPRS module + * char *expect: The EXPECT reply string by GPRS module for the AT command, such as "OK" + * char *error: The ERROR reply string by GPRS module for the AT command, such as "ERROR" + * unsigned long timeout: Read from data port timeout value + * char reply: The AT command reply output buffer + * int reply_len: The AT command reply output buffer length + * + * Return Value: + * int retval: 0->command send OK and "expect" string mached. !0->failure + * char *content: The AT command reply string by modem. + * + *=========================================================================================================*/ + +int send_atcmd(COM_PORT *comport, char *atCmd, char *expect, char *error, + unsigned long timeout, char *reply, int reply_len) +{ + int retval = -1; + unsigned long delay = 200; + unsigned long gap = 300; + unsigned long ulStartTime; + + int iCmdLen = 0, + iRecvLen = 0, + iRecvSize = 0, + iSize = 0; + + + char acRecv[1024]; + char *pcRecvPtr = NULL; + + if(comport->is_connted != 0x01) /* Comport not opened */ + { + log_dbg("Comport not opened.\n"); + return -1; + } + +#if 0 + /*========================================= + *= Pause a while before send AT command = + *=========================================*/ + if(0 != delay) + { + ulStartTime = time_now(); + while (time_elapsed(ulStartTime) < delay) + { + micro_second_sleep(1); + } + } +#endif + + /*==================== + *= Throw Rubbish = + *====================*/ + ulStartTime = time_now(); + memset(&acRecv, 0, sizeof(acRecv)); + + while (time_elapsed(ulStartTime) < delay) + { + iSize = comport_recv(comport, acRecv, 1, 50); + if(iSize <= 0) + { + break; + } + micro_second_sleep(1); + } + + /*==================== + *= Send AT command = + *====================*/ + + iCmdLen = strlen(atCmd); + retval = comport_send (comport, atCmd, iCmdLen); + if (0 != retval) + { + retval = 0x02; + goto CleanUp; + } + + /*=================================================== + *= Pause a while before read command response. + *===================================================*/ + if(0 != gap) + { + ulStartTime = time_now(); + while (time_elapsed(ulStartTime) < gap) + { + micro_second_sleep(1); + } + } + + memset (acRecv, 0, sizeof (acRecv)); + pcRecvPtr = acRecv; + iRecvLen = 0; + iRecvSize = sizeof (acRecv); + + retval = -1; + ulStartTime = time_now(); + + while (time_elapsed(ulStartTime) < timeout) + { + if ( iRecvLen < (iRecvSize-1) ) + { + iSize = comport_recv (comport, pcRecvPtr, 1, 50); + if (iSize >0) + { + iRecvLen += iSize; + pcRecvPtr += iSize; + acRecv [iRecvSize-1] = 0; + + /*======================================== + * Match the received with expect String = + *========================================*/ + if(NULL != expect) + { + if (0x00 == at_match(acRecv, expect)) + { + retval = 0; + goto CleanUp; + } + } + + /*======================================== + * Match the received with error String = + *========================================*/ + if(NULL != error) + { + if (0x00 == at_match(acRecv, error)) + { + retval = -3; + goto CleanUp; + } + } + } /*End of (iSize > 0) */ + } /* End of (iRecvLen < (iRecvSize-1)) */ + + micro_second_sleep(1); + } /* End of time_elapsed(ulStartTime) < timeout */ + + + if(NULL==expect) + retval = 0x00; + else + retval = -4; + +CleanUp: + //printf("acRecv:\n %s\n", acRecv); + if( NULL != reply) + { + strncpy(reply, acRecv, reply_len); + } + +#if 1 /* Log the command result to log system */ + { + char log[512] = {0}; + snprintf(log, 512, "Send AT command: \"%s\" get reply \"%s\"", atCmd, acRecv); + int i = 0; + for (i=0; i<512; i++) + { + if('\r'==log[i] || '\n'==log[i] || '\t'==log[i]) + { + log[i]=' '; + } + else if (0 == log[i]) + { + break; + } + } + log_info("%s\n", log); + } +#endif + + return retval; +} diff --git a/program/cp_library/cp_atcmd.h b/program/cp_library/cp_atcmd.h new file mode 100644 index 0000000..6c20b93 --- /dev/null +++ b/program/cp_library/cp_atcmd.h @@ -0,0 +1,68 @@ +/******************************************************************************** + * Copyright: (C) guowenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: atcmd.h + * Description: This is the head file for atcmd.c + * + * Version: 1.0.0(05/15/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "05/15/2012 05:31:10 PM" + * + ********************************************************************************/ + +#ifndef __CP_ATCMD_H +#define __CP_ATCMD_H + +#include "cp_comport.h" + +/* AT+CPSI command return important result*/ +typedef struct _GPRS_LOCATION +{ + char longitude[15]; + char latitude[15]; + char date[15]; + char time[15]; + char mcc_mnc[16];/* Mobile Country Code, China is 460 */ +} GPRS_LOCATION; + +typedef struct _REGISTER_INFO +{ + int type; /* SIM card register type: REG_HOMEWORK,REG_SEARCHING... */ + int signal; /* GPRS signal */ + char carrier[64];/* Network operator */ + GPRS_LOCATION loc; /* Location */ +} REGISTER_INFO; + + +typedef struct _HARDWARE_INFO +{ + char model[64]; /* AT+CGMM check GPRS module model */ + char mrev[64]; /* AT+CGMR check GPRS module revision */ + char iemi[64]; /* AT+CGSN check GPRS module IEMI(International Mobile station Equipment Identity) number */ +} HW_INFO; + +extern int send_atcmd(COM_PORT *st_comport, char *atCmd, char *expect, char *error, + unsigned long timeout, char *reply, int reply_len); + +extern int send_atcmd_check_ok(COM_PORT *comport, char *atcmd, unsigned long timeout); +extern int send_atcmd_check_value(COM_PORT *comport, char *atcmd, unsigned long timeout, char *buf, int buf_len); +extern int send_atcmd_check_request(COM_PORT *comport, char *atcmd, unsigned long timeout, char *buf, int buf_len); + + +extern int atcmd_check_at_ready(COM_PORT *comport); /* Send ATE0 command */ +extern int atcmd_check_sim_valid(COM_PORT *comport); /* Send AT+CPIN? command */ +extern int atcmd_check_gprs_signal(COM_PORT *comport); /* Send AT+CSQ command */ +extern int atcmd_check_gprs_register(COM_PORT *comport); +extern int atcmd_check_gprs_carrier(COM_PORT *comport, char *carrier); +extern int atcmd_check_gprs_name(COM_PORT *comport, char *name); +extern int atcmd_check_gprs_version(COM_PORT *comport, char *version); +extern int atcmd_check_gprs_iemi(COM_PORT *comport, char *iemi); +extern int atcmd_check_gprs_network(COM_PORT *comport, int *network); +extern int atcmd_check_gprs_location(COM_PORT *comport, GPRS_LOCATION *location); +extern int atcmd_check_gprs_mcc_mnc(COM_PORT *comport, char *mcc_mnc); + +extern int atcmd_set_network_mode(COM_PORT *comport, int mode); +extern int atcmd_set_apn(COM_PORT *comport, char *apn); + +#endif /* _CP_ATCMD_H */ diff --git a/program/cp_library/cp_common.h b/program/cp_library/cp_common.h new file mode 100644 index 0000000..0dd6125 --- /dev/null +++ b/program/cp_library/cp_common.h @@ -0,0 +1,68 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_common.h + * Description: This head file is for some common definition + * + * Version: 1.0.0(11/13/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/13/2012 01:48:01 PM" + * + ********************************************************************************/ + +#ifndef __CP_COMMON_H +#define __CP_COMMON_H + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#ifndef offsetof +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#endif + +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) + +//#define MEM_LEAK_CHECK + +static inline void *_t_malloc(size_t size +#ifdef MEM_LEAK_CHECK +, const char *file, unsigned int line +#endif + ) +{ + void *ptr; + + if ((ptr = malloc (size))) + memset (ptr, 0, size); +#ifdef MEM_LEAK_CHECK + printf ("MALLOC,0x%p @%s:%u\n", ptr, file, line); +#endif + return ptr; +} + +static inline void _t_free(void *ptr +#ifdef MEM_LEAK_CHECK +, const char *file, unsigned int line +#endif + ) +{ +#ifdef MEM_LEAK_CHECK + printf ("FREE,0x%p @%s:%u\n", ptr, file, line); +#endif + free(ptr); +} + +#ifdef MEM_LEAK_CHECK +#define t_free(p) if(p){ _t_free(p, __FILE__, __LINE__); p=NULL; } +#define t_malloc(s) _t_malloc(s, __FILE__, __LINE__) +#else +#define t_free(p) if(p){ _t_free(p); p=NULL; } +#define t_malloc(s) _t_malloc(s) +#endif + +#endif + diff --git a/program/cp_library/cp_comport.c b/program/cp_library/cp_comport.c new file mode 100644 index 0000000..2aecafa --- /dev/null +++ b/program/cp_library/cp_comport.c @@ -0,0 +1,600 @@ +/* ******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_comport.c + * Description: It's the comport operate library. + * + * Version: 1.0.0(10/17/2011~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/17/2011 03:33:25 PM" + * + ********************************************************************************/ + +#include "cp_comport.h" + +/************************************************************************************** + * Description: Set the comport structure + * Input Args: dev_name: The comport device name path, such as '/dev/ttyS3' + * baudrate: The baudrate, such as 115200 + * settings: The databit,parity,stopbit,flowctrl settings, such as '8N1N' + * Output Args: NONE + * Return Value: The COM_PORT structure pointer. + *************************************************************************************/ +COM_PORT *comport_init(const char *dev_name, int baudrate, const char *settings) +{ + COM_PORT *comport = NULL; + if (NULL == (comport = (COM_PORT *) malloc(sizeof(COM_PORT)))) + { + return NULL; + } + memset(comport, 0, sizeof(COM_PORT)); + comport->is_connted = 0; + comport->frag_size = 128; + + strncpy(comport->dev_name, dev_name, DEVNAME_LEN); + comport->baudrate = baudrate; + + set_settings(comport, settings); +#ifdef COM_DEBUG + disp_settings(comport); +#endif + + return comport; +} + +#ifdef COM_DEBUG +void disp_settings(COM_PORT * comport) +{ + COM_PRINT("Device:\t\t\t\"%s\"\n", comport->dev_name); + COM_PRINT("Baudrate:\t\t%ld\n", comport->baudrate); + COM_PRINT("DataBit:\t\t\'%d\'\n", comport->databit); + switch (comport->parity) + { + case 0: + COM_PRINT("Parity:\t\t\t\'N\'\n"); + break; + case 1: + COM_PRINT("Parity:\t\t\t\'O\'\n"); + break; + case 2: + COM_PRINT("Parity:\t\t\t\'E\'\n"); + break; + case 3: + COM_PRINT("Parity:\t\t\t\'S\'\n"); + break; + } + COM_PRINT("StopBit:\t\t\'%ld\'\n", (long int)comport->stopbit); + switch (comport->flowctrl) + { + case 0: + COM_PRINT("FlowCtrl:\t\t\'N\'\n"); + break; + case 1: + COM_PRINT("FlowCtrl:\t\t\'S\'\n"); + break; + case 2: + COM_PRINT("FlowCtrl:\t\t\'H\'\n"); + break; + case 3: + COM_PRINT("FlowCtrl:\t\t\'B\'\n"); + break; + } + COM_PRINT("\n"); + return; +} +#endif + +/************************************************************************************** + * Description: Set the comport databit,parity,stopbit,flowctrl + * Input Args: comport: the COM_PORT pointer + * settings: The databit/parity/stopbit/flowctrl settings as like "8N1N" + * Output Args: NONE + * Return Value: NONE + *************************************************************************************/ +void set_settings(COM_PORT * comport, const char *settings) +{ + if(NULL==settings || NULL==comport) + return ; + + switch (settings[0]) /* data bit */ + { + case '7': + comport->databit = 7; + break; + case '8': + default: + comport->databit = 8; + break; + } + + switch (settings[1]) /* parity */ + { + case 'O': + case 'o': + comport->parity = 1; + break; + case 'E': + case 'e': + comport->parity = 2; + break; + case 'S': + case 's': + comport->parity = 3; + break; + case 'N': + case 'n': + default: + comport->parity = 0; + break; + } + + switch (settings[2]) /* stop bit */ + { + case '0': + comport->stopbit = 0; + break; + case '1': + default: + comport->stopbit = 1; + break; + } + + switch (settings[3]) /* flow control */ + { + case 'S': + case 's': + comport->flowctrl = 1; + break; + case 'H': + case 'h': + comport->flowctrl = 2; + break; + case 'B': + case 'b': + comport->flowctrl = 3; + break; + case 'N': + case 'n': + default: + comport->flowctrl = 0; + break; + } +} + +void comport_close(COM_PORT * comport) +{ + if (0 != comport->fd) + { + COM_PRINT("Close device \"%s\"\n", comport->dev_name); + close(comport->fd); + } + comport->is_connted = 0x00; + comport->fd = -1; +} + +void comport_term(COM_PORT * comport) +{ + if(NULL == comport) + return; + + if (0 != comport->fd) + { + comport_close(comport); + } + memset(comport, 0x00, sizeof(COM_PORT)); + free(comport); + comport = NULL; + + return; +} + +int comport_open(COM_PORT * comport) +{ + int retval = -1; + struct termios old_cfg, new_cfg; + int old_flags; + long tmp; + + if(NULL==comport) + return -1; + + comport_close(comport); + + + /* Not a TTY device */ + if( !strstr(comport->dev_name, "tty")) + { + COM_PRINT("Open Not tty device \"%s\"\n", comport->dev_name); + comport->fd = open(comport->dev_name, O_RDWR); + retval = comport->fd<0 ? -2 : comport->fd; + goto CleanUp; + } + + comport->fd = open(comport->dev_name, O_RDWR | O_NOCTTY | O_NONBLOCK); + if (comport->fd < 0) + { + retval = -3; + goto CleanUp; + } + COM_PRINT("Open device \"%s\"\n", comport->dev_name); + + if ((-1 != (old_flags = fcntl(comport->fd, F_GETFL, 0))) + && (-1 != fcntl(comport->fd, F_SETFL, old_flags & ~O_NONBLOCK))) + { + // Flush input and output + if (-1 == tcflush(comport->fd, TCIOFLUSH)) + { + retval = -4; + goto CleanUp; + } + } + else // Failure + { + retval = -5; + goto CleanUp; + } + + if (0 != tcgetattr(comport->fd, &old_cfg)) + { + retval = -6; // Failed to get Com settings + goto CleanUp; + } + + memset(&new_cfg, 0, sizeof(new_cfg)); + + /*=====================================*/ + /* Configure comport */ + /*=====================================*/ + + new_cfg.c_cflag &= ~CSIZE; + new_cfg.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); + new_cfg.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); + new_cfg.c_oflag &= ~(OPOST); + + /* Set the data bit */ + switch (comport->databit) + { + case 0x07: + new_cfg.c_cflag |= CS7; + break; + case 0x06: + new_cfg.c_cflag |= CS6; + break; + case 0x05: + new_cfg.c_cflag |= CS5; + break; + default: + new_cfg.c_cflag |= CS8; + break; + } + + /* Set the parity */ + switch (comport->parity) + { + case 0x01: // Odd + new_cfg.c_cflag |= (PARENB | PARODD); + new_cfg.c_cflag |= (INPCK | ISTRIP); + break; + case 0x02: // Even + new_cfg.c_cflag |= PARENB; + new_cfg.c_cflag &= ~PARODD;; + new_cfg.c_cflag |= (INPCK | ISTRIP); + break; + case 0x03: + new_cfg.c_cflag &= ~PARENB; + new_cfg.c_cflag &= ~CSTOPB; + break; + default: + new_cfg.c_cflag &= ~PARENB; + } + + /* Set Stop bit */ + if (0x01 != comport->stopbit) + { + new_cfg.c_cflag |= CSTOPB; + } + else + { + new_cfg.c_cflag &= ~CSTOPB; + } + + /* Set flow control */ + switch (comport->flowctrl) + { + case 1: // Software control + case 3: + new_cfg.c_cflag &= ~(CRTSCTS); + new_cfg.c_iflag |= (IXON | IXOFF); + break; + case 2: // Hardware control + new_cfg.c_cflag |= CRTSCTS; // Also called CRTSCTS + new_cfg.c_iflag &= ~(IXON | IXOFF); + break; + default: // NONE + new_cfg.c_cflag &= ~(CRTSCTS); + new_cfg.c_iflag &= ~(IXON | IXOFF); + break; + } + + /* Set baudrate */ + switch (comport->baudrate) + { + case 115200: + tmp = B115200; + break; + case 57600: + tmp = B57600; + break; + case 38400: + tmp = B38400; + break; + case 19200: + tmp = B19200; + break; + case 9600: + tmp = B9600; + break; + case 4800: + tmp = B4800; + break; + case 2400: + tmp = B2400; + break; + case 1800: + tmp = B1800; + break; + case 1200: + tmp = B1200; + break; + case 600: + tmp = B600; + break; + case 300: + tmp = B300; + break; + case 200: + tmp = B200; + break; + case 150: + tmp = B150; + break; + case 134: + tmp = B134; + break; + case 110: + tmp = B110; + break; + case 75: + tmp = B75; + break; + case 50: + tmp = B50; + break; + default: + tmp = B115200; + } + cfsetispeed(&new_cfg, tmp); + cfsetispeed(&new_cfg, tmp); + + /* Set the Com port timeout settings */ + new_cfg.c_cc[VMIN] = 0; + new_cfg.c_cc[VTIME] = 0; + + tcflush(comport->fd, TCIFLUSH); + if (0 != tcsetattr(comport->fd, TCSANOW, &new_cfg)) + { + retval = -7; // Failed to set device com port settings + goto CleanUp; + } + + COM_PRINT("Connected device \"%s\".\n", comport->dev_name); + comport->is_connted = 0x01; + retval = comport->fd; + +CleanUp: + COM_PRINT("Open device \"%s\" %s.\n", comport->dev_name, retval>0 ? "successfully" : "failure"); + return retval; +} + +void nonblock() +{ + struct termios ttystate; + + //get the terminal state + tcgetattr(STDIN_FILENO, &ttystate); + + //turn off canonical mode + ttystate.c_lflag &= ~ICANON; + //minimum of number input read. + ttystate.c_cc[VMIN] = 1; + + //set the terminal attributes. + tcsetattr(STDIN_FILENO, TCSANOW, &ttystate); +} + +int kbhit() +{ + struct timeval tv; + fd_set fds; + tv.tv_sec = 0; + tv.tv_usec = 0; + FD_ZERO(&fds); + FD_SET(STDIN_FILENO, &fds); //STDIN_FILENO is 0 + select(STDIN_FILENO + 1, &fds, NULL, NULL, &tv); + return FD_ISSET(STDIN_FILENO, &fds); +} + +int comport_recv(COM_PORT * comport, char *buf, int buf_size, unsigned long timeout) +{ + int retval = 0; // Function return value + int iRet; + fd_set stReadFds, stExcpFds; + struct timeval stTime; + + if (NULL == buf || 0 >= buf_size) + { + COM_PRINT("%s() usage error.\n", __FUNCTION__); + retval = -1; + goto CleanUp; + } + + if (0x01 != comport->is_connted) + { + COM_PRINT("%s() comport not connected.\n", __FUNCTION__); + retval = -2; + goto CleanUp; + } + + //printf("bufsize=%d timeout=%lu\n", buf_size, timeout); + + FD_ZERO(&stReadFds); + FD_ZERO(&stExcpFds); + FD_SET(comport->fd, &stReadFds); + FD_SET(comport->fd, &stExcpFds); + + if (0xFFFFFFFF != timeout) + { + stTime.tv_sec = (time_t) (timeout / 1000); + stTime.tv_usec = (long)(1000 * (timeout % 1000)); + + iRet = select(comport->fd + 1, &stReadFds, 0, &stExcpFds, &stTime); + if (0 == iRet) + { + retval = 0; // No data in Com port buffer + goto CleanUp; + } + else if (0 < iRet) + { + if (0 != FD_ISSET(comport->fd, &stExcpFds)) + { + retval = -6; // Error during checking recv status + COM_PRINT("Error checking recv status.\n"); + goto CleanUp; + } + + if (0 == FD_ISSET(comport->fd, &stReadFds)) + { + retval = 0; // No incoming data + COM_PRINT("No incoming data.\n"); + goto CleanUp; + } + } + else + { + if (EINTR == errno) + { + COM_PRINT("catch interrupt signal.\n"); + retval = 0; // Interrupted signal catched + } + else + { + COM_PRINT("Check recv status failure.\n"); + retval = -7; // Error during checking recv status + } + + goto CleanUp; + } + } + + usleep(10000); /* sleep for 10ms for data incoming */ + + // Get data from Com port + iRet = read(comport->fd, buf, buf_size); + if (0 > iRet) + { + if (EINTR == errno) + retval = 0; // Interrupted signal catched + else + retval = -3; // Failed to read Com port + + goto CleanUp; + } + +#if 0 + { + int i=0; + printf("Receive %d bytes data: \n", iRet); + for(i=0; i<iRet; i++) + { + printf("0x%02x ", buf[i]); + } + printf("\n"); + } +#endif + + retval = iRet; + + CleanUp: + return retval; + +} + +int comport_send(COM_PORT * comport, char *buf, int send_bytes) +{ + char *ptr, *end; + int retval = 0; + int send = 0; + + if (NULL == buf || 0 >= send_bytes) + { + COM_PRINT("%s() Usage error.\n", __FUNCTION__); + retval = -1; + goto CleanUp; + } + + if (0x01 != comport->is_connted) // Comport not opened ? + { + retval = -3; + COM_PRINT("Serail not connected.\n"); + goto CleanUp; + } + + //printf("Send %s with %d bytes.\n", buf, send_bytes); + + // Large data, then slice them and send + if (comport->frag_size < send_bytes) + { + ptr = buf; + end = buf + send_bytes; + + do + { + // Large than frag_size + if (comport->frag_size < (end - ptr)) + { + send = write(comport->fd, ptr, comport->frag_size); + if (0 >= send || comport->frag_size != send) + { + retval = -4; + goto CleanUp; + } + ptr += comport->frag_size; + } + else // Less than frag_size, maybe last fragmention. + { + send = write(comport->fd, ptr, (end - ptr)); + if (0 >= send || (end - ptr) != send) + { + retval = -4; + goto CleanUp; + } + ptr += (end - ptr); + } + } + while (ptr < end); + } + else // The send data is not large than a fragmention. + { + send = write(comport->fd, buf, send_bytes); + if (0 >= send || send_bytes != send) + { + retval = -5; + goto CleanUp; + } + } + + CleanUp: + return retval; +} + diff --git a/program/cp_library/cp_comport.h b/program/cp_library/cp_comport.h new file mode 100644 index 0000000..4dea2f1 --- /dev/null +++ b/program/cp_library/cp_comport.h @@ -0,0 +1,67 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_comport.h + * Description: This head file is for the common TTY/Serial port operator library + * + * Version: 1.0.0(10/17/2011~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/17/2011 03:33:25 PM" + * + ********************************************************************************/ +#ifndef _CP_COMPORT_H +#define _CP_COMPORT_H + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <getopt.h> +#include <fcntl.h> +#include <errno.h> +#include <termios.h> +#include <sys/stat.h> +#include <sys/wait.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/select.h> + +#define BUF_64 64 + +#ifndef DEVNAME_LEN +#define DEVNAME_LEN 64 +#endif + +//#define COM_DEBUG +#ifdef COM_DEBUG +#define COM_PRINT(format,args...) printf(format, ##args) +#else +#define COM_PRINT(format,args...) do{} while(0); +#endif + +//#define msleep(m) {struct timespec cSleep; cSleep.tv_sec = 0; cSleep.tv_nsec = m * 1000; nanosleep(&cSleep, 0);} + +typedef struct __COM_PORT +{ + unsigned char databit, parity, stopbit, flowctrl, is_connted; + char dev_name[DEVNAME_LEN]; + unsigned char used; /* This comport used or not now */ + int fd; + int frag_size; + long baudrate; +} COM_PORT; + +COM_PORT *comport_init(const char *dev_name, int baudrate, const char *settings); +void comport_close(COM_PORT * comport); +int comport_open(COM_PORT * comport); +void comport_term(COM_PORT * comport); +int comport_recv(COM_PORT * comport, char *buf, int buf_size, unsigned long timeout); +int comport_send(COM_PORT * comport, char *buf, int send_bytes); + +void set_settings(COM_PORT * comport, const char *settings); +void disp_settings(COM_PORT * comport); +void nonblock(); +int kbhit(); + +#endif diff --git a/program/cp_library/cp_dictionary.c b/program/cp_library/cp_dictionary.c new file mode 100644 index 0000000..96fb783 --- /dev/null +++ b/program/cp_library/cp_dictionary.c @@ -0,0 +1,398 @@ +/*-------------------------------------------------------------------------*/ +/** + @file cp_dictionary.c + @author N. Devillard + @brief Implements a dictionary for string variables. + + This module implements a simple dictionary object, i.e. a list + of string/string associations. This object is useful to store e.g. + informations retrieved from a configuration file (ini files). +*/ +/*--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------------- + Includes + ---------------------------------------------------------------------------*/ +#include "cp_dictionary.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +/** Maximum value size for integers and doubles. */ +#define MAXVALSZ 1024 + +/** Minimal allocated number of entries in a dictionary */ +#define DICTMINSZ 128 + +/** Invalid key token */ +#define DICT_INVALID_KEY ((char*)-1) + +/*--------------------------------------------------------------------------- + Private functions + ---------------------------------------------------------------------------*/ + +/* Doubles the allocated size associated to a pointer */ +/* 'size' is the current allocated size. */ +static void * mem_double(void * ptr, int size) +{ + void * newptr ; + + newptr = calloc(2*size, 1); + if (newptr==NULL) { + return NULL ; + } + memcpy(newptr, ptr, size); + free(ptr); + return newptr ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Duplicate a string + @param s String to duplicate + @return Pointer to a newly allocated string, to be freed with free() + + This is a replacement for strdup(). This implementation is provided + for systems that do not have it. + */ +/*--------------------------------------------------------------------------*/ +static char * xstrdup(const char * s) +{ + char * t ; + if (!s) + return NULL ; + t = (char*)malloc(strlen(s)+1) ; + if (t) { + strcpy(t,s); + } + return t ; +} + +/*--------------------------------------------------------------------------- + Function codes + ---------------------------------------------------------------------------*/ +/*-------------------------------------------------------------------------*/ +/** + @brief Compute the hash key for a string. + @param key Character string to use for key. + @return 1 unsigned int on at least 32 bits. + + This hash function has been taken from an Article in Dr Dobbs Journal. + This is normally a collision-free function, distributing keys evenly. + The key is stored anyway in the struct so that collision can be avoided + by comparing the key itself in last resort. + */ +/*--------------------------------------------------------------------------*/ +unsigned dictionary_hash(const char * key) +{ + int len ; + unsigned hash ; + int i ; + + len = strlen(key); + for (hash=0, i=0 ; i<len ; i++) { + hash += (unsigned)key[i] ; + hash += (hash<<10); + hash ^= (hash>>6) ; + } + hash += (hash <<3); + hash ^= (hash >>11); + hash += (hash <<15); + return hash ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Create a new dictionary object. + @param size Optional initial size of the dictionary. + @return 1 newly allocated dictionary objet. + + This function allocates a new dictionary object of given size and returns + it. If you do not know in advance (roughly) the number of entries in the + dictionary, give size=0. + */ +/*--------------------------------------------------------------------------*/ +dictionary * dictionary_new(int size) +{ + dictionary * d ; + + /* If no size was specified, allocate space for DICTMINSZ */ + if (size<DICTMINSZ) size=DICTMINSZ ; + + if (!(d = (dictionary *)calloc(1, sizeof(dictionary)))) { + return NULL; + } + d->size = size ; + d->val = (char **)calloc(size, sizeof(char*)); + d->key = (char **)calloc(size, sizeof(char*)); + d->hash = (unsigned int *)calloc(size, sizeof(unsigned)); + return d ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete a dictionary object + @param d dictionary object to deallocate. + @return void + + Deallocate a dictionary object and all memory associated to it. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_del(dictionary * d) +{ + int i ; + + if (d==NULL) return ; + for (i=0 ; i<d->size ; i++) { + if (d->key[i]!=NULL) + free(d->key[i]); + if (d->val[i]!=NULL) + free(d->val[i]); + } + free(d->val); + free(d->key); + free(d->hash); + free(d); + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get a value from a dictionary. + @param d dictionary object to search. + @param key Key to look for in the dictionary. + @param def Default value to return if key not found. + @return 1 pointer to internally allocated character string. + + This function locates a key in a dictionary and returns a pointer to its + value, or the passed 'def' pointer if no such key can be found in + dictionary. The returned character pointer points to data internal to the + dictionary object, you should not try to free it or modify it. + */ +/*--------------------------------------------------------------------------*/ +char * dictionary_get(dictionary * d, const char * key, char * def) +{ + unsigned hash ; + int i ; + + hash = dictionary_hash(key); + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + /* Compare hash */ + if (hash==d->hash[i]) { + /* Compare string, to avoid hash collisions */ + if (!strcmp(key, d->key[i])) { + return d->val[i] ; + } + } + } + return def ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Set a value in a dictionary. + @param d dictionary object to modify. + @param key Key to modify or add. + @param val Value to add. + @return int 0 if Ok, anything else otherwise + + If the given key is found in the dictionary, the associated value is + replaced by the provided one. If the key cannot be found in the + dictionary, it is added to it. + + It is Ok to provide a NULL value for val, but NULL values for the dictionary + or the key are considered as errors: the function will return immediately + in such a case. + + Notice that if you dictionary_set a variable to NULL, a call to + dictionary_get will return a NULL value: the variable will be found, and + its value (NULL) is returned. In other words, setting the variable + content to NULL is equivalent to deleting the variable from the + dictionary. It is not possible (in this implementation) to have a key in + the dictionary without value. + + This function returns non-zero in case of failure. + */ +/*--------------------------------------------------------------------------*/ +int dictionary_set(dictionary * d, const char * key, const char * val) +{ + int i ; + unsigned hash ; + + if (d==NULL || key==NULL) return -1 ; + + /* Compute hash for this key */ + hash = dictionary_hash(key) ; + /* Find if value is already in dictionary */ + if (d->n>0) { + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + if (hash==d->hash[i]) { /* Same hash value */ + if (!strcmp(key, d->key[i])) { /* Same key */ + /* Found a value: modify and return */ + if (d->val[i]!=NULL) + free(d->val[i]); + d->val[i] = val ? xstrdup(val) : NULL ; + /* Value has been modified: return */ + return 0 ; + } + } + } + } + /* Add a new value */ + /* See if dictionary needs to grow */ + if (d->n==d->size) { + + /* Reached maximum size: reallocate dictionary */ + d->val = (char **)mem_double(d->val, d->size * sizeof(char*)) ; + d->key = (char **)mem_double(d->key, d->size * sizeof(char*)) ; + d->hash = (unsigned int *)mem_double(d->hash, d->size * sizeof(unsigned)) ; + if ((d->val==NULL) || (d->key==NULL) || (d->hash==NULL)) { + /* Cannot grow dictionary */ + return -1 ; + } + /* Double size */ + d->size *= 2 ; + } + + /* Insert key in the first empty slot. Start at d->n and wrap at + d->size. Because d->n < d->size this will necessarily + terminate. */ + for (i=d->n ; d->key[i] ; ) { + if(++i == d->size) i = 0; + } + /* Copy key */ + d->key[i] = xstrdup(key); + d->val[i] = val ? xstrdup(val) : NULL ; + d->hash[i] = hash; + d->n ++ ; + return 0 ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete a key in a dictionary + @param d dictionary object to modify. + @param key Key to remove. + @return void + + This function deletes a key in a dictionary. Nothing is done if the + key cannot be found. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_unset(dictionary * d, const char * key) +{ + unsigned hash ; + int i ; + + if (key == NULL) { + return; + } + + hash = dictionary_hash(key); + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + /* Compare hash */ + if (hash==d->hash[i]) { + /* Compare string, to avoid hash collisions */ + if (!strcmp(key, d->key[i])) { + /* Found key */ + break ; + } + } + } + if (i>=d->size) + /* Key not found */ + return ; + + free(d->key[i]); + d->key[i] = NULL ; + if (d->val[i]!=NULL) { + free(d->val[i]); + d->val[i] = NULL ; + } + d->hash[i] = 0 ; + d->n -- ; + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Dump a dictionary to an opened file pointer. + @param d Dictionary to dump + @param f Opened file pointer. + @return void + + Dumps a dictionary onto an opened file pointer. Key pairs are printed out + as @c [Key]=[Value], one per line. It is Ok to provide stdout or stderr as + output file pointers. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_dump(dictionary * d, FILE * out) +{ + int i ; + + if (d==NULL || out==NULL) return ; + if (d->n<1) { + fprintf(out, "empty dictionary\n"); + return ; + } + for (i=0 ; i<d->size ; i++) { + if (d->key[i]) { + fprintf(out, "%20s\t[%s]\n", + d->key[i], + d->val[i] ? d->val[i] : "UNDEF"); + } + } + return ; +} + + +/* Test code */ +#ifdef TESTDIC +#define NVALS 20000 +int main(int argc, char *argv[]) +{ + dictionary * d ; + char * val ; + int i ; + char cval[90] ; + + /* Allocate dictionary */ + printf("allocating...\n"); + d = dictionary_new(0); + + /* Set values in dictionary */ + printf("setting %d values...\n", NVALS); + for (i=0 ; i<NVALS ; i++) { + sprintf(cval, "%04d", i); + dictionary_set(d, cval, "salut"); + } + printf("getting %d values...\n", NVALS); + for (i=0 ; i<NVALS ; i++) { + sprintf(cval, "%04d", i); + val = dictionary_get(d, cval, DICT_INVALID_KEY); + if (val==DICT_INVALID_KEY) { + printf("cannot get value for key [%s]\n", cval); + } + } + printf("unsetting %d values...\n", NVALS); + for (i=0 ; i<NVALS ; i++) { + sprintf(cval, "%04d", i); + dictionary_unset(d, cval); + } + if (d->n != 0) { + printf("error deleting values\n"); + } + printf("deallocating...\n"); + dictionary_del(d); + return 0 ; +} +#endif +/* vim: set ts=4 et sw=4 tw=75 */ diff --git a/program/cp_library/cp_dictionary.h b/program/cp_library/cp_dictionary.h new file mode 100644 index 0000000..70fd42c --- /dev/null +++ b/program/cp_library/cp_dictionary.h @@ -0,0 +1,165 @@ + +/*-------------------------------------------------------------------------*/ +/** + @file cp_dictionary.h + @author N. Devillard + @brief Implements a dictionary for string variables. + + This module implements a simple dictionary object, i.e. a list + of string/string associations. This object is useful to store e.g. + informations retrieved from a configuration file (ini files). +*/ +/*--------------------------------------------------------------------------*/ + +#ifndef _CP_DICTIONARY_H_ +#define _CP_DICTIONARY_H_ + +/*--------------------------------------------------------------------------- + Includes + ---------------------------------------------------------------------------*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +/*--------------------------------------------------------------------------- + New types + ---------------------------------------------------------------------------*/ + + +/*-------------------------------------------------------------------------*/ +/** + @brief Dictionary object + + This object contains a list of string/string associations. Each + association is identified by a unique string key. Looking up values + in the dictionary is speeded up by the use of a (hopefully collision-free) + hash function. + */ +/*-------------------------------------------------------------------------*/ +typedef struct _dictionary_ { + int n ; /** Number of entries in dictionary */ + int size ; /** Storage size */ + char ** val ; /** List of string values */ + char ** key ; /** List of string keys */ + unsigned * hash ; /** List of hash values for keys */ +} dictionary ; + + +/*--------------------------------------------------------------------------- + Function prototypes + ---------------------------------------------------------------------------*/ + +/*-------------------------------------------------------------------------*/ +/** + @brief Compute the hash key for a string. + @param key Character string to use for key. + @return 1 unsigned int on at least 32 bits. + + This hash function has been taken from an Article in Dr Dobbs Journal. + This is normally a collision-free function, distributing keys evenly. + The key is stored anyway in the struct so that collision can be avoided + by comparing the key itself in last resort. + */ +/*--------------------------------------------------------------------------*/ +unsigned dictionary_hash(const char * key); + +/*-------------------------------------------------------------------------*/ +/** + @brief Create a new dictionary object. + @param size Optional initial size of the dictionary. + @return 1 newly allocated dictionary objet. + + This function allocates a new dictionary object of given size and returns + it. If you do not know in advance (roughly) the number of entries in the + dictionary, give size=0. + */ +/*--------------------------------------------------------------------------*/ +dictionary * dictionary_new(int size); + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete a dictionary object + @param d dictionary object to deallocate. + @return void + + Deallocate a dictionary object and all memory associated to it. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_del(dictionary * vd); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get a value from a dictionary. + @param d dictionary object to search. + @param key Key to look for in the dictionary. + @param def Default value to return if key not found. + @return 1 pointer to internally allocated character string. + + This function locates a key in a dictionary and returns a pointer to its + value, or the passed 'def' pointer if no such key can be found in + dictionary. The returned character pointer points to data internal to the + dictionary object, you should not try to free it or modify it. + */ +/*--------------------------------------------------------------------------*/ +char * dictionary_get(dictionary * d, const char * key, char * def); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Set a value in a dictionary. + @param d dictionary object to modify. + @param key Key to modify or add. + @param val Value to add. + @return int 0 if Ok, anything else otherwise + + If the given key is found in the dictionary, the associated value is + replaced by the provided one. If the key cannot be found in the + dictionary, it is added to it. + + It is Ok to provide a NULL value for val, but NULL values for the dictionary + or the key are considered as errors: the function will return immediately + in such a case. + + Notice that if you dictionary_set a variable to NULL, a call to + dictionary_get will return a NULL value: the variable will be found, and + its value (NULL) is returned. In other words, setting the variable + content to NULL is equivalent to deleting the variable from the + dictionary. It is not possible (in this implementation) to have a key in + the dictionary without value. + + This function returns non-zero in case of failure. + */ +/*--------------------------------------------------------------------------*/ +int dictionary_set(dictionary * vd, const char * key, const char * val); + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete a key in a dictionary + @param d dictionary object to modify. + @param key Key to remove. + @return void + + This function deletes a key in a dictionary. Nothing is done if the + key cannot be found. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_unset(dictionary * d, const char * key); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Dump a dictionary to an opened file pointer. + @param d Dictionary to dump + @param f Opened file pointer. + @return void + + Dumps a dictionary onto an opened file pointer. Key pairs are printed out + as @c [Key]=[Value], one per line. It is Ok to provide stdout or stderr as + output file pointers. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_dump(dictionary * d, FILE * out); + +#endif diff --git a/program/cp_library/cp_fds.c b/program/cp_library/cp_fds.c new file mode 100644 index 0000000..b0814ea --- /dev/null +++ b/program/cp_library/cp_fds.c @@ -0,0 +1,633 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_fds.c + * Description: This file is the linux epoll basic library + * + * Version: 1.0.0(10/25/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/25/2012 04:55:30 PM" + * + ********************************************************************************/ + +#include <sys/resource.h> +#include "cp_fds.h" +#include "cp_sock.h" +#include "cp_time.h" +#include "cp_common.h" + +/* set maximum file descriptor number that can be opened in this process */ +int cp_fds_setrlimit(int maxfd) +{ + struct rlimit res; + + if(getrlimit(RLIMIT_NOFILE, &res) <0) + { + log_fatal("getrlimit failed: %s\n", strerror(errno)); + return -1; + } + + if(res.rlim_cur < maxfd) + { + res.rlim_cur = maxfd; + if(setrlimit(RLIMIT_NOFILE, &res) <0) + { + log_fatal("setrlimit failed: %s\n", strerror(errno)); + return -2; + } + } + + return 0; +} + +/* Initialze $fds context, if $fds is NULL, then malloc it */ +CP_FDS *cp_fds_init(CP_FDS *fds, int maxevents, int timeout) +{ + int rv = 0; + + if(NULL != fds) + { + memset(fds, 0, sizeof(*fds)); + fds->epfd = -1; + } + else + { + if( !(fds=(CP_FDS *)t_malloc(sizeof(*fds))) ) + { + log_err("fds context malloc failed: %s\n", strerror(errno)); + return NULL; + } + else + { + log_trace("malloc fds with address [%p]\n", fds); + memset(fds, 0, sizeof(*fds)); + fds->epfd = -1; + fds->flag |= FLAG_FDS_MALLOC; + } + } + + /* set maximum file descriptor number that can be opened in this process */ + maxevents = maxevents<CP_DEF_MAX_EVENTS ? maxevents : CP_DEF_MAX_EVENTS; + if( cp_fds_setrlimit(maxevents) ) + { + rv = -2; + goto cleanup; + } + + /* Create epoll file description */ + fds->epfd = epoll_create(maxevents); + if(fds->epfd < 0) + { + rv = -3; + log_fatal("epoll_create failed: %s\n", strerror(errno)); + goto cleanup; + } + log_trace("Open epoll file description [%d]\n", fds->epfd); + + /* Initialise the server/client/task list */ + INIT_LIST_HEAD(&fds->server_list); + INIT_LIST_HEAD(&fds->client_list); + fds->task_array = cp_array_init(NULL, maxevents); + fds->event_queue = cp_queue_init(NULL, maxevents); + + fds->timeout = timeout<0 ? -1 : timeout; + fds->max_event = maxevents; + fds->flag |= FLAG_FDS_INIT; + +cleanup: + if(rv) + { + log_err("Initialise fds contex failed\n"); + cp_fds_term(fds); + return NULL; + } + + log_nrml("Initialise fds contex [%p] ok\n", fds); + return fds; +} + +/* Terminate $fds context, if $fds malloced, then free it */ +void cp_fds_term(CP_FDS *fds) +{ + log_dbg("terminate epoll fds contex now\n"); + + if(!fds) + { + log_err("Invalude input arguments\n"); + return; + } + + if(fds->epfd >= 0) + { + log_dbg("Close epoll file description [%d]\n", fds->epfd); + close(fds->epfd); + } + + if(fds->task_array) + { + cp_array_term(fds->task_array); + } + + if(fds->event_queue) + { + cp_queue_destroy(fds->event_queue); + } + + if(fds->flag& FLAG_FDS_MALLOC) + { + t_free(fds); + } + + log_nrml("Terminate epoll fds contex ok.\n"); + + return ; +} + +/* epoll_ctl() to add this socket to epoll */ +int cp_add_epoll_event(CP_SOCK *sock) +{ + int rv = 0; + CP_FDS *fds; + + if( !sock || !(fds=sock->fds) ) + { + log_err("Invalude input arguments\n"); + return -1; + } + + if( sock->flag&FLAG_SOCK_EPOLLED ) + return 0; /* already put in epoll */ + + if(fds->event_cnt > fds->max_event) + { + log_fatal("No more epoll event space [%d/%d] for socket[%d]\n", + fds->event_cnt, fds->max_event, sock->fd); + return -2; + } + + memset(&sock->event, 0, sizeof(sock->event)); + sock->event.events = EPOLLIN; + sock->event.data.ptr = sock; + + if ( epoll_ctl (fds->epfd, EPOLL_CTL_ADD, sock->fd, &sock->event) < 0) + { + if(EEXIST == errno) + { + log_warn("socket[%d] already registe in epoll\n", sock->fd); + goto cleanup; + } + else + { + log_err("socket[%d] registe in epoll failed: %s\n", sock->fd, strerror(errno)); + rv = -3; + goto cleanup; + } + } + + fds->event_cnt++; + sock->flag |= FLAG_SOCK_EPOLLED; + +cleanup: + if(rv) + log_err("add socket [%d] to epoll event failed\n", sock->fd); + else + log_dbg("add socket [%d] to epoll event ok\n", sock->fd); + + return rv; +} + + +/* epoll_ctl() to mod this socket in epoll */ +int cp_mod_epoll_event(CP_SOCK *sock, int event) +{ + CP_FDS *fds; + + if( !sock || !(fds=sock->fds) ) + { + log_err("Invalude input arguments\n"); + return -1; + } + + if( !(sock->flag&FLAG_SOCK_EPOLLED) ) + { + return -2; /* not in epoll */ + } + + sock->event.events = event; + if ( epoll_ctl (fds->epfd, EPOLL_CTL_MOD, sock->fd, &sock->event) < 0) + { + log_err("modidfy socket [%d] epoll event failed: %s\n", sock->fd, strerror(errno)); + return -3; + } + + log_dbg("modidfy socket [%d] epoll event ok\n", sock->fd); + + return 0; +} + + +void cp_del_epoll_event(CP_SOCK *sock) +{ + CP_FDS *fds; + + if( !sock || !(fds=sock->fds) ) + { + log_err("Invalude input arguments\n"); + return; + } + + if( !(sock->flag&FLAG_SOCK_EPOLLED) ) + return; /* not in epoll */ + + sock->flag &= ~FLAG_SOCK_EPOLLED; + epoll_ctl(fds->epfd, EPOLL_CTL_DEL, sock->fd, NULL); + fds->event_cnt--; + + log_dbg("remove socket [%d] from epoll event ok\n", sock->fd); + return ; +} + +/* add the listen/connect socket into server_list/client_list */ +int cp_fds_add_sock_registry(CP_SOCK *sock) +{ + CP_FDS *fds; + + if( !sock || !(fds=sock->fds) ) + { + log_err("Invalude input arguments\n"); + return -1; + } + + if( sock->flag&FLAG_SOCK_REGISTRY ) + return 0; /* already in registry list */ + + if(CP_SOCK_MODE_CONNECT == sock->mode) + { + log_dbg("regist socket [%p] on CONNECT mode into client list ok\n", sock); + list_add_tail(&sock->rlist, &fds->client_list); + } + else if(CP_SOCK_MODE_LISTEN == sock->mode) + { + log_dbg("regist socket [%p] on LISTEN mode into server list ok\n", sock); + list_add_tail(&sock->rlist, &fds->server_list); + } + else if(CP_SOCK_MODE_ACCEPT==sock->mode && sock->serv_sock) + { + log_dbg("regist socket [%p] on ACCEPT mode into server list ok\n", sock); + list_add_tail(&sock->rlist, &sock->serv_sock->accept_list); + sock->serv_sock->accept_cnt++; + } + else + { + log_err("regist socket [%p] on mode %d into client/server list failed: Unsupport mode.\n", sock, sock->mode); + return -2; + } + + sock->flag |= FLAG_SOCK_REGISTRY; + return 0; +} + +/* remove the listen/connect socket from server_list/client_list */ +void cp_fds_del_sock_registry(CP_SOCK *sock) +{ + if(!sock || !(sock->flag&FLAG_SOCK_REGISTRY) ) + return; /* not in registry list */ + + if(CP_SOCK_MODE_ACCEPT==sock->mode && sock->serv_sock) + sock->serv_sock->accept_cnt--; + + log_dbg("remove socket [%d] from socket registry list ok\n", sock->fd); + list_del(&sock->rlist); + sock->flag &= ~FLAG_SOCK_REGISTRY; + + return ; +} + + +/* Add a socket in task list */ +int cp_fds_add_sock_task(CP_SOCK *sock) +{ + CP_FDS *fds; + int rv; + + if( !sock || !(fds=sock->fds) ) + { + log_err("Invalude input arguments\n"); + return -1; + } + + if( sock->flag&FLAG_SOCK_TASKED ) + return 0; /* already in a list */ + + log_info("add socket [%d] into task list\n", sock->fd); + if( (rv=cp_array_add(fds->task_array, sock)) >=0 ) + { + sock->index = rv; + sock->flag |= FLAG_SOCK_TASKED; + return 0; + } + + return -2; +} + +void cp_fds_del_sock_task(CP_SOCK *sock) +{ + if(!sock || !(sock->flag&FLAG_SOCK_TASKED)) + return ; + + log_info("remove socket [%d:%p] from task list[%p] by index [%d]\n", sock->fd, sock, sock->fds->task_array, sock->index); + + if(sock->index >= 0) + cp_array_rm_byindex(sock->fds->task_array, sock->index); + else + cp_array_rm_bydata(sock->fds->task_array, sock); + + sock->flag &= ~FLAG_SOCK_TASKED; + sock->index = -1; + memset(&sock->event, 0, sizeof(struct epoll_event)); + + return ; +} + +void *cp_fds_sock_enqueue(CP_SOCK *sock) +{ + if(!sock || sock->flag&FLAG_SOCK_INQUEUE || sock->flag&FLAG_SOCK_TASKED || !sock->fds) + return NULL; + + sock->flag |= FLAG_SOCK_INQUEUE; + return cp_enqueue(sock->fds->event_queue, sock); +} + +void *cp_fds_sock_dequeue(CP_FDS *fds) +{ + CP_SOCK *sock = NULL; + + if( !fds ) + return NULL; + + sock = cp_dequeue(fds->event_queue); + sock->flag &= ~FLAG_SOCK_INQUEUE; + + return sock; +} + +void *cp_fds_sock_rmqueue(CP_SOCK *sock) +{ + if(!sock || !(sock->flag&FLAG_SOCK_INQUEUE) || !sock->fds) + return NULL; + + sock->flag &= ~FLAG_SOCK_INQUEUE; + return cp_rmqueue(sock->fds->event_queue, sock); +} + +void cp_fds_list_sock_task(CP_FDS *fds) +{ + int i; + CP_SOCK *sock; + + if(!fds) + return ; + + log_dbg("list all the socket in task list:\n"); + + /* list all the socket from task list */ + cp_list_array_for_each(fds->task_array, i, sock) + { + if(sock) + log_dbg("socket[%d:%p] in task list\n", sock->fd, sock); + } + + return ; +} + + +void cp_fds_destroy_sock(CP_SOCK *sock) +{ + cp_fds_del_sock_task(sock); + cp_fds_sock_rmqueue(sock); + cp_del_epoll_event(sock); + cp_fds_del_sock_registry(sock); + cp_sock_term(sock); + + return ; +} + + +int cp_fds_detect_event(CP_FDS *fds) +{ + int i=0, nfds=0; + CP_SOCK *sock; + struct epoll_event evts[CP_MAX_EVENT_ONCE]; + + if( !fds ) + return -1; + + nfds = epoll_wait(fds->epfd, evts, CP_MAX_EVENT_ONCE, fds->timeout); + ///if(nfds<0 && errno!=EINTR) + if(nfds<0) + { + log_fatal("epoll_wait failure: %s\n", strerror(errno)); + return -2; + } + + if(nfds == 0) + return 0; + + log_dbg("epoll_wait get [%d] events\n", nfds); + + for (i=0; i<nfds; i++) + { + sock=(CP_SOCK *)evts[i].data.ptr; + sock->event = evts[i]; + sock->actv_time = time_now(); + + log_dbg("socket [%d] get event [0x%0x] and added to event queue ok\n", sock->fd, sock->event.events); + if( SOCK_STAT_ALREADY==sock->status ) + cp_fds_sock_enqueue(sock); + } + + return 0; +} + +void cp_fds_proc_event(CP_FDS *fds) +{ + int i; + CP_SOCK *sock; + int rv; + + if( !fds ) + return; + + //cp_fds_list_sock_task(fds); + + //log_trace("Start process the events....\n"); + + /* Process all the socket in task list first, its urgent */ + cp_list_array_for_each(fds->task_array, i, sock) + { + if(sock) + { + if(sock->cbfunc) + { + log_dbg("Process socket [%d] in task list on event [%d]\n", sock->fd, sock->event.events); + rv = sock->cbfunc(sock); + } + else + { + log_err("Process Socket [%d:%p] not implement event callback and remove it\n", sock->fd, sock); + cp_fds_del_sock_task(sock); + } + } + } + + /* Process all the socket in event queue now */ + while(!cp_queue_is_empty(fds->event_queue)) + { + if( NULL!= (sock=cp_fds_sock_dequeue(fds)) ) + { + //log_dbg("after handle one socket count: %d\n", cp_queue_count(fds->event_queue)); + if(sock->cbfunc) + { + log_dbg("Process socket [%d %p] in event queue on event [%d]\n", sock->fd, sock, sock->event.events); + rv = sock->cbfunc(sock); + } + else + { + log_err("Process Socket [%d:%p] not implement event callback and remove it\n", sock->fd, sock); + } + } + } + + //log_trace("End process the events....\n"); + return; +} + + +void cp_sock_term_server(CP_SOCK *serv_sock) +{ + CP_SOCK *sock, *tsock; + + log_warn("terminate server socket [%d] and [%d] accept client now\n", serv_sock->fd, serv_sock->accept_cnt); + list_for_each_entry_safe(sock, tsock, &serv_sock->accept_list, rlist) + { + /*remove all the accept socket from task and registry list, then destroy it*/ + //log_warn("destroy accept socket [%d:%p]\n", sock->fd, sock); + cp_fds_destroy_sock(sock); + } + + /*remove this server socket from task and registry list, then destroy it*/ + log_warn("terminate server socket [%d] and its accept client ok\n", serv_sock->fd); + cp_fds_destroy_sock(serv_sock); + + return ; +} + + +void cp_sock_term_all_server(CP_FDS *fds) +{ + CP_SOCK *sock, *tsock; + + log_dbg("destroy all the listen socket now\n"); + + /* Terminate all the listen socket */ + list_for_each_entry_safe(sock, tsock, &fds->server_list, rlist) + { + cp_sock_term_server(sock); + } + + log_warn("destroy all the listen socket ok\n"); + + return ; +} + + +void cp_sock_term_all_client(CP_FDS *fds) +{ + CP_SOCK *sock = NULL, *tsock; + + log_dbg("destroy all the connect socket now\n"); + /* Terminate all the listen socket */ + list_for_each_entry_safe(sock, tsock, &fds->client_list, rlist) + { + /*remove all the connect socket from task and registry list, then destroy it*/ + cp_fds_destroy_sock(sock); + } + log_warn("destroy all the connect socket ok\n"); +} + +/* Checkout the socket timeout happened or not, if happened then put it in task list */ +void cp_sock_detect_timeout(CP_FDS *fds) +{ + CP_SOCK *sock, *tsock, *serv_sock; + + /* check all the connect socket timeout */ + list_for_each_entry_safe(sock, tsock, &fds->client_list, rlist) + { + /*If the socket timeout value and timeout, then disconnect it */ + if( sock->idle_timeout>0 && time_elapsed(sock->actv_time)>sock->idle_timeout ) + { + log_warn("socket[%d] idle timeout happened and add to task list\n", sock->fd); + log_dbg("last: %lu elapsed time: %lu idel timeout: %lu\n", sock->actv_time, time_elapsed(sock->actv_time), sock->idle_timeout); + sock->event.events = CP_SOCK_EVENT_IDLE_TIMEOUT; + cp_fds_add_sock_task(sock); + } + else if( sock->msg_timeout>0 && sock->msg_time>0 && time_elapsed(sock->msg_time)>sock->msg_timeout ) + { + log_warn("socket[%d] message timeout happened and add to task list\n", sock->fd); + sock->event.events = CP_SOCK_EVENT_MSG_TIMEOUT; + cp_fds_add_sock_task(sock); + } + } + + /* check all the accept socket timeout */ + list_for_each_entry(serv_sock, &fds->server_list, rlist) + { + list_for_each_entry_safe(sock, tsock, &serv_sock->accept_list, rlist) + { + /*If the socket timeout value and timeout, then disconnect it */ + if( sock->idle_timeout>0 && time_elapsed(sock->actv_time)>sock->idle_timeout ) + { + sock->event.events = CP_SOCK_EVENT_IDLE_TIMEOUT; + log_warn("socket[%d] idle timeout happened and add to task list\n", sock->fd); + log_dbg("last: %lu elapsed time: %lu idel timeout: %lu\n", sock->actv_time, time_elapsed(sock->actv_time), sock->idle_timeout); + cp_fds_add_sock_task(sock); + } + else if( sock->msg_timeout>0 && sock->msg_time>0 && time_elapsed(sock->msg_time)>sock->msg_timeout ) + { + sock->event.events = CP_SOCK_EVENT_MSG_TIMEOUT; + log_warn("socket[%d] message timeout happened and add to task list\n", sock->fd); + cp_fds_add_sock_task(sock); + } + } /* list_for_each_entry_safe server accept socket list */ + } /* list_for_each_entry all the server socket list */ +} + + +void cp_sock_term_all_task(CP_FDS *fds) +{ + int i; + CP_SOCK *sock; + + log_dbg("remove all the socket in task list now\n"); + + /* remove all the socket from task array */ + cp_list_array_for_each(fds->task_array, i, sock) + { + //log_warn("remove socket[%d] in task list ok\n", sock->fd); + if(sock) + cp_fds_del_sock_task(sock); + } + + while( !cp_queue_is_empty(fds->event_queue) ) + { + cp_dequeue(fds->event_queue); + } + + log_warn("remove all the socket in task list ok\n"); + + return ; +} + + + diff --git a/program/cp_library/cp_fds.h b/program/cp_library/cp_fds.h new file mode 100644 index 0000000..2d26be9 --- /dev/null +++ b/program/cp_library/cp_fds.h @@ -0,0 +1,114 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_fds.h + * Description: This head file + * + * Version: 1.0.0(10/25/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/25/2012 04:55:37 PM" + * + ********************************************************************************/ + +#ifndef __CP_FDS_H +#define __CP_FDS_H + +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <errno.h> +#include <string.h> + +#include <sys/epoll.h> + +#include "cp_klist.h" +#include "cp_logger.h" +#include "cp_sock.h" +#include "cp_queue.h" +#include "cp_array.h" + +#define CP_MAX_EVENT_ONCE 128 +#define CP_DEF_MAX_EVENTS 1024 +#define CP_DEF_FDS_TIMEOUT 10 + +#define IN_EVENT_LIST 0 +#define IN_TASK_LIST 1 + +#define FLAG_FDS_INIT (1<<0) +#define FLAG_FDS_MALLOC (1<<1) + +struct _CP_SOCK; +struct _CP_FDS; + +typedef struct _CP_FDS +{ + unsigned char flag; /* Refer to follow definition */ + int epfd; /* the epoll_create() returns file description */ + int timeout; /* epoll_wait timeout value */ + int max_event; /* Maximum monitor FD number */ + int event_cnt; /* current socket regist in epoll */ + + struct list_head server_list; /* a list keep all the listen sockets */ + struct list_head client_list; /* a list keep all the connect sockets */ + CP_QUEUE *event_queue; /* a queue keep all these sockets get event happened */ + CP_ARRAY *task_array; /* an array keep all these pending/or other special task socket */ + + /* flag definitions + * 0 0 0 0 0 1 1 1 + * | | | | |______ Initial or not - 0: No 1: Yes + * | | | |________ Malloc or not - 0: Variable, 1: Malloc + * | | |__________ Stop or not - 0: Not stop 1: Stop + * | |____________ Reserved + * |____________________ Reserved + */ +} CP_FDS; + +/* Initialze $fds context, if $fds is NULL, then malloc it */ +extern CP_FDS *cp_fds_init(CP_FDS *fds, int maxevents, int timeout); +/* Terminate $fds context, if $fds malloced, then free it */ +extern void cp_fds_term(CP_FDS *fds); +#define cp_fds_term_clear(fds) {cp_fds_term(fds); fds=NULL;} + +/* epoll_ctl() to add this socket to epoll */ +int cp_add_epoll_event(struct _CP_SOCK *sock); +/* epoll_ctl() to mod this socket in epoll */ +int cp_mod_epoll_event(struct _CP_SOCK *sock, int event); +/* epoll_ctl() to del this socket from epoll */ +void cp_del_epoll_event(struct _CP_SOCK *sock); + + +/* add the socket into the socket registry list */ +int cp_fds_add_sock_registry(struct _CP_SOCK *sock); +/* remove the socket from the socket registry list */ +void cp_fds_del_sock_registry(struct _CP_SOCK *sock); + +/* add the socket into task list */ +int cp_fds_add_sock_task(struct _CP_SOCK *sock); +/* remove the socket from event or task list */ +void cp_fds_del_sock_task(struct _CP_SOCK *sock); +/* list all the socket from task list */ +void cp_fds_list_sock_task(CP_FDS *fds); + +void *cp_fds_sock_enqueue(struct _CP_SOCK *sock); +void *cp_fds_sock_rmqueue(struct _CP_SOCK *sock); +void *cp_fds_sock_dequeue(CP_FDS *fds); + +/* remove the socket from task and registry list and destroy it */ +void cp_fds_destroy_sock(struct _CP_SOCK *sock); +#define cp_fds_destroy_sock_clear(sock) {cp_fds_destroy_sock(sock); sock=NULL;} + +/* epoll_wait detect all these socket get event and add it to task list */ +extern int cp_fds_detect_event(CP_FDS *fds); +/* process all these socket get event and add it to task list */ +extern void cp_fds_proc_event(CP_FDS *fds); +/* Detect all these socket get timeout and add it to task list */ +extern void cp_sock_detect_timeout(CP_FDS *fds); + + +extern void cp_sock_term_server(struct _CP_SOCK *serv_sock); +extern void cp_sock_term_all_server(CP_FDS *fds); +extern void cp_sock_term_all_client(CP_FDS *fds); +extern void cp_sock_term_all_task(CP_FDS *fds); + +#endif /* __CP_FDS_H */ diff --git a/program/cp_library/cp_gprs.c b/program/cp_library/cp_gprs.c new file mode 100644 index 0000000..b50108b --- /dev/null +++ b/program/cp_library/cp_gprs.c @@ -0,0 +1,705 @@ +/********************************************************************************* + * Copyright: (C) guowenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: module.c + * Description: This is the GPRS Power/SIM card control source code + * + * Version: 1.0.0(02/07/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "02/07/2012 03:08:25 PM" + * + ********************************************************************************/ + +#include "cp_gprs.h" +#include "cp_hal.h" +#include "cp_proc.h" +#include "cp_gsmmux.h" +#include "at91_ioctl.h" + +int init_gsm_module(MODULE_INFO *module) +{ + int i=0; + char devname[DEVNAME_LEN]; + + log_info("Initialize GSM module context\n"); + + memset(module, 0, sizeof(*module)); + + module->event = REQ_POWER_RESET; /* Request to power on GPRS */ + + pthread_mutex_init(&module->lock, NULL); + + if( !(module->gsmport=comport_init(GSM_DATAPORT, 115200, "8N1N")) ) + { + return -1; + } + + /* Initialize the GPRS dataport pointer */ + module->comport_cnt = MAX_DATAPORT; + for(i=0; i<module->comport_cnt; i++) + { + snprintf(devname, DEVNAME_LEN, "%s%d", CMUX_DATAPORT, i+CMUX_PORT_START_INDEX); + module->comport[i] = comport_init(devname, 115200, "8N1N"); + if(NULL == module->comport[i]) + goto ERROR; + + //log_dbg("Initialise comport [%p] on %s on baudrate 115200 with 8N1N\n", module->comport[i], devname); + } + + return 0; + +ERROR: + while(i-- >= 0) + { + comport_term(module->comport[i]); + } + return -2; +} + + +/* + * Description: close all the GPRS control port device. + * + * Return Value: NONE + */ +void close_gsm_dataport(MODULE_INFO *module) +{ + int i; + + for(i=0; i<module->comport_cnt; i++) + { + log_nrml("Close GPRS dataport %s=>[fd:%d]\n", module->comport[i]->dev_name, module->comport[i]->fd); + comport_close(module->comport[i]); + } + + return ; +} + +/* + * Description: open all the GPRS data port device. + * + * Return Value: 0: Open successfully !0: Open failure + */ +int open_gsm_dataport(MODULE_INFO *module) +{ + int i, retval = -1; + + for(i=0; i<module->comport_cnt; i++) + { + if( (retval=comport_open(module->comport[i])) < 0) + { + log_err("Open GPRS dataport %s failure: %d\n", module->comport[i]->dev_name, retval); + goto ERROR; + } + log_nrml("Open GPRS dataport[%p] %s=>[fd:%d]\n", module->comport, module->comport[i]->dev_name, module->comport[i]->fd); + } + + return 0; + +ERROR: + close_gsm_dataport(module); + return retval; +} + + +/* + * Description: Alloc a comport from the comport poor for used, for we must make sure + * PPP thread can grasp a comport to work, so we will always preserved + * first comport for PPP thread. + * + * Return Value: NULL: No comport left !NULL: The alloced comport pointer + */ +COM_PORT *alloc_gsm_dataport(char *who, MODULE_INFO *module) +{ + static int lock = 0; + int i; + COM_PORT *comport = NULL; + + if(lock) + return NULL; + + lock = 1; + + /* Preserve first comport for PPP thread */ + for(i=0; i<module->comport_cnt; i++) + { + if(module->comport[i]->used != YES) + { + comport = module->comport[i]; + comport->used = YES; + break; + } + } + + lock = 0; + + if(comport) + { + log_dbg("%s allocate GPRS dataport[%d] %s=>[fd:%d] ok\n", who, i, comport->dev_name, comport->fd); + module->users++; + } + else + { + log_dbg("%s allocate GPRS dataport failure\n", who); + } + + + return comport; +} + +/* + * Description: Free a comport to the comport poor when we no need it. + * + * Return Value: NONE + */ +void free_gsm_dataport(char *who, MODULE_INFO *module, COM_PORT **comport) +{ + int i; + + /* Preserve first comport for PPP thread */ + for(i=0; i<module->comport_cnt; i++) + { + if(module->comport[i] == *comport) + { + log_dbg("%s free GPRS dataport %s=>[fd:%d]\n", who, (*comport)->dev_name, (*comport)->fd); + module->comport[i]->used = NO; + module->users--; + *comport = NULL; + break; + } + } + + return ; +} + + +/* + * Description: Power on the GPRS module and open all the gprs data port. For when GPRS power off, + * the GPRS module USB convert serial comport device lost, so we must bind them together. + * Return Value: 0: Open successfully !0: Open failure + */ +int power_on_module(MODULE_INFO *module) +{ + int rv = 0; + log_dbg("Turn on GPRS module now\n"); + + if( ON == (module->pwr_status=hal_get_gprs_power()) ) + { + rv = 0; + log_dbg("GPRS module already power on\n"); + goto cleanup; + } + + if( (rv=hal_turn_gprs_power(ON)) || ON!=hal_get_gprs_power()) + { + log_err("Turn on GPRS module failure: rv=%d power=%d\n", rv, hal_get_gprs_power()); + rv = -1; + goto cleanup; + } + + micro_second_sleep(500); + + if( comport_open(module->gsmport) < 0) + { + log_err("Open GSM serial port [%s] failure\n", module->gsmport->dev_name); + return -2; + } + + if( !atcmd_check_power_on(module->gsmport) ) + { + log_err("Send ATE0 check GPRS module AT command failure\n", module->gsmport->dev_name); + return -2; + } + + attach_gsm0710(module->gsmport); + + if( 0 != open_gsm_dataport(module) ) + { + rv = -3; + log_err("Open GPRS module comport failure\n"); + goto cleanup; + } + +cleanup: + + if(!rv) + { + module->ready = MODULE_READY; + log_nrml("Turn on GPRS module succesfully\n"); + } + else + { + module->ready = NOT_READY; + log_nrml("Turn on GPRS module failed, rv=%d\n", rv); + } + + module->ready = 0!=rv ? NOT_READY : MODULE_READY; + memset(&(module->reg), 0, sizeof(REGISTER_INFO)); + module->pwr_status = hal_get_gprs_power(); + + return rv; +} + +/* + * Description: Power off the GPRS module and close all the gprs data port. For when GPRS power off, + * the GPRS module USB convert serial comport device lost, so we must bind them together. + * Return Value: 0: Open successfully !0: Open failure + */ +int power_off_module(MODULE_INFO *module) +{ + if( OFF == (module->pwr_status=hal_get_gprs_power()) ) + { + log_dbg("GPRS module already power off\n"); + return 0; + } + + while(module->users) + { + log_warn("%d application still use the GPRS module dataport, wait released...\n", module->users); + sleep(1); + } + + log_nrml("Turn off GPRS module now\n"); + close_gsm_dataport(module); + + comport_close(module->gsmport); + hal_turn_gprs_power(OFF); + + module->ready = NOT_READY; + memset(&(module->reg), 0, sizeof(REGISTER_INFO)); + module->pwr_status = hal_get_gprs_power(); + + micro_second_sleep(800); + return 0; +} + +void set_module_event(MODULE_INFO *module, int request) +{ + log_dbg("Set the module event request[%d]\n", request); + pthread_mutex_lock(&module->lock); + module->event = request; + pthread_mutex_unlock(&module->lock); +} + +/* + * Description: Set the GPRS power status according to the module request event. + * the GPRS module USB convert serial comport device lost, so we must bind them together. + * Return Value: 0:Set GPRS power status successfully !0: Open failure + */ +int set_module_event_power(MODULE_INFO *module) +{ + int rv = 0; + switch (module->event) + { + case REQ_POWER_ON: + rv = power_on_module(module); + break; + + case REQ_POWER_OFF: + rv = power_off_module(module); + break; + + case REQ_POWER_RESET: + rv = power_off_module(module); + rv = power_on_module(module); + break; + } + + if( rv ) + { + log_nrml("Response for the GPRS request event %d failure, rv=%d\n", module->event, rv); + return rv; + } + else + { + log_nrml("Response for the GPRS request event %d and clear this event ok\n", module->event); + set_module_event(module, REQ_EVENT_NONE); + return 0; + } +} + + +int atcmd_inspect_status(MODULE_INFO *module) +{ + COM_PORT *comport; + REGISTER_INFO *reg = &(module->reg); /* SIM card Register information */ + char *who = "atcmd_inspect_status()"; + + static unsigned long start_time ; + + /* Every 10 seconds we will inspect it */ + if(start_time && time_elapsed(start_time) < 10000) + { + return 0; + } + + start_time= time_now(); + + comport = alloc_gsm_dataport(who, module); + if(NULL != comport) + { + log_dbg("Alloc dataport %s=>[fd:%d]\n", comport->dev_name, comport->fd); + } + else + return -1; + + reg->signal = atcmd_check_gprs_signal(comport); + + atcmd_check_gprs_location(comport, ®->loc); + + log_dbg("Free dataport %s=>[fd:%d]\n", comport->dev_name, comport->fd); + free_gsm_dataport(who, module, &comport); + + return 0; +} + + +/* + * Description: Check the AT command and SIM card ready or not + * Input value: times: Max check times + *Return Value: 1: Already OK 0: Still on test -1: Failure + * + */ +int atcmd_check_module_ready(COM_PORT *comport, int times) +{ + int rv; + static int fail_cnt = 0; + + /* Send ATE0 to check GPRS module AT ready or not */ + rv = atcmd_check_at_ready(comport); + if(rv) + goto cleanup; + + /* Send AT+CPIN? to check SIM card valid or not */ + rv = atcmd_check_sim_valid(comport); + +cleanup: + if(rv) + { + if(fail_cnt < times) + { + fail_cnt ++; + return 0; + } + else + { + fail_cnt = 0; + return -1; + } + } + else + { + fail_cnt = 0; + return 1; + } +} + +int atcmd_check_power_on(COM_PORT *comport) +{ + int i, rv = 0; + + for(i=0; i<10; i++) + { + if( !atcmd_check_at_ready(comport) ) + { + rv = 1; + break; + } + } + + return rv; +} + +/* + * Some preset command here, such as set Module as 2G mode + */ +int atcmd_module_preset(COM_PORT *comport) +{ + int retval = 0; + + /* Send AT+COPS=0 to set GPRS module auto select an operator */ + if(0 != (retval=send_atcmd_check_ok(comport, "AT+COPS=0\r", 3000)) ) + { + log_warn("AT+COPS=0 Set Auto Select Carrier: [FAILED]\n"); + return -2; + } + log_nrml("AT+COPS=0 Set Auto Select Carrier: [OK]\n"); + + return retval; +} + + +int atcmd_check_hwinfo(COM_PORT *comport, HW_INFO *hw, int times) +{ + int rv; + static int fail_cnt = 0; + + /* Send AT+CGMM to check GPRS module hardware name and type */ + rv = atcmd_check_gprs_name(comport, hw->model); + if(rv) + goto cleanup; + + /* Send AT+CGMR to check GPRS module hardware version */ + rv = atcmd_check_gprs_version(comport, hw->mrev); + if(rv) + goto cleanup; + + /* Send AT+CGSN to check GPRS module hardware IEMI number*/ + rv = atcmd_check_gprs_iemi(comport, hw->iemi); + +cleanup: + if(rv) + { + if(fail_cnt < times) + { + fail_cnt ++; + return 0; + } + else + { + fail_cnt = 0; + return -1; + } + } + else + { + fail_cnt = 0; + return 1; + } +} + + +int atcmd_check_regist(COM_PORT *comport, REGISTER_INFO *reg, int times) +{ + int rv = 0; + static int fail_cnt = 0; + + /* Send AT+CSQ to check GPRS signal strength */ + reg->signal = atcmd_check_gprs_signal(comport); + if(reg->signal<2 && reg->signal>31) + { + rv = -1; + goto cleanup; + } + + /* Send AT+CREG? to check SIM card regist to network or not */ + reg->type = atcmd_check_gprs_register(comport); + + if(REG_HOMEWORK==reg->type || REG_ROAMING== reg->type) + { + /* SIM card register successfully */ + log_nrml("SIM card register successfully.\n"); + rv = 0; + } + else if(REG_DENIED==reg->type) + { + /* SIM card can not register, so request to switch SIM card */ + log_err("SIM card regist denied.\n"); + rv = -2; + goto cleanup; + } + else + { + log_err("SIM card regist failure.\n"); + rv = -3; + goto cleanup; + } + + rv = atcmd_check_gprs_carrier(comport, reg->carrier); + if(rv) + { + rv = -4; + log_err("Check SIM card acrrier failure.\n"); + goto cleanup; + } + + rv = atcmd_check_gprs_mcc_mnc(comport, reg->loc.mcc_mnc); + if(rv) + { + rv = -4; + log_err("Check SIM card register MCC-MNC failure\n"); + goto cleanup; + } + + +cleanup: + if(rv) + { + if(fail_cnt < times) + { + fail_cnt ++; + return 0; + } + else + { + fail_cnt = 0; + return -1; + } + } + else + { + fail_cnt = 0; + return 1; + } + +} + +int atcmd_check_network_info(COM_PORT *comport, REGISTER_INFO *reg) +{ + int retval = 0; + + /* Send AT+COPS to check SIM card registed network carrier */ + retval = atcmd_check_gprs_carrier(comport, reg->carrier); + if(retval) return -1; + + /* Send AT+QGSMLOC=1 to check GPRS module location */ + retval = atcmd_check_gprs_location(comport, &(reg->loc)); + if(retval) return -3; + + return retval; +} + + +int atcmd_check_ready(MODULE_INFO *module) +{ + int rv; + COM_PORT *comport; + char *who = "atcmd_check_ready()"; + + log_nrml("AT command check GPRS registry status now\n"); + /* Alloc a comport to send AT command */ + comport = alloc_gsm_dataport(who, module); + if(NULL == comport) + { + log_warn("Alloc dataport for %s() failure.\n", __FUNCTION__); + return -1; + } + log_dbg("Alloc dataport %s=>[fd:%d]\n", comport->dev_name, comport->fd); + + switch(module->ready) + { + case MODULE_READY: + rv = atcmd_check_module_ready(comport, 10); + if(rv > 0) + { + log_nrml("GPRS AT command ready and SIM card valid successfully\n"); + module->ready++; /* Continue to check, not break */ + } + else if(rv == 0) + { + log_nrml("GPRS AT command ready and SIM card valid check continue...\n"); + } + else if(rv < 0) + { + log_nrml("GPRS AT command ready and SIM card valid check failed\n"); + set_module_event(module, REQ_POWER_RESET); + } + break; + + case CHECK_HWINFO: + rv = atcmd_check_hwinfo(comport, &(module->hw), 10); + if(rv > 0) + { + log_nrml("Check the GPRS Module hardware information successfully\n"); + module->ready++; /* Continue to check, not break */ + } + else if(rv == 0) + { + log_nrml("Check the GPRS Module hardware information continue...\n"); + } + else if(rv < 0) + { + log_nrml("Check the GPRS Module hardware information failed...\n"); + set_module_event(module, REQ_POWER_RESET); + } + break; + + case CHECK_REGISTRY: + rv = atcmd_check_regist(comport, &(module->reg), 10); + if(rv > 0) + { + log_nrml("Check the SIM card registry successfully\n"); + module->ready++; /* Continue to check, not break */ + } + else if(rv == 0) + { + log_nrml("Check the SIM card registry continue...\n"); + } + else if(rv < 0) + { + log_nrml("Check the SIM card registry failed\n"); + set_module_event(module, REQ_POWER_RESET); + } + break; + } + + free_gsm_dataport(who, module, &comport); + return rv; +} + + +/* + * Description: Terminate the control thread work context + * Return Value: NONE + */ +void ctrl_thread_term(void *thread_arg) +{ + int i=0; + MODULE_INFO *module = (MODULE_INFO *)thread_arg; + + log_nrml("start terminate GPRS main(control) thread\n"); + + power_off_module(module); + + for(i=0; i<module->comport_cnt; i++) + { + comport_term(module->comport[i]); + } +} + + +/* Description: Continue the main thread as the control thread, which used to control/inspect the GPRS + * module power status. If it exit, then whole program exit.So when it exit, we must + * make sure all other threads exit. + * + *Return Value: NONE + */ +void ctrl_thread_start(void *thread_arg) +{ + MODULE_INFO *module = (MODULE_INFO *)thread_arg; + + log_nrml("GPRS power control thread start running\n"); + + while( !g_cp_signal.stop ) + { + /* If someone request to change the power status, then set the power*/ + if(module->event) + { + set_module_event_power(module); + } + + if(ALL_READY == module->ready) + { + /* If GPRS already registed then we just need to inspect the GPRS + * module status, such as signal, location */ + atcmd_inspect_status(module); + } + else + { + /* If GPRS module just already power on, then we use AT command to + * check the SIM card can work or not now. */ + if( ON == module->pwr_status ) + { + atcmd_check_ready(module); + } + } + + sleep(1); + } + + /* thread exit */ + ctrl_thread_term(thread_arg); + + return ; +} diff --git a/program/cp_library/cp_gprs.h b/program/cp_library/cp_gprs.h new file mode 100644 index 0000000..0ba933e --- /dev/null +++ b/program/cp_library/cp_gprs.h @@ -0,0 +1,126 @@ +/******************************************************************************** + * Copyright: (C) guowenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: module.h + * Description: This is the GPRS module head file + * + * Version: 1.0.0(02/02/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "02/02/2012 11:33:33 AM" + * + ********************************************************************************/ + +#ifndef __CP_GPRS_H +#define __CP_GPRS_H + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <pthread.h> + +#include "cp_common.h" +#include "cp_logger.h" +#include "cp_comport.h" +#include "cp_atcmd.h" +#include "cp_time.h" +#include "cp_hal.h" + +#define YES 1 +#define NO 0 + +#define GSM_CTRLPORT "/dev/gprs" +#define GSM_DATAPORT "/dev/ttyS2" + +#define MAX_DATAPORT 4 /* CMUX driver will generate 4 TTY port */ +#define CMUX_PORT_START_INDEX 1 +#define CMUX_DATAPORT "/dev/gsmtty" + +/*GPRS module power status control request event*/ +enum +{ + REQ_EVENT_NONE = 0, + REQ_POWER_OFF, + REQ_POWER_ON, + REQ_POWER_RESET, +}; + +/* GPRS Module Ready status */ +enum +{ + NOT_READY, + MODULE_READY, /* GPRS AT command active and SIM card valid */ + CHECK_HWINFO, /* Get GPRS hardware Information */ + CHECK_REGISTRY, /* Check GPRS register network information */ + ALL_READY, +}; + +/* AT+CREG? command show SIM card register status */ +enum +{ + REG_UNREGIST = 0, /* not registered, ME is not currently searching a new operator to register to */ + REG_HOMEWORK, /* registered, home network */ + REG_SEARCHING, /* not registered, but ME is currently searching a new operator to register to */ + REG_DENIED, /* registration denied */ + REG_UNKNOW, /* unknow */ + REG_ROAMING, /* registered, roaming */ +}; + +/* AT+CNMP=? command to set GPRS module work on which mode */ +#define MODE_AUTO 2 /* Automatic */ +#define MODE_GSM 13 /* GSM Only */ +#define MODE_WCDMA 14 /* WCDMA Only */ + +/* AT+CNSMOD? command show network system mode */ +enum +{ + NS_NONE = 0, /* No service */ + NS_GSM, /* GSM */ + NS_GPRS, /* GPRS */ + NS_EGPRS, /* EGPRS(EDGE) */ + NS_WCDMA, /* WCDMA */ + NS_HSDPA, /* HSDPA only */ + NS_HSUPA, /* HSUPA only */ + NS_HSPA, /* HSDPA and HSUPA */ +}; + +typedef struct __MODULE_INFO +{ + int users; /* How many users use the module now */ + unsigned char ready; /* SIM card regist and can work or not */ + unsigned char event; /* Request to set GPRS power REQ_POWER_ON, REQ_POWER_OFF or REQ_POWER_RESET */ + unsigned char pwr_status; /* Current module power status */ + + pthread_mutex_t lock; /* Module control mutex lock */ + + HW_INFO hw; /* GPRS Hardware information */ + REGISTER_INFO reg; /* SIM card register network information */ + + COM_PORT *gsmport; /* The GSM hardware UART port */ + + int comport_cnt; /* GPRS data channel count */ + COM_PORT *comport[MAX_DATAPORT]; /* CMUX driver generate CMUX port */ +} MODULE_INFO; + + +extern int init_gsm_module(MODULE_INFO *module); +extern int open_gsm_dataport(MODULE_INFO *module); +extern void close_gsm_dataport(MODULE_INFO *module); +extern COM_PORT *alloc_gsm_dataport(char *who, MODULE_INFO *module); +extern void free_gsm_dataport(char *who, MODULE_INFO *module, COM_PORT **comport); + +extern int power_on_module(MODULE_INFO *module); +extern int power_off_module(MODULE_INFO *module); + +extern int atcmd_check_ready(MODULE_INFO *module); +extern int atcmd_inspect_status(MODULE_INFO *module); +extern int atcmd_check_power_on(COM_PORT *comport); +//unsigned char atcmd_inspect(MODULE_INFO *module, COM_PORT *comport); + +extern void set_module_event(MODULE_INFO *module, int request); +extern int set_module_event_power(MODULE_INFO *module); + +extern void ctrl_thread_start(void *thread_arg); +extern void ctrl_thread_term(void *thread_arg); + +#endif /* End of __CP_GPRS_H */ diff --git a/program/cp_library/cp_gsmmux.c b/program/cp_library/cp_gsmmux.c new file mode 100644 index 0000000..4af98d5 --- /dev/null +++ b/program/cp_library/cp_gsmmux.c @@ -0,0 +1,75 @@ +/********************************************************************************* + * Copyright: (C) 2013 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_gsmmux.c + * Description: This file is the application for GSM0710(A.K.A CMUX) protocal + * which implement in Linux kernel + * + * Version: 1.0.0(01/16/2013~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "01/16/2013 05:37:15 PM" + * + ********************************************************************************/ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <sys/ioctl.h> +#include <errno.h> +#include <termios.h> +#include <unistd.h> + +#include "cp_logger.h" +#include "cp_gsmmux.h" + +int attach_gsm0710(COM_PORT *comport) +{ + int ldisc = N_GSM0710; + struct gsm_config c; + + log_nrml("Attach GMUX on GSM port \"%s\" now\n", comport->dev_name); + + if( send_atcmd_check_ok(comport, "AT+CMUX=0\r", 3000) ) + { + log_err("Send \"AT+CMUX=0\" command check %s failure\n", comport->dev_name); + return -1; + } + + if (ioctl(comport->fd, TIOCSETD, &ldisc) < 0) + { + log_err("Can not attach N_GSM0710 to comport \"%s\" \n", comport->dev_name); + return -2; + } + + + ioctl(comport->fd, GSMIOC_GETCONF, &c); + + /* we are initiator and need encoding 0 (basic) */ + c.initiator = 1; + c.encapsulation = 0; + + /* our modem defaults to a maximum size of 127 bytes */ + c.mru = 127; + c.mtu = 127; + + /* set the new configuration */ + ioctl(comport->fd, GSMIOC_SETCONF, &c); + + log_nrml("Attach GMUX on GSM port \"%s\" OK\n", comport->dev_name); + sleep(1); + + return 0; +} + + +#if 0 +int detach_gsm0710(COM_PORT *comport) +{ + log_nrml("Dettach GMUX on GSM port \"%s\" now\n", comport->dev_name); + return 0; +} +#endif diff --git a/program/cp_library/cp_gsmmux.h b/program/cp_library/cp_gsmmux.h new file mode 100644 index 0000000..60aaed6 --- /dev/null +++ b/program/cp_library/cp_gsmmux.h @@ -0,0 +1,44 @@ +/******************************************************************************** + * Copyright: (C) 2013 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_gsmmux.h + * Description: This head file is application for GSM0710(A.K.A CMUX) protocal + * which implement in Linux kernel + * + * Version: 1.0.0(01/16/2013~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "01/16/2013 05:43:48 PM" + * + ********************************************************************************/ + +#ifndef __CP_GSMMUX_H_ +#define __CP_GSMMUX_H_ + +#include "cp_atcmd.h" + +struct gsm_config +{ + unsigned int adaption; + unsigned int encapsulation; + unsigned int initiator; + unsigned int t1; + unsigned int t2; + unsigned int t3; + unsigned int n2; + unsigned int mru; + unsigned int mtu; + unsigned int k; + unsigned int i; + unsigned int unused[8]; /* Padding for expansion without breaking stuff */ +}; + +#define GSMIOC_GETCONF _IOR('G', 0, struct gsm_config) +#define GSMIOC_SETCONF _IOW('G', 1, struct gsm_config) + +#define N_GSM0710 21 /* GSM 0710 Mux */ + +int attach_gsm0710(COM_PORT *comport); +//int detach_gsm0710(COM_PORT *comport); + +#endif /* __CP_GSMMUX_H_ */ diff --git a/program/cp_library/cp_hal.c b/program/cp_library/cp_hal.c new file mode 100644 index 0000000..450cf07 --- /dev/null +++ b/program/cp_library/cp_hal.c @@ -0,0 +1,257 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_led_buzzer.c + * Description: This file is is the HAL(Hardware Abstraction Layer) for + * AT91SAM9xxx family devices. + * + * Version: 1.0.0(12/05/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "12/05/2012 01:26:33 PM" + * + ********************************************************************************/ + +#include "cp_hal.h" + +int hal_turn_led_on(int led) +{ + int fd = -1; + + if((fd=open(DEV_LED_PATH, O_RDWR)) < 0) + { + return -1; + } + + ioctl(fd, LED_ON, led); + + close(fd); + return 0; +} + +int hal_turn_led_off(int led) +{ + int fd = -1; + + if((fd=open(DEV_LED_PATH, O_RDWR)) < 0) + { + return -1; + } + + ioctl(fd, LED_OFF, led); + + close(fd); + return 0; +} + +int hal_turn_led_blink(int led, int mode) +{ + int fd = -1; + int arg = led|(mode<<3); + + if((fd=open(DEV_LED_PATH, O_RDWR)) < 0) + { + return -1; + } + + ioctl(fd, LED_BLINK, arg); + + close(fd); + return 0; +} + + +/* + * Description: Turn GPRS ON or OFF + * Input Args: RESET(2)/ON(1)/OFF(0) + */ +int hal_turn_gprs_power(int status) +{ + int fd = -1; + int rv = 0; + + if((fd=open(DEV_GSM_PATH, O_RDWR)) < 0) + { + return -1; + } + + if( (rv=ioctl(fd, GSM_SET_POWER, status)) < 0) + { + close(fd); + return -2; + } + + close(fd); + return rv; +} + +/* + * Description: Get current GPRS power status + * Return Value: ON(1)/OFF(0) + */ +int hal_get_gprs_power(void) +{ + int fd = -1; + int status; + + if((fd=open(DEV_GSM_PATH, O_RDWR)) < 0) + { + return -1; + } + + if( (status=ioctl(fd, GSM_GET_POWER, 0)) < 0) + { + close(fd); + return -2; + } + + close(fd); + return status; +} + +/* + * Description: Turn GPS ON or OFF + * Input Args: ON(1)/OFF(0) + */ +int hal_turn_gps_power(int status) +{ + int fd = -1; + int rv = 0; + + if((fd=open(DEV_GPS_PATH, O_RDWR)) < 0) + { + return -1; + } + + if( (rv=ioctl(fd, GPS_SET_POWER, status)) < 0) + { + close(fd); + return -2; + } + + close(fd); + return rv; +} + +/* + * Description: Get current GPS power status + * Return Value: ON(1)/OFF(0) + */ +int hal_get_gps_power(void) +{ + int fd = -1; + int status; + + if((fd=open(DEV_GPS_PATH, O_RDWR)) < 0) + { + return -1; + } + + if( (status=ioctl(fd, GPS_GET_POWER, 0)) < 0) + { + close(fd); + return -2; + } + + close(fd); + return status; +} + + +/* + * Description: Reset zigbee module + */ +int hal_reset_zigbee(void) +{ + int fd = -1; + + if((fd=open(DEV_ZIGBEE_PATH, O_RDWR)) < 0) + { + return -1; + } + + if( ioctl(fd, ZIGBEE_RESET, 0) < 0) + { + close(fd); + return -2; + } + + close(fd); + return 0; +} + +/* + * Description: Get Zigbee status + */ +int hal_get_zigbee_status(void) +{ + int fd = -1; + int status; + + if((fd=open(DEV_ZIGBEE_PATH, O_RDWR)) < 0) + { + return -1; + } + + if( (status=ioctl(fd, ZIGBEE_STATUS, 0)) < 0) + { + close(fd); + return -2; + } + + close(fd); + return status; +} + +/* + * Description: Start/Stop Radiation Moniter sample + * Input Args: Start(1)/Stop(0) the sample + * Return Val: If status=1(start), it will return this time sample dose + * If status=0(stop), it will return last time sample dose + */ +int hal_set_gmtube(status) +{ + int fd = -1; + int dose = 0; + + if((fd=open(DEV_GMTUBE_PATH, O_RDWR)) < 0) + { + return -1; + } + + if( (dose=ioctl(fd, GM_SET_MEASURE_RADI, status)) < 0) + { + close(fd); + return -2; + } + + close(fd); + return dose; +} + + +/* + * Description: Start/Stop Radiation Moniter sample + * Input Args: Start(1)/Stop(0) the sample + * Return Val: Return last time sample dose + */ +int hal_get_gmtube_dose(void) +{ + int fd = -1; + int dose = 0; + + if((fd=open(DEV_GMTUBE_PATH, O_RDWR)) < 0) + { + return -1; + } + + if( (dose=ioctl(fd, GM_GET_MEASURE_DOSE, 0)) < 0) + { + close(fd); + return -2; + } + + close(fd); + return dose; +} + diff --git a/program/cp_library/cp_hal.h b/program/cp_library/cp_hal.h new file mode 100644 index 0000000..f1e93d7 --- /dev/null +++ b/program/cp_library/cp_hal.h @@ -0,0 +1,56 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_hal.h + * Description: This head file + * + * Version: 1.0.0(12/05/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "12/05/2012 02:21:55 PM" + * + ********************************************************************************/ +#ifndef __CP_HAL_H +#define __CP_HAL_H + +#include <unistd.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <fcntl.h> +#include <sys/types.h> +#include <sys/stat.h> + +#include "at91_ioctl.h" + +#define DEV_LED_PATH "/dev/led" +#define DEV_GSM_PATH "/dev/gprs" +#define DEV_GPS_PATH "/dev/gps" +#define DEV_ZIGBEE_PATH "/dev/zigbee" +#define DEV_GMTUBE_PATH "/dev/gmtube" + +#define OFF 0 +#define ON 1 +#define BLINK 2 +#define RESET 2 + +#define MODE_SLOW 0 +#define MODE_FAST 1 + +#define START 1 +#define STOP 0 + +#define LED_SYS 0 + +extern int hal_turn_led_on(int led); +extern int hal_turn_led_off(int led); +extern int hal_turn_led_blink(int led, int mode); + +extern int hal_turn_gprs_power(int status); +extern int hal_get_gprs_power(void); + +extern int hal_turn_gps_power(int status); +extern int hal_get_gps_power(void); + +#endif /* Endof __CP_HAL_H */ diff --git a/program/cp_library/cp_iniparser.c b/program/cp_library/cp_iniparser.c new file mode 100644 index 0000000..b18cf84 --- /dev/null +++ b/program/cp_library/cp_iniparser.c @@ -0,0 +1,807 @@ + +/*-------------------------------------------------------------------------*/ +/** + @file cp_iniparser.c + @author N. Devillard + @brief Parser for ini files. +*/ +/*--------------------------------------------------------------------------*/ +/*---------------------------- Includes ------------------------------------*/ +#include <ctype.h> +#include "cp_iniparser.h" + +/*---------------------------- Defines -------------------------------------*/ +#define ASCIILINESZ (1024) +#define INI_INVALID_KEY ((char*)-1) + +/*--------------------------------------------------------------------------- + Private to this module + ---------------------------------------------------------------------------*/ +/** + * This enum stores the status for each parsed line (internal use only). + */ +typedef enum _line_status_ { + LINE_UNPROCESSED, + LINE_ERROR, + LINE_EMPTY, + LINE_COMMENT, + LINE_SECTION, + LINE_VALUE +} line_status ; + +/*-------------------------------------------------------------------------*/ +/** + @brief Convert a string to lowercase. + @param s String to convert. + @return ptr to statically allocated string. + + This function returns a pointer to a statically allocated string + containing a lowercased version of the input string. Do not free + or modify the returned string! Since the returned string is statically + allocated, it will be modified at each function call (not re-entrant). + */ +/*--------------------------------------------------------------------------*/ +static char * strlwc(const char * s) +{ + static char l[ASCIILINESZ+1]; + int i ; + + if (s==NULL) return NULL ; + memset(l, 0, ASCIILINESZ+1); + i=0 ; + while (s[i] && i<ASCIILINESZ) { + l[i] = (char)tolower((int)s[i]); + i++ ; + } + l[ASCIILINESZ]=(char)0; + return l ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Remove blanks at the beginning and the end of a string. + @param s String to parse. + @return ptr to statically allocated string. + + This function returns a pointer to a statically allocated string, + which is identical to the input string, except that all blank + characters at the end and the beg. of the string have been removed. + Do not free or modify the returned string! Since the returned string + is statically allocated, it will be modified at each function call + (not re-entrant). + */ +/*--------------------------------------------------------------------------*/ +static char * strstrip(const char * s) +{ + static char l[ASCIILINESZ+1]; + char * last ; + + if (s==NULL) return NULL ; + + while (isspace((int)*s) && *s) s++; + memset(l, 0, ASCIILINESZ+1); + strcpy(l, s); + last = l + strlen(l); + while (last > l) { + if (!isspace((int)*(last-1))) + break ; + last -- ; + } + *last = (char)0; + return (char*)l ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get number of sections in a dictionary + @param d Dictionary to examine + @return int Number of sections found in dictionary + + This function returns the number of sections found in a dictionary. + The test to recognize sections is done on the string stored in the + dictionary: a section name is given as "section" whereas a key is + stored as "section:key", thus the test looks for entries that do not + contain a colon. + + This clearly fails in the case a section name contains a colon, but + this should simply be avoided. + + This function returns -1 in case of error. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getnsec(dictionary * d) +{ + int i ; + int nsec ; + + if (d==NULL) return -1 ; + nsec=0 ; + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + if (strchr(d->key[i], ':')==NULL) { + nsec ++ ; + } + } + return nsec ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get name for section n in a dictionary. + @param d Dictionary to examine + @param n Section number (from 0 to nsec-1). + @return Pointer to char string + + This function locates the n-th section in a dictionary and returns + its name as a pointer to a string statically allocated inside the + dictionary. Do not free or modify the returned string! + + This function returns NULL in case of error. + */ +/*--------------------------------------------------------------------------*/ +char * iniparser_getsecname(dictionary * d, int n) +{ + int i ; + int foundsec ; + + if (d==NULL || n<0) return NULL ; + foundsec=0 ; + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + if (strchr(d->key[i], ':')==NULL) { + foundsec++ ; + if (foundsec>n) + break ; + } + } + if (foundsec<=n) { + return NULL ; + } + return d->key[i] ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Dump a dictionary to an opened file pointer. + @param d Dictionary to dump. + @param f Opened file pointer to dump to. + @return void + + This function prints out the contents of a dictionary, one element by + line, onto the provided file pointer. It is OK to specify @c stderr + or @c stdout as output files. This function is meant for debugging + purposes mostly. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_dump(dictionary * d, FILE * f) +{ + int i ; + + if (d==NULL || f==NULL) return ; + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + if (d->val[i]!=NULL) { + fprintf(f, "[%s]=[%s]\n", d->key[i], d->val[i]); + } else { + fprintf(f, "[%s]=UNDEF\n", d->key[i]); + } + } + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Save a dictionary to a loadable ini file + @param d Dictionary to dump + @param f Opened file pointer to dump to + @return void + + This function dumps a given dictionary into a loadable ini file. + It is Ok to specify @c stderr or @c stdout as output files. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_dump_ini(dictionary * d, FILE * f) +{ + int i ; + int nsec ; + char * secname ; + + if (d==NULL || f==NULL) return ; + + nsec = iniparser_getnsec(d); + if (nsec<1) { + /* No section in file: dump all keys as they are */ + for (i=0 ; i<d->size ; i++) { + if (d->key[i]==NULL) + continue ; + fprintf(f, "%s = %s\n", d->key[i], d->val[i]); + } + return ; + } + for (i=0 ; i<nsec ; i++) { + secname = iniparser_getsecname(d, i) ; + iniparser_dumpsection_ini(d, secname, f) ; + } + fprintf(f, "\n"); + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Save a dictionary section to a loadable ini file + @param d Dictionary to dump + @param s Section name of dictionary to dump + @param f Opened file pointer to dump to + @return void + + This function dumps a given section of a given dictionary into a loadable ini + file. It is Ok to specify @c stderr or @c stdout as output files. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f) +{ + int j ; + char keym[ASCIILINESZ+1]; + int seclen ; + + if (d==NULL || f==NULL) return ; + if (! iniparser_find_entry(d, s)) return ; + + seclen = (int)strlen(s); + fprintf(f, "\n[%s]\n", s); + sprintf(keym, "%s:", s); + for (j=0 ; j<d->size ; j++) { + if (d->key[j]==NULL) + continue ; + if (!strncmp(d->key[j], keym, seclen+1)) { + fprintf(f, + "%-30s = %s\n", + d->key[j]+seclen+1, + d->val[j] ? d->val[j] : ""); + } + } + fprintf(f, "\n"); + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the number of keys in a section of a dictionary. + @param d Dictionary to examine + @param s Section name of dictionary to examine + @return Number of keys in section + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getsecnkeys(dictionary * d, char * s) +{ + int seclen, nkeys ; + char keym[ASCIILINESZ+1]; + int j ; + + nkeys = 0; + + if (d==NULL) return nkeys; + if (! iniparser_find_entry(d, s)) return nkeys; + + seclen = (int)strlen(s); + sprintf(keym, "%s:", s); + + for (j=0 ; j<d->size ; j++) { + if (d->key[j]==NULL) + continue ; + if (!strncmp(d->key[j], keym, seclen+1)) + nkeys++; + } + + return nkeys; + +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the number of keys in a section of a dictionary. + @param d Dictionary to examine + @param s Section name of dictionary to examine + @return pointer to statically allocated character strings + + This function queries a dictionary and finds all keys in a given section. + Each pointer in the returned char pointer-to-pointer is pointing to + a string allocated in the dictionary; do not free or modify them. + + This function returns NULL in case of error. + */ +/*--------------------------------------------------------------------------*/ +char ** iniparser_getseckeys(dictionary * d, char * s) +{ + + char **keys; + + int i, j ; + char keym[ASCIILINESZ+1]; + int seclen, nkeys ; + + keys = NULL; + + if (d==NULL) return keys; + if (! iniparser_find_entry(d, s)) return keys; + + nkeys = iniparser_getsecnkeys(d, s); + + keys = (char**) malloc(nkeys*sizeof(char*)); + + seclen = (int)strlen(s); + sprintf(keym, "%s:", s); + + i = 0; + + for (j=0 ; j<d->size ; j++) { + if (d->key[j]==NULL) + continue ; + if (!strncmp(d->key[j], keym, seclen+1)) { + keys[i] = d->key[j]; + i++; + } + } + + return keys; + +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key + @param d Dictionary to search + @param key Key string to look for + @param def Default value to return if key not found. + @return pointer to statically allocated character string + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the pointer passed as 'def' is returned. + The returned char pointer is pointing to a string allocated in + the dictionary, do not free or modify it. + */ +/*--------------------------------------------------------------------------*/ +char * iniparser_getstring(dictionary * d, const char * key, char * def) +{ + char * lc_key ; + char * sval ; + + if (d==NULL || key==NULL) + return def ; + + lc_key = strlwc(key); + sval = dictionary_get(d, lc_key, def); + return sval ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to an int + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return integer + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + + Supported values for integers include the usual C notation + so decimal, octal (starting with 0) and hexadecimal (starting with 0x) + are supported. Examples: + + "42" -> 42 + "042" -> 34 (octal -> decimal) + "0x42" -> 66 (hexa -> decimal) + + Warning: the conversion may overflow in various ways. Conversion is + totally outsourced to strtol(), see the associated man page for overflow + handling. + + Credits: Thanks to A. Becker for suggesting strtol() + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getint(dictionary * d, const char * key, int notfound) +{ + char * str ; + + str = iniparser_getstring(d, key, INI_INVALID_KEY); + if (str==INI_INVALID_KEY) return notfound ; + return (int)strtol(str, NULL, 0); +} + +int iniparser_getlong(dictionary * d, const char * key, int notfound) +{ + char * str ; + + str = iniparser_getstring(d, key, INI_INVALID_KEY); + if (str==INI_INVALID_KEY) return notfound ; + return strtol(str, NULL, 0); +} +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to a double + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return double + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + */ +/*--------------------------------------------------------------------------*/ +double iniparser_getdouble(dictionary * d, const char * key, double notfound) +{ + char * str ; + + str = iniparser_getstring(d, key, INI_INVALID_KEY); + if (str==INI_INVALID_KEY) return notfound ; + return atof(str); +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to a boolean + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return integer + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + + A true boolean is found if one of the following is matched: + + - A string starting with 'y' + - A string starting with 'Y' + - A string starting with 't' + - A string starting with 'T' + - A string starting with '1' + + A false boolean is found if one of the following is matched: + + - A string starting with 'n' + - A string starting with 'N' + - A string starting with 'f' + - A string starting with 'F' + - A string starting with '0' + + The notfound value returned if no boolean is identified, does not + necessarily have to be 0 or 1. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getboolean(dictionary * d, const char * key, int notfound) +{ + char * c ; + int ret ; + + c = iniparser_getstring(d, key, INI_INVALID_KEY); + if (c==INI_INVALID_KEY) return notfound ; + if (c[0]=='y' || c[0]=='Y' || c[0]=='1' || c[0]=='t' || c[0]=='T') { + ret = 1 ; + } else if (c[0]=='n' || c[0]=='N' || c[0]=='0' || c[0]=='f' || c[0]=='F') { + ret = 0 ; + } else { + ret = notfound ; + } + return ret; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Finds out if a given entry exists in a dictionary + @param ini Dictionary to search + @param entry Name of the entry to look for + @return integer 1 if entry exists, 0 otherwise + + Finds out if a given entry exists in the dictionary. Since sections + are stored as keys with NULL associated values, this is the only way + of querying for the presence of sections in a dictionary. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_find_entry( + dictionary * ini, + const char * entry +) +{ + int found=0 ; + if (iniparser_getstring(ini, entry, INI_INVALID_KEY)!=INI_INVALID_KEY) { + found = 1 ; + } + return found ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Set an entry in a dictionary. + @param ini Dictionary to modify. + @param entry Entry to modify (entry name) + @param val New value to associate to the entry. + @return int 0 if Ok, -1 otherwise. + + If the given entry can be found in the dictionary, it is modified to + contain the provided value. If it cannot be found, -1 is returned. + It is Ok to set val to NULL. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_set(dictionary * ini, const char * entry, const char * val) +{ + return dictionary_set(ini, strlwc(entry), val) ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete an entry in a dictionary + @param ini Dictionary to modify + @param entry Entry to delete (entry name) + @return void + + If the given entry can be found, it is deleted from the dictionary. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_unset(dictionary * ini, const char * entry) +{ + dictionary_unset(ini, strlwc(entry)); +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Load a single line from an INI file + @param input_line Input line, may be concatenated multi-line input + @param section Output space to store section + @param key Output space to store key + @param value Output space to store value + @return line_status value + */ +/*--------------------------------------------------------------------------*/ +static line_status iniparser_line( + char * input_line, + char * section, + char * key, + char * value) +{ + line_status sta ; + char line[ASCIILINESZ+1]; + static char left_line[ASCIILINESZ+1]; + int len, offset ; + + strcpy(line, strstrip(input_line)); + len = (int)strlen(line); + + sta = LINE_UNPROCESSED ; + if (len<1) { + /* Empty line */ + sta = LINE_EMPTY ; + memset(input_line, 0, len); + } else if (line[0]=='#' || line[0]==';') { + /* Comment line */ + sta = LINE_COMMENT ; + memset(input_line, 0, len); + } else if (line[0]=='[') { + /* Section name */ + sscanf(line, "[%[^]]", section); + strcpy(section, strstrip(section)); + strcpy(section, strlwc(section)); + + /* Left configure will go to next time to parser */ + offset = strlen(section) + 2; + strcpy( left_line, strstrip(&(line[offset])) ); + strcpy( left_line, strstrip(left_line)); + + if( strlen(left_line) > 0) + { + strcpy(input_line, left_line); + strcat(input_line, "\n"); + } + else + { + memset(input_line, 0, len); + } + sta = LINE_SECTION ; + } else if (sscanf (line, "%[^=] = \"%[^\"]\"", key, value) == 2 + || sscanf (line, "%[^=] = '%[^\']'", key, value) == 2 + || sscanf (line, "%[^=] = %[^;#]", key, value) == 2) { + char *ptr = NULL; + + /* Usual key=value, with or without comments */ + strcpy(key, strstrip(key)); + strcpy(key, strlwc(key)); + strcpy(value, strstrip(value)); + /* + * sscanf cannot handle '' or "" as empty values + * this is done here + */ + if (!strncmp(value, "\"\"", 2) || (!strncmp(value, "''", 2)) ) { + value[0]=0 ; + } + + ptr = strchr(line, '='); + if('\''==*(ptr+1) || '\"'==*(ptr+1)) + { + offset = strlen(key)+strlen(value) + 1 + 2; /* Skip $key='$val' */ + } + else + { + offset = strlen(key)+strlen(value) + 1; /* Skip $key=$val */ + } + strcpy( left_line, strstrip(&(line[offset])) ); + + if( strlen(left_line) > 0) + { + strcpy(input_line, left_line); + strcat(input_line, "\n"); + } + else + { + memset(input_line, 0, len); + } + sta = LINE_VALUE ; + } else if (sscanf(line, "%[^=] = %[;#]", key, value)==2 + || sscanf(line, "%[^=] %[=]", key, value) == 2) { + /* + * Special cases: + * key= + * key=; + * key=# + */ + strcpy(key, strstrip(key)); + strcpy(key, strlwc(key)); + value[0]=0 ; + sta = LINE_VALUE ; + } else { + /* Generate syntax error */ + sta = LINE_ERROR ; + memset(input_line, 0, len); + } + return sta ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Parse an ini file and return an allocated dictionary object + @param ininame Name of the ini file to read. + @return Pointer to newly allocated dictionary + + This is the parser for ini files. This function is called, providing + the name of the file to be read. It returns a dictionary object that + should not be accessed directly, but through accessor functions + instead. + + The returned dictionary must be freed using iniparser_freedict(). + */ +/*--------------------------------------------------------------------------*/ +dictionary * iniparser_load(const char * ininame) +{ + FILE * in ; + + char line [ASCIILINESZ+1] ; + char section [ASCIILINESZ+1] ; + char key [ASCIILINESZ+1] ; + char tmp [ASCIILINESZ+1] ; + char val [ASCIILINESZ+1] ; + + int last=0 ; + int len ; + int lineno=0 ; + int errs=0; + + dictionary * dict ; + + if ((in=fopen(ininame, "r"))==NULL) { + fprintf(stderr, "iniparser: cannot open %s\n", ininame); + return NULL ; + } + + dict = dictionary_new(0) ; + if (!dict) { + fclose(in); + return NULL ; + } + + memset(line, 0, ASCIILINESZ); + memset(section, 0, ASCIILINESZ); + memset(key, 0, ASCIILINESZ); + memset(val, 0, ASCIILINESZ); + last=0 ; + + while (fgets(line+last, ASCIILINESZ-last, in)!=NULL) { + lineno++ ; +CONTINUE_PARSER: + len = (int)strlen(line)-1; + if (len==0) + continue; + /* Safety check against buffer overflows */ + if (line[len]!='\n') { + fprintf(stderr, + "iniparser: input line too long in %s (%d)\n", + ininame, + lineno); + dictionary_del(dict); + fclose(in); + return NULL ; + } + /* Get rid of \n and spaces at end of line */ + while ((len>=0) && + ((line[len]=='\n') || (isspace(line[len])))) { + line[len]=0 ; + len-- ; + } + /* Detect multi-line */ + if (line[len]=='\\') { + /* Multi-line value */ + last=len ; + continue ; + } else { + last=0 ; + } + + switch ( iniparser_line(line, section, key, val) ) { + case LINE_EMPTY: + case LINE_COMMENT: + break ; + + case LINE_SECTION: + errs = dictionary_set(dict, section, NULL); + break ; + + case LINE_VALUE: + sprintf(tmp, "%s:%s", section, key); + errs = dictionary_set(dict, tmp, val) ; + break ; + + case LINE_ERROR: + fprintf(stderr, "iniparser: syntax error in %s (%d):\n", + ininame, + lineno); + fprintf(stderr, "-> %s\n", line); + errs++ ; + break; + + default: + break ; + } + + if( strlen(line) > 0) + { + goto CONTINUE_PARSER; + } + + memset(line, 0, ASCIILINESZ); + last=0; + if (errs<0) { + fprintf(stderr, "iniparser: memory allocation failure\n"); + break ; + } + } + if (errs) { + dictionary_del(dict); + dict = NULL ; + } + fclose(in); + return dict ; +} + + +/*-------------------------------------------------------------------------*/ +/** + @brief Free all memory associated to an ini dictionary + @param d Dictionary to free + @return void + + Free all memory associated to an ini dictionary. + It is mandatory to call this function before the dictionary object + gets out of the current context. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_freedict(dictionary * d) +{ + dictionary_del(d); +} + +/* vim: set ts=4 et sw=4 tw=75 */ diff --git a/program/cp_library/cp_iniparser.h b/program/cp_library/cp_iniparser.h new file mode 100644 index 0000000..1e5de9c --- /dev/null +++ b/program/cp_library/cp_iniparser.h @@ -0,0 +1,308 @@ + +/*-------------------------------------------------------------------------*/ +/** + @file cp_iniparser.h + @author N. Devillard + @brief Parser for ini files. +*/ +/*--------------------------------------------------------------------------*/ + +#ifndef _CP_INIPARSER_H_ +#define _CP_INIPARSER_H_ + +/*--------------------------------------------------------------------------- + Includes + ---------------------------------------------------------------------------*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +/* + * The following #include is necessary on many Unixes but not Linux. + * It is not needed for Windows platforms. + * Uncomment it if needed. + */ +/* #include <unistd.h> */ + +#include "cp_dictionary.h" + +/*-------------------------------------------------------------------------*/ +/** + @brief Get number of sections in a dictionary + @param d Dictionary to examine + @return int Number of sections found in dictionary + + This function returns the number of sections found in a dictionary. + The test to recognize sections is done on the string stored in the + dictionary: a section name is given as "section" whereas a key is + stored as "section:key", thus the test looks for entries that do not + contain a colon. + + This clearly fails in the case a section name contains a colon, but + this should simply be avoided. + + This function returns -1 in case of error. + */ +/*--------------------------------------------------------------------------*/ + +int iniparser_getnsec(dictionary * d); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Get name for section n in a dictionary. + @param d Dictionary to examine + @param n Section number (from 0 to nsec-1). + @return Pointer to char string + + This function locates the n-th section in a dictionary and returns + its name as a pointer to a string statically allocated inside the + dictionary. Do not free or modify the returned string! + + This function returns NULL in case of error. + */ +/*--------------------------------------------------------------------------*/ + +char * iniparser_getsecname(dictionary * d, int n); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Save a dictionary to a loadable ini file + @param d Dictionary to dump + @param f Opened file pointer to dump to + @return void + + This function dumps a given dictionary into a loadable ini file. + It is Ok to specify @c stderr or @c stdout as output files. + */ +/*--------------------------------------------------------------------------*/ + +void iniparser_dump_ini(dictionary * d, FILE * f); + +/*-------------------------------------------------------------------------*/ +/** + @brief Save a dictionary section to a loadable ini file + @param d Dictionary to dump + @param s Section name of dictionary to dump + @param f Opened file pointer to dump to + @return void + + This function dumps a given section of a given dictionary into a loadable ini + file. It is Ok to specify @c stderr or @c stdout as output files. + */ +/*--------------------------------------------------------------------------*/ + +void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f); + +/*-------------------------------------------------------------------------*/ +/** + @brief Dump a dictionary to an opened file pointer. + @param d Dictionary to dump. + @param f Opened file pointer to dump to. + @return void + + This function prints out the contents of a dictionary, one element by + line, onto the provided file pointer. It is OK to specify @c stderr + or @c stdout as output files. This function is meant for debugging + purposes mostly. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_dump(dictionary * d, FILE * f); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the number of keys in a section of a dictionary. + @param d Dictionary to examine + @param s Section name of dictionary to examine + @return Number of keys in section + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getsecnkeys(dictionary * d, char * s); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the number of keys in a section of a dictionary. + @param d Dictionary to examine + @param s Section name of dictionary to examine + @return pointer to statically allocated character strings + + This function queries a dictionary and finds all keys in a given section. + Each pointer in the returned char pointer-to-pointer is pointing to + a string allocated in the dictionary; do not free or modify them. + + This function returns NULL in case of error. + */ +/*--------------------------------------------------------------------------*/ +char ** iniparser_getseckeys(dictionary * d, char * s); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key + @param d Dictionary to search + @param key Key string to look for + @param def Default value to return if key not found. + @return pointer to statically allocated character string + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the pointer passed as 'def' is returned. + The returned char pointer is pointing to a string allocated in + the dictionary, do not free or modify it. + */ +/*--------------------------------------------------------------------------*/ +char * iniparser_getstring(dictionary * d, const char * key, char * def); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to an int + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return integer + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + + Supported values for integers include the usual C notation + so decimal, octal (starting with 0) and hexadecimal (starting with 0x) + are supported. Examples: + + - "42" -> 42 + - "042" -> 34 (octal -> decimal) + - "0x42" -> 66 (hexa -> decimal) + + Warning: the conversion may overflow in various ways. Conversion is + totally outsourced to strtol(), see the associated man page for overflow + handling. + + Credits: Thanks to A. Becker for suggesting strtol() + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getint(dictionary * d, const char * key, int notfound); +int iniparser_getlong(dictionary * d, const char * key, int notfound); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to a double + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return double + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + */ +/*--------------------------------------------------------------------------*/ +double iniparser_getdouble(dictionary * d, const char * key, double notfound); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to a boolean + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return integer + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + + A true boolean is found if one of the following is matched: + + - A string starting with 'y' + - A string starting with 'Y' + - A string starting with 't' + - A string starting with 'T' + - A string starting with '1' + + A false boolean is found if one of the following is matched: + + - A string starting with 'n' + - A string starting with 'N' + - A string starting with 'f' + - A string starting with 'F' + - A string starting with '0' + + The notfound value returned if no boolean is identified, does not + necessarily have to be 0 or 1. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getboolean(dictionary * d, const char * key, int notfound); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Set an entry in a dictionary. + @param ini Dictionary to modify. + @param entry Entry to modify (entry name) + @param val New value to associate to the entry. + @return int 0 if Ok, -1 otherwise. + + If the given entry can be found in the dictionary, it is modified to + contain the provided value. If it cannot be found, -1 is returned. + It is Ok to set val to NULL. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_set(dictionary * ini, const char * entry, const char * val); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete an entry in a dictionary + @param ini Dictionary to modify + @param entry Entry to delete (entry name) + @return void + + If the given entry can be found, it is deleted from the dictionary. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_unset(dictionary * ini, const char * entry); + +/*-------------------------------------------------------------------------*/ +/** + @brief Finds out if a given entry exists in a dictionary + @param ini Dictionary to search + @param entry Name of the entry to look for + @return integer 1 if entry exists, 0 otherwise + + Finds out if a given entry exists in the dictionary. Since sections + are stored as keys with NULL associated values, this is the only way + of querying for the presence of sections in a dictionary. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_find_entry(dictionary * ini, const char * entry) ; + +/*-------------------------------------------------------------------------*/ +/** + @brief Parse an ini file and return an allocated dictionary object + @param ininame Name of the ini file to read. + @return Pointer to newly allocated dictionary + + This is the parser for ini files. This function is called, providing + the name of the file to be read. It returns a dictionary object that + should not be accessed directly, but through accessor functions + instead. + + The returned dictionary must be freed using iniparser_freedict(). + */ +/*--------------------------------------------------------------------------*/ +dictionary * iniparser_load(const char * ininame); + +/*-------------------------------------------------------------------------*/ +/** + @brief Free all memory associated to an ini dictionary + @param d Dictionary to free + @return void + + Free all memory associated to an ini dictionary. + It is mandatory to call this function before the dictionary object + gets out of the current context. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_freedict(dictionary * d); + +#endif diff --git a/program/cp_library/cp_klist.h b/program/cp_library/cp_klist.h new file mode 100644 index 0000000..a75bdd1 --- /dev/null +++ b/program/cp_library/cp_klist.h @@ -0,0 +1,723 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_list.h + * Description: This file is copied from Linux kernel, which provide link list API. + * + * Version: 1.0.0(08/09/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "08/09/2012 02:24:34 AM" + * + ********************************************************************************/ + +#ifndef _LINUX_LIST_H +#define _LINUX_LIST_H + +#include <linux/stddef.h> + + +/** + * container_of - cast a member of a structure out to the containing structure + * @ptr: the pointer to the member. + * @type: the type of the container struct this is embedded in. + * @member: the name of the member within the struct. + * + */ +#undef offsetof +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) + + +/* + * Architectures might want to move the poison pointer offset + * into some well-recognized area such as 0xdead000000000000, + * that is also not mappable by user-space exploits: + */ +#ifdef CONFIG_ILLEGAL_POINTER_VALUE +# define POISON_POINTER_DELTA _AC(CONFIG_ILLEGAL_POINTER_VALUE, UL) +#else +# define POISON_POINTER_DELTA 0 +#endif + +/* + * These are non-NULL pointers that will result in page faults + * under normal circumstances, used to verify that nobody uses + * non-initialized list entries. + */ +#define LIST_POISON1 ((void *) 0x00100100 + POISON_POINTER_DELTA) +#define LIST_POISON2 ((void *) 0x00200200 + POISON_POINTER_DELTA) + +#ifndef ARCH_HAS_PREFETCH +#define ARCH_HAS_PREFETCH +static inline void prefetch(const void *x) {;} +#endif + +/* + * Simple doubly linked list implementation. + * + * Some of the internal functions ("__xxx") are useful when + * manipulating whole lists rather than single entries, as + * sometimes we already know the next/prev entries and we can + * generate better code by using them directly rather than + * using the generic single-entry routines. + */ + +struct list_head { + struct list_head *next, *prev; +}; + +#define LIST_HEAD_INIT(name) { &(name), &(name) } + +#define LIST_HEAD(name) \ + struct list_head name = LIST_HEAD_INIT(name) + +static inline void INIT_LIST_HEAD(struct list_head *list) +{ + list->next = list; + list->prev = list; +} + +/* + * Insert a new entry between two known consecutive entries. + * + * This is only for internal list manipulation where we know + * the prev/next entries already! + */ +static inline void __list_add(struct list_head *new, + struct list_head *prev, + struct list_head *next) +{ + next->prev = new; + new->next = next; + new->prev = prev; + prev->next = new; +} + +/** + * list_add - add a new entry + * @new: new entry to be added + * @head: list head to add it after + * + * Insert a new entry after the specified head. + * This is good for implementing stacks. + */ +static inline void list_add(struct list_head *new, struct list_head *head) +{ + __list_add(new, head, head->next); +} + +/** + * list_add_tail - add a new entry + * @new: new entry to be added + * @head: list head to add it before + * + * Insert a new entry before the specified head. + * This is useful for implementing queues. + */ +static inline void list_add_tail(struct list_head *new, struct list_head *head) +{ + __list_add(new, head->prev, head); +} + +/* + * Delete a list entry by making the prev/next entries + * point to each other. + * + * This is only for internal list manipulation where we know + * the prev/next entries already! + */ +static inline void __list_del(struct list_head *prev, struct list_head *next) +{ + next->prev = prev; + prev->next = next; +} + +/** + * list_del - deletes entry from list. + * @entry: the element to delete from the list. + * Note: list_empty() on entry does not return true after this, the entry is + * in an undefined state. + */ +static inline void list_del(struct list_head *entry) +{ + __list_del(entry->prev, entry->next); + entry->next = LIST_POISON1; + entry->prev = LIST_POISON2; +} + +/** + * list_replace - replace old entry by new one + * @old : the element to be replaced + * @new : the new element to insert + * + * If @old was empty, it will be overwritten. + */ +static inline void list_replace(struct list_head *old, + struct list_head *new) +{ + new->next = old->next; + new->next->prev = new; + new->prev = old->prev; + new->prev->next = new; +} + +static inline void list_replace_init(struct list_head *old, + struct list_head *new) +{ + list_replace(old, new); + INIT_LIST_HEAD(old); +} + +/** + * list_del_init - deletes entry from list and reinitialize it. + * @entry: the element to delete from the list. + */ +static inline void list_del_init(struct list_head *entry) +{ + __list_del(entry->prev, entry->next); + INIT_LIST_HEAD(entry); +} + +/** + * list_move - delete from one list and add as another's head + * @list: the entry to move + * @head: the head that will precede our entry + */ +static inline void list_move(struct list_head *list, struct list_head *head) +{ + __list_del(list->prev, list->next); + list_add(list, head); +} + +/** + * list_move_tail - delete from one list and add as another's tail + * @list: the entry to move + * @head: the head that will follow our entry + */ +static inline void list_move_tail(struct list_head *list, + struct list_head *head) +{ + __list_del(list->prev, list->next); + list_add_tail(list, head); +} + +/** + * list_is_last - tests whether @list is the last entry in list @head + * @list: the entry to test + * @head: the head of the list + */ +static inline int list_is_last(const struct list_head *list, + const struct list_head *head) +{ + return list->next == head; +} + +/** + * list_empty - tests whether a list is empty + * @head: the list to test. + */ +static inline int list_empty(const struct list_head *head) +{ + return head->next == head; +} + +/** + * list_empty_careful - tests whether a list is empty and not being modified + * @head: the list to test + * + * Description: + * tests whether a list is empty _and_ checks that no other CPU might be + * in the process of modifying either member (next or prev) + * + * NOTE: using list_empty_careful() without synchronization + * can only be safe if the only activity that can happen + * to the list entry is list_del_init(). Eg. it cannot be used + * if another CPU could re-list_add() it. + */ +static inline int list_empty_careful(const struct list_head *head) +{ + struct list_head *next = head->next; + return (next == head) && (next == head->prev); +} + +/** + * list_is_singular - tests whether a list has just one entry. + * @head: the list to test. + */ +static inline int list_is_singular(const struct list_head *head) +{ + return !list_empty(head) && (head->next == head->prev); +} + +static inline void __list_cut_position(struct list_head *list, + struct list_head *head, struct list_head *entry) +{ + struct list_head *new_first = entry->next; + list->next = head->next; + list->next->prev = list; + list->prev = entry; + entry->next = list; + head->next = new_first; + new_first->prev = head; +} + +/** + * list_cut_position - cut a list into two + * @list: a new list to add all removed entries + * @head: a list with entries + * @entry: an entry within head, could be the head itself + * and if so we won't cut the list + * + * This helper moves the initial part of @head, up to and + * including @entry, from @head to @list. You should + * pass on @entry an element you know is on @head. @list + * should be an empty list or a list you do not care about + * losing its data. + * + */ +static inline void list_cut_position(struct list_head *list, + struct list_head *head, struct list_head *entry) +{ + if (list_empty(head)) + return; + if (list_is_singular(head) && + (head->next != entry && head != entry)) + return; + if (entry == head) + INIT_LIST_HEAD(list); + else + __list_cut_position(list, head, entry); +} + +static inline void __list_splice(const struct list_head *list, + struct list_head *prev, + struct list_head *next) +{ + struct list_head *first = list->next; + struct list_head *last = list->prev; + + first->prev = prev; + prev->next = first; + + last->next = next; + next->prev = last; +} + +/** + * list_splice - join two lists, this is designed for stacks + * @list: the new list to add. + * @head: the place to add it in the first list. + */ +static inline void list_splice(const struct list_head *list, + struct list_head *head) +{ + if (!list_empty(list)) + __list_splice(list, head, head->next); +} + +/** + * list_splice_tail - join two lists, each list being a queue + * @list: the new list to add. + * @head: the place to add it in the first list. + */ +static inline void list_splice_tail(struct list_head *list, + struct list_head *head) +{ + if (!list_empty(list)) + __list_splice(list, head->prev, head); +} + +/** + * list_splice_init - join two lists and reinitialise the emptied list. + * @list: the new list to add. + * @head: the place to add it in the first list. + * + * The list at @list is reinitialised + */ +static inline void list_splice_init(struct list_head *list, + struct list_head *head) +{ + if (!list_empty(list)) { + __list_splice(list, head, head->next); + INIT_LIST_HEAD(list); + } +} + +/** + * list_splice_tail_init - join two lists and reinitialise the emptied list + * @list: the new list to add. + * @head: the place to add it in the first list. + * + * Each of the lists is a queue. + * The list at @list is reinitialised + */ +static inline void list_splice_tail_init(struct list_head *list, + struct list_head *head) +{ + if (!list_empty(list)) { + __list_splice(list, head->prev, head); + INIT_LIST_HEAD(list); + } +} + +/** + * list_entry - get the struct for this entry + * @ptr: the &struct list_head pointer. + * @type: the type of the struct this is embedded in. + * @member: the name of the list_struct within the struct. + */ +#define list_entry(ptr, type, member) \ + container_of(ptr, type, member) + +/** + * list_first_entry - get the first element from a list + * @ptr: the list head to take the element from. + * @type: the type of the struct this is embedded in. + * @member: the name of the list_struct within the struct. + * + * Note, that list is expected to be not empty. + */ +#define list_first_entry(ptr, type, member) \ + list_entry((ptr)->next, type, member) + +/** + * list_for_each - iterate over a list + * @pos: the &struct list_head to use as a loop cursor. + * @head: the head for your list. + */ +#define list_for_each(pos, head) \ + for (pos = (head)->next; prefetch(pos->next), pos != (head); \ + pos = pos->next) + +/** + * __list_for_each - iterate over a list + * @pos: the &struct list_head to use as a loop cursor. + * @head: the head for your list. + * + * This variant differs from list_for_each() in that it's the + * simplest possible list iteration code, no prefetching is done. + * Use this for code that knows the list to be very short (empty + * or 1 entry) most of the time. + */ +#define __list_for_each(pos, head) \ + for (pos = (head)->next; pos != (head); pos = pos->next) + +/** + * list_for_each_prev - iterate over a list backwards + * @pos: the &struct list_head to use as a loop cursor. + * @head: the head for your list. + */ +#define list_for_each_prev(pos, head) \ + for (pos = (head)->prev; prefetch(pos->prev), pos != (head); \ + pos = pos->prev) + +/** + * list_for_each_safe - iterate over a list safe against removal of list entry + * @pos: the &struct list_head to use as a loop cursor. + * @n: another &struct list_head to use as temporary storage + * @head: the head for your list. + */ +#define list_for_each_safe(pos, n, head) \ + for (pos = (head)->next, n = pos->next; pos != (head); \ + pos = n, n = pos->next) + +/** + * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry + * @pos: the &struct list_head to use as a loop cursor. + * @n: another &struct list_head to use as temporary storage + * @head: the head for your list. + */ +#define list_for_each_prev_safe(pos, n, head) \ + for (pos = (head)->prev, n = pos->prev; \ + prefetch(pos->prev), pos != (head); \ + pos = n, n = pos->prev) + +/** + * list_for_each_entry - iterate over list of given type + * @pos: the type * to use as a loop cursor. + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + */ +#define list_for_each_entry(pos, head, member) \ + for (pos = list_entry((head)->next, typeof(*pos), member); \ + prefetch(pos->member.next), &pos->member != (head); \ + pos = list_entry(pos->member.next, typeof(*pos), member)) + +/** + * list_for_each_entry_reverse - iterate backwards over list of given type. + * @pos: the type * to use as a loop cursor. + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + */ +#define list_for_each_entry_reverse(pos, head, member) \ + for (pos = list_entry((head)->prev, typeof(*pos), member); \ + prefetch(pos->member.prev), &pos->member != (head); \ + pos = list_entry(pos->member.prev, typeof(*pos), member)) + +/** + * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue() + * @pos: the type * to use as a start point + * @head: the head of the list + * @member: the name of the list_struct within the struct. + * + * Prepares a pos entry for use as a start point in list_for_each_entry_continue(). + */ +#define list_prepare_entry(pos, head, member) \ + ((pos) ? : list_entry(head, typeof(*pos), member)) + +/** + * list_for_each_entry_continue - continue iteration over list of given type + * @pos: the type * to use as a loop cursor. + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + * + * Continue to iterate over list of given type, continuing after + * the current position. + */ +#define list_for_each_entry_continue(pos, head, member) \ + for (pos = list_entry(pos->member.next, typeof(*pos), member); \ + prefetch(pos->member.next), &pos->member != (head); \ + pos = list_entry(pos->member.next, typeof(*pos), member)) + +/** + * list_for_each_entry_continue_reverse - iterate backwards from the given point + * @pos: the type * to use as a loop cursor. + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + * + * Start to iterate over list of given type backwards, continuing after + * the current position. + */ +#define list_for_each_entry_continue_reverse(pos, head, member) \ + for (pos = list_entry(pos->member.prev, typeof(*pos), member); \ + prefetch(pos->member.prev), &pos->member != (head); \ + pos = list_entry(pos->member.prev, typeof(*pos), member)) + +/** + * list_for_each_entry_from - iterate over list of given type from the current point + * @pos: the type * to use as a loop cursor. + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + * + * Iterate over list of given type, continuing from current position. + */ +#define list_for_each_entry_from(pos, head, member) \ + for (; prefetch(pos->member.next), &pos->member != (head); \ + pos = list_entry(pos->member.next, typeof(*pos), member)) + +/** + * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry + * @pos: the type * to use as a loop cursor. + * @n: another type * to use as temporary storage + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + */ +#define list_for_each_entry_safe(pos, n, head, member) \ + for (pos = list_entry((head)->next, typeof(*pos), member), \ + n = list_entry(pos->member.next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = n, n = list_entry(n->member.next, typeof(*n), member)) + +/** + * list_for_each_entry_safe_continue + * @pos: the type * to use as a loop cursor. + * @n: another type * to use as temporary storage + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + * + * Iterate over list of given type, continuing after current point, + * safe against removal of list entry. + */ +#define list_for_each_entry_safe_continue(pos, n, head, member) \ + for (pos = list_entry(pos->member.next, typeof(*pos), member), \ + n = list_entry(pos->member.next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = n, n = list_entry(n->member.next, typeof(*n), member)) + +/** + * list_for_each_entry_safe_from + * @pos: the type * to use as a loop cursor. + * @n: another type * to use as temporary storage + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + * + * Iterate over list of given type from current point, safe against + * removal of list entry. + */ +#define list_for_each_entry_safe_from(pos, n, head, member) \ + for (n = list_entry(pos->member.next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = n, n = list_entry(n->member.next, typeof(*n), member)) + +/** + * list_for_each_entry_safe_reverse + * @pos: the type * to use as a loop cursor. + * @n: another type * to use as temporary storage + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + * + * Iterate backwards over list of given type, safe against removal + * of list entry. + */ +#define list_for_each_entry_safe_reverse(pos, n, head, member) \ + for (pos = list_entry((head)->prev, typeof(*pos), member), \ + n = list_entry(pos->member.prev, typeof(*pos), member); \ + &pos->member != (head); \ + pos = n, n = list_entry(n->member.prev, typeof(*n), member)) + +/* + * Double linked lists with a single pointer list head. + * Mostly useful for hash tables where the two pointer list head is + * too wasteful. + * You lose the ability to access the tail in O(1). + */ + +struct hlist_head { + struct hlist_node *first; +}; + +struct hlist_node { + struct hlist_node *next, **pprev; +}; + +#define HLIST_HEAD_INIT { .first = NULL } +#define HLIST_HEAD(name) struct hlist_head name = { .first = NULL } +#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL) +static inline void INIT_HLIST_NODE(struct hlist_node *h) +{ + h->next = NULL; + h->pprev = NULL; +} + +static inline int hlist_unhashed(const struct hlist_node *h) +{ + return !h->pprev; +} + +static inline int hlist_empty(const struct hlist_head *h) +{ + return !h->first; +} + +static inline void __hlist_del(struct hlist_node *n) +{ + struct hlist_node *next = n->next; + struct hlist_node **pprev = n->pprev; + *pprev = next; + if (next) + next->pprev = pprev; +} + +static inline void hlist_del(struct hlist_node *n) +{ + __hlist_del(n); + n->next = LIST_POISON1; + n->pprev = LIST_POISON2; +} + +static inline void hlist_del_init(struct hlist_node *n) +{ + if (!hlist_unhashed(n)) { + __hlist_del(n); + INIT_HLIST_NODE(n); + } +} + +static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h) +{ + struct hlist_node *first = h->first; + n->next = first; + if (first) + first->pprev = &n->next; + h->first = n; + n->pprev = &h->first; +} + +/* next must be != NULL */ +static inline void hlist_add_before(struct hlist_node *n, + struct hlist_node *next) +{ + n->pprev = next->pprev; + n->next = next; + next->pprev = &n->next; + *(n->pprev) = n; +} + +static inline void hlist_add_after(struct hlist_node *n, + struct hlist_node *next) +{ + next->next = n->next; + n->next = next; + next->pprev = &n->next; + + if(next->next) + next->next->pprev = &next->next; +} + +#define hlist_entry(ptr, type, member) container_of(ptr,type,member) + +#define hlist_for_each(pos, head) \ + for (pos = (head)->first; pos && ({ prefetch(pos->next); 1; }); \ + pos = pos->next) + +#define hlist_for_each_safe(pos, n, head) \ + for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \ + pos = n) + +/** + * hlist_for_each_entry - iterate over list of given type + * @tpos: the type * to use as a loop cursor. + * @pos: the &struct hlist_node to use as a loop cursor. + * @head: the head for your list. + * @member: the name of the hlist_node within the struct. + */ +#define hlist_for_each_entry(tpos, pos, head, member) \ + for (pos = (head)->first; \ + pos && ({ prefetch(pos->next); 1;}) && \ + ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ + pos = pos->next) + +/** + * hlist_for_each_entry_continue - iterate over a hlist continuing after current point + * @tpos: the type * to use as a loop cursor. + * @pos: the &struct hlist_node to use as a loop cursor. + * @member: the name of the hlist_node within the struct. + */ +#define hlist_for_each_entry_continue(tpos, pos, member) \ + for (pos = (pos)->next; \ + pos && ({ prefetch(pos->next); 1;}) && \ + ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ + pos = pos->next) + +/** + * hlist_for_each_entry_from - iterate over a hlist continuing from current point + * @tpos: the type * to use as a loop cursor. + * @pos: the &struct hlist_node to use as a loop cursor. + * @member: the name of the hlist_node within the struct. + */ +#define hlist_for_each_entry_from(tpos, pos, member) \ + for (; pos && ({ prefetch(pos->next); 1;}) && \ + ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ + pos = pos->next) + +/** + * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry + * @tpos: the type * to use as a loop cursor. + * @pos: the &struct hlist_node to use as a loop cursor. + * @n: another &struct hlist_node to use as temporary storage + * @head: the head for your list. + * @member: the name of the hlist_node within the struct. + */ +#define hlist_for_each_entry_safe(tpos, pos, n, head, member) \ + for (pos = (head)->first; \ + pos && ({ n = pos->next; 1; }) && \ + ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ + pos = n) + + +#endif + + diff --git a/program/cp_library/cp_logger.c b/program/cp_library/cp_logger.c new file mode 100644 index 0000000..b660d65 --- /dev/null +++ b/program/cp_library/cp_logger.c @@ -0,0 +1,420 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_log.c + * Description: This file is the linux infrastructural logger system library + * + * Version: 1.0.0(08/08/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "08/08/2012 04:24:01 PM" + * + ********************************************************************************/ + +#include "cp_logger.h" +#include "cp_common.h" + +#define PRECISE_TIME_FACTOR 1000 + +static unsigned long log_rollback_size = LOG_ROLLBACK_NONE; + +static cp_logger *logger = NULL; + +char *log_str[LOG_LEVEL_MAX + 1] = { "", "F", "E", "W", "N", "D", "I", "T", "M" }; + +static char *cp_time_format = DEFAULT_TIME_FORMAT; + +void cp_log_set_time_format(char *time_format) +{ + cp_time_format = time_format; +} + +static void cp_log_default_signal_handler(int sig) +{ + if(!logger) + return ; + + if (sig == SIGHUP) + { + signal(SIGHUP, cp_log_default_signal_handler); + log_fatal("SIGHUP received - reopenning log file [%s]", logger->file); + cp_log_reopen(); + } +} + +static void log_banner(char *prefix) +{ + if(!logger) + return ; + + fprintf(logger->fp, "%s log \"%s\" on level [%s] size [%lu], log system version %s\n", + prefix, logger->file, log_str[logger->level], log_rollback_size / 1024, LOG_VERSION_STR); +#ifdef LOG_FILE_LINE + fprintf(logger->fp, " [Date] [Time] [Level] [PID/TID] [File/Line] [Content]\n"); +#else + fprintf(logger->fp, " [Date] [Time] [Level] [PID/TID] [Content]\n"); +#endif + fprintf(logger->fp, "-------------------------------------------------------------\n"); +} + +static void check_and_rollback(void) +{ + if(!logger) + return ; + + if (log_rollback_size != LOG_ROLLBACK_NONE) + { + long _curOffset = ftell(logger->fp); + + if ((_curOffset != -1) && (_curOffset >= log_rollback_size)) + { + char cmd[512]; + + snprintf(cmd, sizeof(cmd), "cp -f %s %s.roll", logger->file, logger->file); + system(cmd); + + if (-1 == fseek(logger->fp, 0L, SEEK_SET)) + fprintf(logger->fp, "log rollback fseek failed \n"); + + rewind(logger->fp); + + truncate(logger->file, 0); + log_banner("Already rollback"); + } + } +} + +cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size) +{ + if(NULL == log) + { + logger = t_malloc(sizeof(cp_logger)); + memset(logger, 0, sizeof(cp_logger)); + logger->flag |= CP_LOGGER_MALLOC; + } + else + { + logger = log; + memset(logger, 0, sizeof(cp_logger)); + logger->flag |= CP_LOGGER_ARGUMENT; + } + + if(NULL == logger) + { + return NULL; + } + + strncpy(logger->file, filename, FILENAME_LEN); + logger->level = level; + logger->size = log_size; + + return logger; +} + +int cp_log_open(void) +{ + struct sigaction act; + char *filemode; + + if(!logger) + { + return -1; + } + + log_rollback_size = logger->size <= 0 ? LOG_ROLLBACK_NONE : logger->size*1024; /* Unit KiB */ + + if ('\0' == logger->file) + return -1; + + if (!strcmp(logger->file, DBG_LOG_FILE)) + { + logger->fp = stderr; + log_rollback_size = LOG_ROLLBACK_NONE; + logger->flag |= CP_LOGGER_CONSOLE; + goto OUT; + } + + //filemode = (log_rollback_size==LOG_ROLLBACK_NONE) ? "a+" : "w+"; + filemode = "a+"; + + logger->fp = fopen(logger->file, filemode); + if (NULL == logger->fp) + { + fprintf(stderr, "Open log file \"%s\" in %s failure\n", logger->file, filemode); + return -2; + } + + act.sa_handler = cp_log_default_signal_handler; + sigemptyset(&act.sa_mask); + act.sa_flags = 0; + sigaction(SIGHUP, &act, NULL); + + OUT: + log_banner("Initialize"); + + return 0; +} + +void cp_log_close(void) +{ + if (!logger || !logger->fp ) + return; + + log_banner("\nTerminate"); + cp_log_raw("\n\n\n\n"); + + fflush(logger->fp); + + fclose(logger->fp); + logger->fp = NULL; + + return ; +} + +int cp_log_reopen(void) +{ + int rc = 0; + char *filemode; + + if( !logger ) + return -1; + + if (logger->flag & CP_LOGGER_CONSOLE ) + { + fflush(logger->fp); + logger->fp = stderr; + return 0; + } + + if (logger->fp) + { + cp_log_close(); + //filemode = log_rollback_size == LOG_ROLLBACK_NONE ? "a+" : "w+"; + filemode = "a+"; + logger->fp = fopen(logger->file, filemode); + + if (logger->fp == NULL) + rc = -2; + } + else + { + rc = -3; + } + + if (!rc) + { + log_banner("\nReopen"); + } + return rc; +} + +void cp_log_term(void) +{ + if(!logger) + return ; + + cp_log_close(); + + if (logger->flag & CP_LOGGER_MALLOC ) + { + t_free(logger); + } + logger = NULL; +} + +void cp_log_raw(const char *fmt, ...) +{ + va_list argp; + + if (!logger || !logger->fp) + return; + + check_and_rollback(); + + va_start(argp, fmt); + vfprintf(logger->fp, fmt, argp); + va_end(argp); +} + +static void cp_printout(char *level, char *fmt, va_list argp) +{ + char buf[MAX_LOG_MESSAGE_LEN]; + struct tm *local; + struct timeval now; + char timestr[256]; + + if(!logger) + return ; + + pthread_t tid; + + check_and_rollback(); + +#ifdef MULTHREADS + tid = pthread_self(); +#else + tid = getpid(); +#endif + + gettimeofday(&now, NULL); + local = localtime(&now.tv_sec); + + strftime(timestr, 256, cp_time_format, local); + vsnprintf(buf, MAX_LOG_MESSAGE_LEN, fmt, argp); + +#ifdef DUMPLICATE_OUTPUT + printf("%s.%03ld [%s] [%06lu]: %s", + timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, buf); +#endif + + if (logger->fp) + fprintf(logger->fp, "%s.%03ld [%s] [%06lu]: %s", timestr, now.tv_usec / PRECISE_TIME_FACTOR, + level, tid, buf); + + if (logger->fp) + fflush(logger->fp); +} + +static void cp_printout_line(char *level, char *fmt, char *file, int line, va_list argp) +{ + char buf[MAX_LOG_MESSAGE_LEN]; + struct tm *local; + struct timeval now; + char timestr[256]; + + if(!logger) + return ; + + pthread_t tid; + + check_and_rollback(); + +#ifdef MULTHREADS + tid = pthread_self(); +#else + tid = getpid(); +#endif + + gettimeofday(&now, NULL); + local = localtime(&now.tv_sec); + + strftime(timestr, 256, cp_time_format, local); + vsnprintf(buf, MAX_LOG_MESSAGE_LEN, fmt, argp); + +#ifdef DUMPLICATE_OUTPUT + printf("%s.%03ld [%s] [%06lu] (%s [%04d]) : %s", + timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, file, line, buf); +#endif + + if (logger->fp) + fprintf(logger->fp, "%s.%03ld [%s] [%06lu] (%s [%04d]) : %s", + timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, file, line, buf); + + if (logger->fp) + fflush(logger->fp); +} + +void cp_log(int level, char *fmt, ...) +{ + va_list argp; + + if (!logger || level>logger->level) + return; + + va_start(argp, fmt); + cp_printout(log_str[level], fmt, argp); + va_end(argp); +} + +void cp_log_line(int level, char *file, int line, char *fmt, ...) +{ + va_list argp; + + if (!logger || level>logger->level) + return; + + va_start(argp, fmt); + cp_printout_line(log_str[level], fmt, file, line, argp); + + va_end(argp); +} + +#define LINELEN 81 +#define CHARS_PER_LINE 16 +static char *print_char = + " " + " " + " !\"#$%&'()*+,-./" + "0123456789:;<=>?" + "@ABCDEFGHIJKLMNO" + "PQRSTUVWXYZ[\\]^_" + "`abcdefghijklmno" + "pqrstuvwxyz{|}~ " + " " + " " + " ???????????????" + "????????????????" + "????????????????" + "????????????????" + "????????????????" + "????????????????"; + +void cp_log_dump(int level, char *buf, int len) +{ + int rc; + int idx; + char prn[LINELEN]; + char lit[CHARS_PER_LINE + 2]; + char hc[4]; + short line_done = 1; + + if (!logger || level>logger->level) + return; + + rc = len; + idx = 0; + lit[CHARS_PER_LINE] = '\0'; + + while (rc > 0) + { + if (line_done) + snprintf(prn, LINELEN, "%08X: ", idx); + + do + { + unsigned char c = buf[idx]; + snprintf(hc, 4, "%02X ", c); + strncat(prn, hc, LINELEN); + + lit[idx % CHARS_PER_LINE] = print_char[c]; + } + while (--rc > 0 && (++idx % CHARS_PER_LINE != 0)); + + line_done = (idx % CHARS_PER_LINE) == 0; + if (line_done) + { +#ifdef DUMPLICATE_OUTPUT + printf("%s %s\n", prn, lit); +#endif + if (logger->fp) + fprintf(logger->fp, "%s %s\n", prn, lit); + } + } + + if (!line_done) + { + int ldx = idx % CHARS_PER_LINE; + lit[ldx++] = print_char[(int)buf[idx]]; + lit[ldx] = '\0'; + + while ((++idx % CHARS_PER_LINE) != 0) + strncat(prn, " ", LINELEN); + +#ifdef DUMPLICATE_OUTPUT + printf("%s %s\n", prn, lit); +#endif + if (logger->fp) + fprintf(logger->fp, "%s %s\n", prn, lit); + + } +} diff --git a/program/cp_library/cp_logger.h b/program/cp_library/cp_logger.h new file mode 100644 index 0000000..471fe90 --- /dev/null +++ b/program/cp_library/cp_logger.h @@ -0,0 +1,110 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_logger.h + * Description: This file is the linux infrastructural logger system library + * + * Version: 1.0.0(08/08/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "08/08/2012 05:16:56 PM" + * + ********************************************************************************/ + +#ifndef __CP_LOG_H +#define __CP_LOG_H + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <signal.h> +#include <time.h> +#include <errno.h> + +#include <pthread.h> +#include <sys/types.h> +#include <sys/time.h> + +#define LOG_VERSION_STR "1.0.0" + +#ifndef FILENAME_LEN +#define FILENAME_LEN 64 +#endif + +#define DEFAULT_LOGFILE "cp_logger.log" +#define DBG_LOG_FILE "console" /* Debug mode log file is console */ + +#define LOG_ROLLBACK_SIZE 512 /* Default rollback log size */ +#define LOG_ROLLBACK_NONE 0 /* Set rollback size to 0 will not rollback */ + +#define DEFAULT_TIME_FORMAT "%Y-%m-%d %H:%M:%S" +#define MAX_LOG_MESSAGE_LEN 0x1000 + +//#define DUMPLICATE_OUTPUT /* Log to file and printf on console */ +#define LOG_FILE_LINE /* Log the file and line */ + +enum +{ + LOG_LEVEL_DISB = 0, /* Disable "Debug" */ + LOG_LEVEL_FATAL, /* Debug Level "Fatal" */ + LOG_LEVEL_ERROR, /* Debug Level "ERROR" */ + LOG_LEVEL_WARN, /* Debug Level "warnning" */ + LOG_LEVEL_NRML, /* Debug Level "Normal" */ + LOG_LEVEL_DEBUG, /* Debug Level "Debug" */ + LOG_LEVEL_INFO, /* Debug Level "Information" */ + LOG_LEVEL_TRACE, /* Debug Level "Trace" */ + LOG_LEVEL_MAX, +}; + +#define CP_LOGGER_MALLOC 1<<0 +#define CP_LOGGER_ARGUMENT 0<<0 + +#define CP_LOGGER_CONSOLE 1<<1 +#define CP_LOGGER_FILE 0<<1 + +#define CP_LOGGER_LEVEL_OPT 1<<2 /* The log level is sepcified by the command option */ +typedef struct _cp_logger +{ + unsigned char flag; /* This logger pointer is malloc() or passed by argument */ + char file[FILENAME_LEN]; + int level; + int size; + + FILE *fp; +} cp_logger; + +extern char *log_str[]; + +extern cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size); +extern int cp_log_open(void); +extern void cp_log_set_time_format(char *time_format); +extern int cp_log_reopen(void); +extern void cp_log_term(void); +extern void cp_log_raw(const char *fmt, ...); +extern void cp_log(int level, char *fmt, ...); +extern void cp_log_line(int level, char *file, int line, char *fmt, ...); + +extern void cp_log_dump(int level, char *buf, int len); + +#ifdef LOG_FILE_LINE +#define log_trace(fmt, ...) cp_log_line(LOG_LEVEL_TRACE, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_info(fmt, ...) cp_log_line(LOG_LEVEL_INFO, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_dbg(fmt, ...) cp_log_line(LOG_LEVEL_DEBUG, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_nrml(fmt, ...) cp_log_line(LOG_LEVEL_NRML, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_warn(fmt, ...) cp_log_line(LOG_LEVEL_WARN, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_err(fmt, ...) cp_log_line(LOG_LEVEL_ERROR, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_fatal(fmt, ...) cp_log_line(LOG_LEVEL_FATAL, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#else +#define log_trace(fmt, ...) cp_log(LOG_LEVEL_TRACE, fmt, ##__VA_ARGS__) +#define log_info(fmt, ...) cp_log(LOG_LEVEL_INFO, fmt, ##__VA_ARGS__) +#define log_dbg(fmt, ...) cp_log(LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__) +#define log_nrml(fmt, ...) cp_log(LOG_LEVEL_NRML, fmt, ##__VA_ARGS__) +#define log_warn(fmt, ...) cp_log(LOG_LEVEL_WARN, fmt, ##__VA_ARGS__) +#define log_err(fmt, ...) cp_log(LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__) +#define log_fatal(fmt, ...) cp_log(LOG_LEVEL_FATAL, fmt, ##__VA_ARGS__) +#endif + + +#endif /* __CP_LOG_H */ diff --git a/program/cp_library/cp_network.c b/program/cp_library/cp_network.c new file mode 100644 index 0000000..2949512 --- /dev/null +++ b/program/cp_library/cp_network.c @@ -0,0 +1,358 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_network.c + * Description: This file is the high level network library API + * + * Version: 1.0.0(10/31/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/31/2012 11:22:38 AM" + * + ********************************************************************************/ +#include <netinet/in.h> +#include <net/if.h> +#include <net/if_arp.h> +#include <arpa/inet.h> + +#include "cp_sock.h" +#include "cp_fds.h" +#include "cp_network.h" +#include "cp_network.h" +#include "cp_proc.h" + +/* Description: Configure the NIC MAC/IP address + * Input args: $nic: configure for which NIC(Network Interface Card): eth0, eth1 + * $mac: MAC address $ip: IP address + * Return Value: 0: Test OK, <0: Failed + */ +int nic_network_config(char *nic, char *mac, char *ip) +{ + if(!nic) + return -1; + + /*MAC address format: aa:bb:cc:dd:ee:ff */ + if(mac && 17==strlen(mac)) + { + /* shutdown the ethernet and clear the original IP address */ + exec_system_cmd("ifconfig %s down", nic, nic); + sleep(1); + exec_system_cmd("ifconfig %s hw ether %s up", nic, mac); + } + + /* IP address specified and valid */ + if(ip && inet_addr(ip)) + { + exec_system_cmd("ifconfig %s down && ifconfig %s 0.0.0.0", nic, nic); + sleep(2); + exec_system_cmd("ifconfig %s %s up", nic, ip); + } + + return 0; +} + + +int nic_get_ipaddr(char *nic, char *ipaddr) +{ + int fd; + struct ifreq ifr; + struct sockaddr_in *sin; + + if( !nic || !ipaddr ) + return -1; + + fd = socket(AF_INET, SOCK_DGRAM, 0); + strcpy(ifr.ifr_name, nic); + + if ((ioctl(fd, SIOCGIFADDR, (caddr_t)&ifr, sizeof(struct ifreq))) < 0) + { + log_fatal("System call ioctl() with SIOCGIFADDR get %s IP address failure.\n", nic); + return -2; + } + + sin = (struct sockaddr_in *)&ifr.ifr_addr; + strcpy(ipaddr, (const char *)inet_ntoa(sin->sin_addr)); + + log_dbg("Get %s local IP address: %s\n", nic, ipaddr); + + return 0; +} + +int nic_get_ptpaddr(char *nic, char *ptpaddr) +{ + int fd; + struct ifreq ifr; + struct sockaddr_in *sin; + + fd = socket(AF_INET, SOCK_DGRAM, 0); + strcpy(ifr.ifr_name, nic); + + if ((ioctl(fd, SIOCGIFDSTADDR, (caddr_t) & ifr, sizeof(struct ifreq))) < 0) + { + log_fatal("System call ioctl() with SIOCGIFDSTADDR get %s IP address failure.\n", nic); + return -1; + } + + sin = (struct sockaddr_in *)&ifr.ifr_dstaddr; + strcpy(ptpaddr, (const char *)inet_ntoa(sin->sin_addr)); + log_dbg("Get %s remote IP address: %s\n", nic, ptpaddr); + + return 0; +} + + +/* Description: Use ping do network test + * Input args: $from: : use which NIC(Network Interface Card: eth0, eth1) or + * source IP address do ping test. if it's NULL, use default route + * $ping_ip: The ping test destination IP address + * Output args: NONE + * Return Value: >=0 ping test packet lost percent, <0: failure + */ +int network_ping_test(char *from, char *ping_ip) +{ + FILE *fp; + char cmd[256]; + char buf[512]; + int lost_percent = 100; + unsigned long tx_packets = 0; + unsigned long rx_packets = 0; + + memset(cmd, 0, sizeof(cmd)); + if(from) + { + snprintf(cmd, sizeof(cmd), "ping -W1 -c5 -s4 %s -I %s", ping_ip, from); + } + else + { + snprintf(cmd, sizeof(cmd), "ping -W1 -c5 -s4 %s", ping_ip); + } + + if (NULL == (fp = popen(cmd, "r"))) + { + return -2; + } + + while (NULL != fgets(buf, sizeof(buf), fp)) + { + if (strstr(buf, "transmitted")) + { + split_string_to_value(buf, "%l,%l,%d", &tx_packets, &rx_packets, &lost_percent); + break; + } + } + + pclose(fp); + return lost_percent; +} + + +int cp_sock_accept_regist(CP_SOCK *serv_sock) +{ + CP_SOCK *new_sock = NULL; + int rv = 0; + + if(!serv_sock) + { + log_err("Invalude input arguments\n"); + return -1; + } + + log_dbg("Accept and regist new client from server [%d] on [%s:%d] now\n", + serv_sock->fd, serv_sock->laddr, serv_sock->lport); + + if(serv_sock->accept_cnt >= serv_sock->max_client) + { + log_err("No more client resource aviable on server socket [%d]\n", serv_sock->fd); + goto exit_out; + } + + if( !(new_sock=cp_sock_init(NULL, CP_SOCK_RCVBUF, CP_SOCK_SNDBUF, CP_SOCK_KEEPINTVL, CP_SOCK_KEEPCNT)) ) + { + log_err("Create a new socket contex for accept new client failed.\n"); + goto exit_out; + } + + new_sock->serv_sock = serv_sock; + new_sock->fds = serv_sock->fds; + new_sock->privt = serv_sock->privt; + new_sock->cbfunc = serv_sock->client_func; + new_sock->mode = CP_SOCK_MODE_ACCEPT; + + /* add accept new client into the socket registry list */ + if( cp_fds_add_sock_registry(new_sock) ) + { + rv = -2; + goto term_sock; + } + + /* accept the new client from server socket */ + if( cp_sock_accept(serv_sock, new_sock) ) + { + rv = -3; + goto del_regist; + } + + if( cp_add_epoll_event(new_sock) ) + { + rv = -4; + goto del_regist; + } + + log_dbg("Accept and regist new client from server [%d] on [%s:%d] ok\n", + serv_sock->fd, serv_sock->laddr, serv_sock->lport); + + return 0; + +del_regist: + cp_fds_del_sock_registry(new_sock); + +term_sock: + if(new_sock) + cp_sock_term_clear(new_sock); + +exit_out: + log_err("Accept and regist new client from server [%d] on [%s:%d] failed\n", + serv_sock->fd, serv_sock->laddr, serv_sock->lport); + + cp_fds_del_sock_task(serv_sock); + return rv; +} + +CP_SOCK *cp_sock_connect_regist(CP_FDS *fds, CP_SOCK *sock, char *raddr, int rport, int lport, CP_SOCK_EVENT_CALLBACK service_route) +{ + if(!fds || !raddr || rport<0) + { + log_err("Invalude input arguments\n"); + goto exit_out; + } + + if( !sock && !(sock=cp_sock_init(sock, CP_SOCK_RCVBUF, CP_SOCK_SNDBUF, CP_SOCK_KEEPINTVL, CP_SOCK_KEEPCNT)) ) + { + goto exit_out; + } + + if( SOCK_STAT_CONNECTED == sock->status ) + return sock; /* already ok now */ + + if( !(sock->flag&FLAG_SOCK_REGISTRY) ) + { + sock->fds = fds; + sock->cbfunc = service_route; + sock->mode = CP_SOCK_MODE_CONNECT; + strncpy(sock->laddr, "0.0.0.0", sizeof(sock->laddr)); + log_dbg("Connect and regist socket to remote [%s:%d] now\n", raddr, rport); + + if( cp_fds_add_sock_registry( sock) ) + goto term_sock; /* regist to the list failed */ + } + + if ( cp_sock_connect(sock, raddr, rport, lport) ) + { + log_dbg("socket [%d] connect failed, start to remove registry it now.\n", sock->fd); + goto del_regist; + } + else + { + if( cp_add_epoll_event(sock) ) + goto del_regist; + } + + return sock; + +del_regist: + cp_fds_del_sock_registry(sock); + +term_sock: + cp_fds_del_sock_task(sock); + if(sock) + cp_sock_term(sock); + +exit_out: + log_err("Connect and regist new socket to remote server [%s:%d] failed\n", raddr, rport); + return NULL; +} + +CP_SOCK *cp_sock_server_regist(CP_FDS *fds, char *addr, int port, int max_client, CP_SOCK_EVENT_CALLBACK service_route, void *data) +{ + int rv = 0; + + CP_SOCK *sock = NULL; + + log_dbg("Regist socket server listen on [%s:%d] now\n", addr?addr:"local", port); + + if(!fds || port < 0) + { + rv = -1; + log_err("Invalude input arguments\n"); + goto exit_out; + } + + if( !(sock=cp_sock_init(NULL, CP_SOCK_RCVBUF, CP_SOCK_SNDBUF, CP_SOCK_KEEPINTVL, CP_SOCK_KEEPCNT)) ) + { + rv = -2; + goto exit_out; + } + + INIT_LIST_HEAD(&sock->accept_list); + sock->fds = fds; + sock->cbfunc = cp_sock_accept_regist; + sock->client_func = service_route; + sock->privt = data; + sock->mode = CP_SOCK_MODE_LISTEN; + + if( cp_fds_add_sock_registry(sock) ) + { + rv = -3; + goto term_sock; + } + + /* If specified maximum clients <=0, then use the default one */ + sock->max_client = max_client<=0 ? CP_DEF_MAX_CLIENTS : max_client; + + /* If specified maximum clients larger than FDS monitor maxevents, then use the default one */ + sock->max_client = max_client<fds->max_event ? sock->max_client : CP_DEF_MAX_CLIENTS; + + if( cp_sock_listen(sock, addr, port, sock->max_client) ) + { + rv = -4; + goto del_regist; + } + + /* Add server socket FD to the epoll monitor list */ + if( cp_add_epoll_event(sock) ) + { + rv = -5; + goto del_regist; + } + + log_nrml("Registe socket[%d] server listen on [%s:%d] ok.\n", sock->fd, sock->laddr, sock->lport); + return sock; + +del_regist: + cp_fds_del_sock_registry(sock); + +term_sock: + cp_fds_del_sock_task(sock); + if(sock) + cp_sock_term_clear(sock); + +exit_out: + log_err("Registe socket server listen on [%s:%d] failed.\n", addr, port); + return NULL; +} + +void cp_sock_term_all_service(CP_FDS *fds) +{ + if(!fds) + return; + + log_dbg("Terminate all the service now\n"); + + cp_sock_term_all_task(fds); + cp_sock_term_all_server(fds); + cp_sock_term_all_client(fds); + + cp_fds_term(fds); + log_warn("Terminate all the service ok\n"); +} + diff --git a/program/cp_library/cp_network.h b/program/cp_library/cp_network.h new file mode 100644 index 0000000..7ea258d --- /dev/null +++ b/program/cp_library/cp_network.h @@ -0,0 +1,37 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_network.h + * Description: This head file + * + * Version: 1.0.0(10/31/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/31/2012 11:24:06 AM" + * + ********************************************************************************/ +#ifndef __CP_NETWORK_H +#define __CP_NETWORK_H + +#include "cp_fds.h" +#include "cp_sock.h" + +#define CP_DEF_MAX_CLIENTS 1024 +#define CP_DEF_TIMEOUT 10 + +extern int nic_network_config(char *nic, char *mac, char *ip); +extern int nic_get_ipaddr(char *nic, char *ipaddr); +extern int nic_get_ptpaddr(char *nic, char *ptpaddr); +extern int network_ping_test(char *from, char *ping_ip); + +extern int cp_sock_accept_regist(CP_SOCK *serv_sock); + +extern CP_SOCK *cp_sock_connect_regist(CP_FDS *fds, CP_SOCK *sock, char *raddr, int rport, int lport, CP_SOCK_EVENT_CALLBACK service_route); + +extern CP_SOCK *cp_sock_server_regist(CP_FDS *fds, char *addr, int port, int max_client, CP_SOCK_EVENT_CALLBACK service_route, void *data); + +extern void cp_sock_term_all_service(CP_FDS *fds); +#define cp_sock_term_all_service_clear(fds) {cp_sock_term_all_service(fds); fds=NULL;} + +#endif + diff --git a/program/cp_library/cp_ppp.c b/program/cp_library/cp_ppp.c new file mode 100644 index 0000000..78750eb --- /dev/null +++ b/program/cp_library/cp_ppp.c @@ -0,0 +1,552 @@ +/******************************************************************************** + * Copyright: (C) guowenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: ppp.c + * Description: This file is the ppp thread file,used to do PPP dial up + * + * Version: 1.0.0(02/02/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "02/02/2012 11:33:33 AM" + * + ********************************************************************************/ +#include <sys/ioctl.h> +#include <netinet/in.h> +#include <net/if.h> +#include <net/if_arp.h> +#include <arpa/inet.h> +#include "cp_ppp.h" +#include "cp_string.h" +#include "cp_iniparser.h" +#include "cp_network.h" +//#include "gsmd.h" + +/* + * Description: Check PPP10 device exist or not, and set the PPP context status + * + * + * Return Value: 0: PPP10 device exist -1:PPP10 device not exist + * + */ +int check_ppp_interface(char *ppp_dev) +{ + int fd = -1; + int retval = -1; + char buf[512]; + + if ((fd = open("/proc/net/dev", O_RDONLY, 0666)) < 0) + { + return -1; /* System error, take as PPP10 device not exist too */ + } + + while (read(fd, buf, sizeof(buf)) > 0) + { + if (NULL != strstr(buf, ppp_dev)) + { + retval = 0; + break; + } + } + + close(fd); + return retval; +} + +int check_ppp_ipaddr(PPPD_INFO *pppd_info, char *ppp_dev) +{ + int fd; + struct ifreq ifr; + struct sockaddr_in *sin; + + if(check_ppp_interface(ppp_dev)) + return -2; + + fd = socket(AF_INET, SOCK_DGRAM, 0); + strcpy(ifr.ifr_name, ppp_dev); + + if ((ioctl(fd, SIOCGIFADDR, (caddr_t) & ifr, sizeof(struct ifreq))) < 0) + { + log_fatal("System call ioctl() with SIOCGIFADDR failure.\n", ppp_dev); + return -1; + } + + sin = (struct sockaddr_in *)&ifr.ifr_addr; + strcpy(pppd_info->netaddr, (const char *)inet_ntoa(sin->sin_addr)); + log_nrml("Get %s local IP address: %s\n", ppp_dev, pppd_info->netaddr); + + if ((ioctl(fd, SIOCGIFDSTADDR, (caddr_t) & ifr, sizeof(struct ifreq))) < 0) + { + log_fatal("System call ioctl() with SIOCGIFDSTADDR failure.\n", ppp_dev); + return -1; + } + sin = (struct sockaddr_in *)&ifr.ifr_dstaddr; + strcpy(pppd_info->ptpaddr, (const char *)inet_ntoa(sin->sin_addr)); + log_nrml("Get %s remote IP address: %s\n", ppp_dev, pppd_info->ptpaddr); + + return 0; +} + +int check_ppp_stat(PPP_STAT *ppp_stat, char *ppp_dev) +{ + int retval; + FILE *fp; + char *ptr; + char buf[512]; + + if( NULL == (fp=fopen(PPP_PROC_NET_DEV, "r")) ) + { + log_err("Can not open %s.\n", PPP_PROC_NET_DEV); + return -1; + } + + fgets(buf, sizeof(buf), fp); + fgets(buf, sizeof(buf), fp); + + while (fgets(buf, sizeof(buf), fp)) + { + ptr=strstr(buf, ppp_dev); + if(NULL == ptr) + { + log_err("Can not find %s interface statistic data in %s\n", ppp_dev, PPP_PROC_NET_DEV); + retval = -1; + break; + } + else + { + ptr = strchr(ptr, ':'); + ptr++; + sscanf(ptr, "%llu%llu%lu%lu%lu%lu%lu%lu%llu%llu%lu%lu%lu%lu%lu%lu", + &(ppp_stat->ullRx_Bytes), + &(ppp_stat->ullRx_Packets), + &(ppp_stat->ulRx_Errors), + &(ppp_stat->ulRx_Dropped), + &(ppp_stat->ulRx_FIFO_Errors), + &(ppp_stat->ulRx_Frame_Errors), + &(ppp_stat->ulRx_Compressed), + &(ppp_stat->ulRx_Multicast), + &(ppp_stat->ullTx_Bytes), + &(ppp_stat->ullTx_Packets), + &(ppp_stat->ulTx_Errors), + &(ppp_stat->ulTx_Dropped), + &(ppp_stat->ulTx_FIFO_Errors), + &(ppp_stat->ulCollisions), + &(ppp_stat->ulTx_Carrier_Errors), + &(ppp_stat->ulTx_Compressed) + ); + retval = 0; + break; + } + } + + if(0 == retval ) + log_dbg("Check PPP network traffic: Tx %llu bytes, Rx %llu bytes.\n", ppp_stat->ullTx_Bytes, ppp_stat->ullRx_Bytes); + fclose(fp); + return retval; +} + +int kill_pppd_process(COM_PORT *comport) +{ + int pid = -1; + + while( (pid=check_pppd_pid(comport->dev_name)) > 0) + { + log_nrml("Terminate pppd process [pid=%d]\n", pid); + kill(pid, SIGTERM); + sleep(1); /* Wait pppd process exit */ + } + + return 0; +} + +int stop_ppp_connect(PPP_CTX *ppp_ctx) +{ + log_warn("Stop PPP connection now.\n"); + + if(check_ppp_interface(ppp_ctx->dev)) + return 0; + + kill_pppd_process(ppp_ctx->comport); + + if(ppp_ctx->comport) + { + free_gsm_dataport("stop_ppp_connect()", ppp_ctx->module, &(ppp_ctx->comport)); + } + return 0; +} + +int get_apn_conf(char *ini_name, char *ini_key, APN_ACCOUNT *apn, unsigned char type) +{ + dictionary *ini ; + char tmp[64]; + char *str; + + if(NULL==ini_name || NULL==ini_key || NULL==apn) + { + return -1; + } + + ini = iniparser_load(ini_name); + if (ini==NULL) + { + log_err("cannot load default APN configure file: %s\n", ini_name); + return -2 ; + } + log_dbg("Parser default APN configure file %s\n", ini_name); + + /* Parser APN configure */ + snprintf(tmp, 64, "%s:%s", ini_key, APN_3G==type?"3g_apn":"apn"); + if( !(str=iniparser_getstring(ini, tmp, NULL)) ) + { + log_err("cannot find APN setting for SIM [%s] in file: %s\n", ini_key, ini_name); + memset(apn, 0, sizeof(APN_ACCOUNT)); + return -1; + } + else + { + strncpy(apn->apn, str, APN_LEN); + } + + /* Paser APN username information */ + snprintf(tmp, 64, "%s:%s", ini_key, APN_3G==type?"3g_uid":"uid"); + str = iniparser_getstring(ini, tmp, NULL); + strncpy(apn->uid, str, UID_LEN); + + + /* Paser APN password information */ + snprintf(tmp, 64, "%s:%s", ini_key, APN_3G==type?"3g_pwd":"pwd"); + str = iniparser_getstring(ini, tmp, NULL); + strncpy(apn->pwd, str, PWD_LEN); + + iniparser_freedict(ini); + return 0; +} + + +int select_apn(PPP_CTX *ppp_ctx, char *key) +{ + int retval; + unsigned char type = APN_2G; + + log_nrml("GPRS module work on GPRS mode, select APN now.\n"); + + retval = get_apn_conf(APN_DEF_CONF_FILE, key, &(ppp_ctx->apn), type); + if(!retval) + { + log_err("Get default APN [%s] from %s ok\n", ppp_ctx->apn.apn, APN_DEF_CONF_FILE); + return 0; + } + + return -1; +} + +#define PPPD_CMD_LEN 512 +int start_ppp_dial_cmd(COM_PORT *comport, APN_ACCOUNT *apn, char *ppp_dev) +{ + char tmp[64]; + char pppd_cmd[PPPD_CMD_LEN]; + pid_t pid; + + if( !comport || !comport->is_connted ) + { + log_err("GPRS module data port %s is not opened.\n", comport->dev_name); + return -1; + } + + if( !apn || strlen(apn->apn)<=0 ) + { + log_err("No valid APN was set.\n"); + return -1; + } + + log_nrml("Start PPP connection with APN \"%s\" now.\n", apn->apn); + + memset(pppd_cmd, 0, PPPD_CMD_LEN); + snprintf(pppd_cmd, PPPD_CMD_LEN, "%s -d %s ", PPPD_DIAL_SCRIPTS, comport->dev_name); + + snprintf(tmp, sizeof(tmp), " -a %s ", apn->apn); + strncat(pppd_cmd, tmp, PPPD_CMD_LEN); + + if( strlen(apn->uid) > 0 ) + { + snprintf(tmp, sizeof(tmp), " -u %s ", apn->uid); + strncat(pppd_cmd, tmp, PPPD_CMD_LEN); + } + + if( strlen(apn->pwd) > 0 ) + { + snprintf(tmp, sizeof(tmp), " -p %s ", apn->pwd); + strncat(pppd_cmd, tmp, PPPD_CMD_LEN); + } + + if( strlen(apn->auth) > 0 ) + { + snprintf(tmp, sizeof(tmp), " -v %s ", apn->auth); + strncat(pppd_cmd, tmp, PPPD_CMD_LEN); + } + + strncat(pppd_cmd, ppp_dev, PPPD_CMD_LEN); + + log_nrml("ppp dial up command: %s\n", pppd_cmd); + + pid = fork(); + if( 0 == pid ) /* Child process */ + { + system(pppd_cmd); + exit(0); + } + else if (pid < 0) + { + log_err("Create new process failure.\n"); + return -1; + } + else + { + log_dbg("pppd program already running.\n"); + micro_second_sleep(1000); + } + + return 0; +} + +int check_pppd_pid(char *find_key) +{ + char buf[10]; + char cmd[128]; + FILE *fp = NULL; + int pid = -1; + + snprintf(cmd, sizeof(cmd), "ps | grep -v grep | grep pppd | grep %s | awk '{print $1}'", find_key); + + fp = popen(cmd, "r"); + if(NULL == fp) + { + log_fatal("popen() to check the pppd process ID failure.\n"); + return -1; + } + + memset(buf, 0, sizeof(buf)); + fgets(buf, sizeof(buf), fp); + + pid = atoi(buf); + + if(pid <= 1) + { + log_err("Get pppd program running pid failure\n"); + pid = -1; + } +#if 0 + else + { + log_trace("pppd program running pid is [%d]\n", pid); + } +#endif + + pclose(fp); + return pid; +} + +void set_ppp_disconnect(PPP_CTX *ppp_ctx) +{ + ppp_ctx->status = DISCONNECT; + ppp_ctx->pppd_info.start_time = 0; + + memset(&(ppp_ctx->pppd_info), 0, sizeof(PPPD_INFO)); + memset(&(ppp_ctx->ppp_stat), 0, sizeof(PPP_STAT)); + ppp_ctx->network = PPP_STOP; +} + + +int ppp_context_init(PPP_CTX *ppp_ctx, MODULE_INFO *module) +{ + memset(ppp_ctx, 0, sizeof(*ppp_ctx)); + + ppp_ctx->thread_id = pthread_self(); + ppp_ctx->module = module; + strncpy(ppp_ctx->dev, PPP_INTERFACE_NAME, sizeof(ppp_ctx->dev)); + strncpy(ppp_ctx->ping_ip, DEF_PING_DST, sizeof(ppp_ctx->ping_ip)); + ppp_ctx->ping_interval = PING_INTERVAL_TIME; + set_ppp_disconnect(ppp_ctx); + + log_nrml("Initialize PPP thread context ok\n"); + return 0; +} + +void ppp_context_term(PPP_CTX *ppp_ctx) +{ + stop_ppp_connect(ppp_ctx); + set_ppp_disconnect(ppp_ctx); + + log_nrml("Terminate PPP thread context ok\n"); +} + +int start_ppp_connect(PPP_CTX *ppp_ctx) +{ + int retval; + MODULE_INFO *module = ppp_ctx->module; + + if( !ppp_ctx->comport ) + { + ppp_ctx->comport=alloc_gsm_dataport("start_ppp_connect()", ppp_ctx->module); + if(!ppp_ctx->comport) + return -1; + + log_dbg("PPP thread alloc GPRS dataport %s=>[fd:%d]\n", ppp_ctx->comport->dev_name, ppp_ctx->comport->fd); + } + + + switch(ppp_ctx->status) + { + case DISCONNECT: /* Select the APN now */ + set_ppp_disconnect(ppp_ctx); + retval = select_apn(ppp_ctx, module->reg.loc.mcc_mnc); + if(!retval) + { + log_nrml("Select APN successfully, go to next stage.\n"); + ppp_ctx->fail_cnt = 0; + ppp_ctx->status++; + } + else + { + log_warn("Select APN failure, request to reset GPRS module\n"); + ppp_ctx->fail_cnt ++; + set_module_event(module, REQ_POWER_RESET); + break; + } + + case SELECTED_APN: /* Select the APN now */ + log_warn("Run pppd program to start PPP connection now\n"); + ppp_ctx->network = PPP_CONN; + start_ppp_dial_cmd(ppp_ctx->comport, &(ppp_ctx->apn), ppp_ctx->dev); + ppp_ctx->status++; + break; + } + + return 0; +} + +int inspect_network_status(PPP_CTX *ppp_ctx) +{ + PPPD_INFO *pppd_info = &(ppp_ctx->pppd_info); + PPP_STAT *ppp_stat = &(ppp_ctx->ppp_stat); + int lost_percent; + unsigned long long last_tx_bytes= ppp_stat->ullTx_Bytes; + unsigned long long last_rx_bytes= ppp_stat->ullRx_Bytes; + + if( CONNECTED != ppp_ctx->status) + { + ppp_ctx->pppd_info.ping_time = 0; + memset(ppp_stat, 0, sizeof(PPP_STAT)); + + pppd_info->pid = check_pppd_pid(ppp_ctx->comport->dev_name); + if(pppd_info->pid <= 0) + { + /* pppd can not connect in 30s, then set it to DISCONNECT status */ + if(time_elapsed(pppd_info->start_time) >= PPPD_DIAL_TIMEOUT) + { + /* Sleep for 2 seconds, make sure the exit pppd process release the TTY device */ + micro_second_sleep(2000); + log_err("pppd process exit when do ppp dialing, set status to DISCONNECT.\n"); + set_ppp_disconnect(ppp_ctx); + } + } + else + { + if(strlen(pppd_info->netaddr) <=0 ) + { + check_ppp_ipaddr(pppd_info, ppp_ctx->dev); + log_dbg("pppd running process ID [%d].\n", pppd_info->pid); + } + } + } + + if( time_elapsed(pppd_info->ping_time) >= ppp_ctx->ping_interval*1000 ) + { + if(ppp_ctx->fail_cnt >= MAX_PPP_FAIL_CNT) + { + /* Sleep for 2 seconds, make sure the exit pppd process release the TTY device */ + micro_second_sleep(2000); + log_warn("PPP network inspect status failure, set status to DISCONNECT.\n"); + set_ppp_disconnect(ppp_ctx); + return 0; + } + + lost_percent = network_ping_test(ppp_ctx->dev, ppp_ctx->ping_ip); + ppp_ctx->network = lost_percent<=60 ? PPP_GOOD : PPP_BAD; + + if(lost_percent <= 80) + { + check_ppp_stat(ppp_stat, ppp_ctx->dev); + if(last_tx_bytes==ppp_stat->ullTx_Bytes || last_rx_bytes==ppp_stat->ullRx_Bytes) + { + log_warn("PPP interface traffic not increased, maybe ppp disconnected?\n"); + ppp_ctx->fail_cnt++; + } + else + { + log_nrml("Set PPP connection status to CONNECTED.\n"); + set_ppp_disconnect(ppp_ctx); + ppp_ctx->fail_cnt=0; + } + } + else + { + ppp_ctx->fail_cnt++; + } + ppp_ctx->pppd_info.ping_time = time_now(); + } + + return 0; +} + + +void *ppp_thread_workbody(void *thread_arg) +{ + PPP_CTX ppp_ctx; + + MODULE_INFO *module; + + module = (MODULE_INFO *)thread_arg; + ppp_context_init(&ppp_ctx, module); + + log_nrml("GPRS PPP thread start running\n"); + + while( !g_cp_signal.stop ) + { + if(ALL_READY != module->ready) + { + if(ppp_ctx.status>=CONNECTING) + { + log_nrml("Stop exist PPP connection and free TTY data port\n"); + stop_ppp_connect(&ppp_ctx); + } + + /* GPRS not ready, sleep for 200ms and check again */ + micro_second_sleep(200); + continue; + } + else + { + if(ppp_ctx.status>=CONNECTING) + { + inspect_network_status(&ppp_ctx); + } + else + { + start_ppp_connect(&ppp_ctx); + } + } + + sleep(1); + } + + ppp_context_term(&ppp_ctx); + pthread_exit(0); + return NULL; +} + +int start_thread_ppp(MODULE_INFO *module) +{ + pthread_t tid; + + return thread_start(&tid, ppp_thread_workbody, module); +} diff --git a/program/cp_library/cp_ppp.h b/program/cp_library/cp_ppp.h new file mode 100644 index 0000000..57edbb2 --- /dev/null +++ b/program/cp_library/cp_ppp.h @@ -0,0 +1,138 @@ +/******************************************************************************** + * Copyright: (C) guowenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: ppp.h + * Description: This head file is for PPP dial up thread. + * + * Version: 1.0.0(02/17/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "02/17/2012 11:11:54 AM" + * + ********************************************************************************/ +#ifndef __PPP_H +#define __PPP_H + +#include <netinet/in.h> + +#include "cp_comport.h" +#include "cp_proc.h" +#include "cp_gprs.h" + +#define PPPD_DIAL_TIMEOUT 20000 /* 20 seconds */ +#define PING_INTERVAL_TIME 10000 /* 10 seconds */ + +#define DEFAULT_PING_INTERVAL 30 +#define APN_LEN 128 +#define UID_LEN 64 +#define PWD_LEN 64 + +#define APN_3G 3 +#define APN_2G 2 + +#define PPPD_DIAL_SCRIPTS "/apps/tools/ifup-ppp" +#define PPP_INTERFACE_NAME "ppp10" +#define PPP_PROC_NET_DEV "/proc/net/dev" + +#define DEF_PING_DST "4.2.2.2" + +#define APN_DEF_CONF_FILE "/apps/etc/ppp/default_apn.conf" + +enum +{ + DISCONNECT = 0, + SELECTED_APN, + CONNECTING, + CONNECTED, +}; + + +typedef struct __APN_ACCOUNT +{ + char apn[APN_LEN]; + char uid[UID_LEN]; + char pwd[PWD_LEN]; + char auth[10]; /* PAP or CHAP */ +} APN_ACCOUNT; + +typedef struct __PPPD_INFO +{ + char netaddr[INET_ADDRSTRLEN]; + char ptpaddr[INET_ADDRSTRLEN]; + unsigned long start_time; + unsigned long ping_time; + pid_t pid; +} PPPD_INFO; + +typedef struct __PPP_STAT +{ + unsigned long long ullRx_Packets; // total packets received + unsigned long long ullTx_Packets; // total packets transmitted + unsigned long long ullRx_Bytes; // total bytes received + unsigned long long ullTx_Bytes; // total bytes transmitted + + unsigned long ulRx_Errors; // bad packets received + unsigned long ulTx_Errors; // packet transmit problems + unsigned long ulRx_Dropped; // no space in linux buffers + unsigned long ulTx_Dropped; // no space available in linux + unsigned long ulRx_Multicast; // multicast packets received + unsigned long ulRx_Compressed; + unsigned long ulTx_Compressed; + unsigned long ulCollisions; + + /* detailed rx_errors */ + unsigned long ulRx_Length_Errors; + unsigned long ulRx_Over_Errors; // receiver ring buff overflow + unsigned long ulRx_CRC_Errors; // recved pkt with crc error + unsigned long ulRx_Frame_Errors; // recv'd frame alignment error + unsigned long ulRx_FIFO_Errors; // recv'r fifo overrun + unsigned long ulRx_Missed_Errors; // receiver missed packet + + /* detailed tx_errors */ + unsigned long ulTx_Aborted_Errors; + unsigned long ulTx_Carrier_Errors; + unsigned long ulTx_FIFO_Errors; + unsigned long ulTx_Heartbeat_Errors; + unsigned long ulTx_Window_Errors; +} PPP_STAT; + +#define MAX_PPP_FAIL_CNT 3 + +#define PPP_STOP 0 /* PPP not work, but signal good */ +#define SIG_WEAK 1 /* PPP not work and signal is very weak */ +#define PPP_CONN 2 /* PPP is connecting */ +#define PPP_BAD 3 /* PPP is connected, but network/signal not good */ +#define PPP_GOOD 4 /* PPP is connected and network/signal good */ +typedef struct __PPP_CTX +{ + unsigned char enable; /* Enable PPP thread running or not, RFU */ + unsigned char status; /* Current PPP connection status */ + unsigned char network; /* PPP network status: PPP_FAIL,PPP_BAD,PPP_GOOD */ + char dev[10]; /* PPP dial up device name, such as PPP10 */ + + pthread_t thread_id; /* PPP Thread ID, RFU */ + + PPPD_INFO pppd_info; /* pppd process information */ + PPP_STAT ppp_stat; /* PPP network statistic */ + unsigned char fail_cnt; /* PPP failure count */ + + APN_ACCOUNT apn; /* PPP dial up APN */ + + char ping_ip[INET_ADDRSTRLEN]; + long ping_interval; + + COM_PORT *comport; + MODULE_INFO *module; +} PPP_CTX; + +int get_apn_conf(char *ini_name, char *ini_key, APN_ACCOUNT *apn, unsigned char type); +int check_pppd_pid(char *find_key); +int check_ppp_interface(char *ppp_inf); +int start_ppp_dial_cmd(COM_PORT *comport, APN_ACCOUNT *apn, char *ppp_inf); +int check_ppp_ipaddr(PPPD_INFO *pppd_info, char *ppp_inf); +int check_ppp_stat(PPP_STAT *ppp_stat, char *ppp_inf); +int stop_ppp_connect(PPP_CTX *ppp_ctx); + +int start_thread_ppp(MODULE_INFO *module); + +#endif /* End of __PPP_H */ diff --git a/program/cp_library/cp_proc.c b/program/cp_library/cp_proc.c new file mode 100644 index 0000000..47eb3d6 --- /dev/null +++ b/program/cp_library/cp_proc.c @@ -0,0 +1,341 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_proc.c + * Description: This file is the process API + * + * Version: 1.0.0(11/06/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/06/2012 09:19:02 PM" + * + ********************************************************************************/ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <libgen.h> +#include <fcntl.h> +#include <sys/types.h> +#include <sys/stat.h> + +#include "cp_proc.h" +#include "cp_logger.h" + +CP_PROC_SIG g_cp_signal={0}; + +void cp_proc_sighandler(int sig) +{ + switch(sig) + { + case SIGINT: + log_warn("SIGINT - stopping\n"); + g_cp_signal.stop = 1; + break; + + case SIGTERM: + //log_warn("SIGTERM - stopping\n"); + g_cp_signal.stop = 1; + break; +#if 0 + case SIGSEGV: + log_err("SIGSEGV - stopping\n"); + if(g_cp_signal.stop) + exit(0); + + g_cp_signal.stop = 1; + break; +#endif + + case SIGPIPE: + log_warn("SIGPIPE - warnning\n"); + g_cp_signal.stop = 1; + break; + + default: + break; + } +} + + +void cp_install_proc_signal(void) +{ + struct sigaction sigact, sigign; + + log_nrml("Install default signal handler.\n"); + + /* Initialize the catch signal structure. */ + sigemptyset(&sigact.sa_mask); + sigact.sa_flags = 0; + sigact.sa_handler = cp_proc_sighandler; + + /* Setup the ignore signal. */ + sigemptyset(&sigign.sa_mask); + sigign.sa_flags = 0; + sigign.sa_handler = SIG_IGN; + + sigaction(SIGTERM, &sigact, 0); /* catch terminate signal "kill" command */ + sigaction(SIGINT, &sigact, 0); /* catch interrupt signal CTRL+C */ + //sigaction(SIGSEGV, &sigact, 0); /* catch segmentation faults */ + sigaction(SIGPIPE, &sigact, 0); /* catch broken pipe */ +#if 0 + sigaction(SIGCHLD, &sigact, 0); /* catch child process return */ + sigaction(SIGUSR2, &sigact, 0); /* catch USER signal */ +#endif +} + + +/* **************************************************************************** + * FunctionName: daemonize + * Description : Set the programe runs as daemon in background + * Inputs : nodir: DON'T change the work directory to / : 1:NoChange 0:Change + * noclose: close the opened file descrtipion or not 1:Noclose 0:Close + * Output : NONE + * Return : NONE + * *****************************************************************************/ +void daemonize(int nochdir, int noclose) +{ + int retval, fd; + int i; + + /* already a daemon */ + if (1 == getppid()) + return; + + /* fork error */ + retval = fork(); + if (retval < 0) exit(1); + + /* parent process exit */ + if (retval > 0) + exit(0); + + /* obtain a new process session group */ + setsid(); + + if (!noclose) + { + /* close all descriptors */ + for (i = getdtablesize(); i >= 0; --i) + { + //if (i != g_logPtr->fd) + close(i); + } + + /* Redirect Standard input [0] to /dev/null */ + fd = open("/dev/null", O_RDWR); + + /* Redirect Standard output [1] to /dev/null */ + dup(fd); + + /* Redirect Standard error [2] to /dev/null */ + dup(fd); + } + + umask(0); + + if (!nochdir) + chdir("/"); + + return; +} + +/* **************************************************************************** + * FunctionName: record_daemon_pid + * Description : Record the running daemon program PID to the file "pid_file" + * Inputs : pid_file:The record PID file path + * Output : NONE + * Return : 0: Record successfully Else: Failure + * *****************************************************************************/ +int record_daemon_pid(const char *pid_file) +{ + struct stat fStatBuf; + int fd = -1; + int mode = S_IROTH | S_IXOTH | S_IRGRP | S_IXGRP | S_IRWXU; + char ipc_dir[64] = { 0 }; + + strncpy(ipc_dir, pid_file, 64); + + /* dirname() will modify ipc_dir and save the result */ + dirname(ipc_dir); + + /* If folder pid_file PATH doesnot exist, then we will create it" */ + if (stat(ipc_dir, &fStatBuf) < 0) + { + if (mkdir(ipc_dir, mode) < 0) + { + log_fatal("cannot create %s: %s\n", ipc_dir, strerror(errno)); + return -1; + } + + (void)chmod(ipc_dir, mode); + } + + /* Create the process running PID file */ + mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; + if ((fd = open(pid_file, O_RDWR | O_CREAT | O_TRUNC, mode)) >= 0) + { + char pid[PID_ASCII_SIZE]; + snprintf(pid, sizeof(pid), "%u\n", (unsigned)getpid()); + write(fd, pid, strlen(pid)); + close(fd); + + log_dbg("Record PID<%u> to file %s.\n", getpid(), pid_file); + } + else + { + log_fatal("cannot create %s: %s\n", pid_file, strerror(errno)); + return -1; + } + + return 0; +} + +/* **************************************************************************** + * FunctionName: get_daemon_pid + * Description : Get the daemon process PID from the PID record file "pid_file" + * Inputs : pid_file: the PID record file + * Output : NONE + * Return : pid_t: The daemon process PID number + * *****************************************************************************/ +pid_t get_daemon_pid(const char *pid_file) +{ + FILE *f; + pid_t pid; + + if ((f = fopen(pid_file, "rb")) != NULL) + { + char pid_ascii[PID_ASCII_SIZE]; + (void)fgets(pid_ascii, PID_ASCII_SIZE, f); + (void)fclose(f); + pid = atoi(pid_ascii); + } + else + { + log_fatal("Can't open PID record file %s: %s\n", pid_file, strerror(errno)); + return -1; + } + return pid; +} + +/* **************************************************************************** + * FunctionName: check_daemon_running + * Description : Check the daemon program already running or not + * Inputs : pid_file: The record running daemon program PID + * Output : NONE + * Return : 1: The daemon program alread running 0: Not running + * *****************************************************************************/ +int check_daemon_running(const char *pid_file) +{ + int retVal = -1; + struct stat fStatBuf; + + retVal = stat(pid_file, &fStatBuf); + if (0 == retVal) + { + pid_t pid = -1; + printf("PID record file \"%s\" exist.\n", pid_file); + + pid = get_daemon_pid(pid_file); + if (pid > 0) /* Process pid exist */ + { + if ((retVal = kill(pid, 0)) == 0) + { + printf("Program with PID[%d] seems running.\n", pid); + return 1; + } + else /* Send signal to the old process get no reply. */ + { + printf("Program with PID[%d] seems exit.\n", pid); + remove(pid_file); + return 0; + } + } + else if (0 == pid) + { + printf("Can not read program PID form record file.\n"); + remove(pid_file); + return 0; + } + else /* Read pid from file "pid_file" failure */ + { + printf("Read record file \"%s\" failure, maybe program still running.\n", pid_file); + return 1; + } + } + + return 0; +} + +/* **************************************************************************** + * FunctionName: set_daemon_running + * Description : Set the programe running as daemon if it's not running and record + * its PID to the pid_file. + * Inputs : pid_file: The record running daemon program PID + * Output : NONE + * Return : 0: Successfully. 1: Failure + * *****************************************************************************/ +int set_daemon_running(const char *pid_file) +{ + daemonize(0, 1); + log_nrml("Program running as daemon [PID:%d].\n", getpid()); + + if (record_daemon_pid(pid_file) < 0) + { + log_fatal("Record PID to file \"%s\" failure.\n", pid_file); + return -2; + } + + return 0; +} + + +int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg) +{ + int retval = 0; + + pthread_attr_t thread_attr; + + /* Initialize the thread attribute */ + retval = pthread_attr_init(&thread_attr); + if(retval) + return -1; + + /* Set the stack size of the thread */ + retval = pthread_attr_setstacksize(&thread_attr, 120 * 1024); + if(retval) + goto CleanUp; + + /* Set thread to detached state:Don`t need pthread_join */ + retval = pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED); + if(retval) + goto CleanUp; + + /* Create the thread */ + retval = pthread_create(thread_id, &thread_attr, thread_workbody, thread_arg); + if(retval) + goto CleanUp; + +CleanUp: + /* Destroy the attributes of thread */ + pthread_attr_destroy(&thread_attr); + return retval; +} + + +void exec_system_cmd(const char *format, ...) +{ + char cmd[256]; + va_list args; + int done; + + memset(cmd, 0, sizeof(cmd)); + + va_start(args, format); + done = vsnprintf(cmd, sizeof(cmd), format, args); + va_end(args); + + system(cmd); +} + + diff --git a/program/cp_library/cp_proc.h b/program/cp_library/cp_proc.h new file mode 100644 index 0000000..f79abe8 --- /dev/null +++ b/program/cp_library/cp_proc.h @@ -0,0 +1,42 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_proc.h + * Description: This head file is for Linux process API + * + * Version: 1.0.0(11/06/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/06/2012 09:21:33 PM" + * + ********************************************************************************/ + +#ifndef __CP_PROC_H +#define __CP_PROC_H + +#include <signal.h> + +#define PID_ASCII_SIZE 11 + +typedef struct __CP_PROC_SIG +{ + int signal; + unsigned stop; /* 0: Not term 1: Stop */ +} CP_PROC_SIG; + +typedef void *(THREAD_BODY) (void *thread_arg); + +extern CP_PROC_SIG g_cp_signal; +extern void cp_install_proc_signal(void); + +extern void daemonize(int nochdir, int noclose); +extern int record_daemon_pid(const char *pid_file); +extern pid_t get_daemon_pid(const char *pid_file); +extern int check_daemon_running(const char *pid_file); +extern int set_daemon_running(const char *pid_file); + +extern void exec_system_cmd(const char *format, ...); + +extern int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg); + +#endif diff --git a/program/cp_library/cp_queue.c b/program/cp_library/cp_queue.c new file mode 100644 index 0000000..6e1cf79 --- /dev/null +++ b/program/cp_library/cp_queue.c @@ -0,0 +1,155 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_queue.c + * Description: This file is the queue implement based on link list. + * + * Version: 1.0.0(11/12/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/12/2012 01:25:26 PM" + * + ********************************************************************************/ + +#include "cp_queue.h" +#include "cp_common.h" + +CP_QUEUE *cp_queue_init(CP_QUEUE *queue, int size) +{ + if(!queue) + { + queue = t_malloc(sizeof(*queue)); + } + memset(queue, 0, sizeof(*queue)); + + queue->size = size; + queue->items = 0; + queue->rear = queue->front = NULL; + + return queue; +} + +void *cp_enqueue(CP_QUEUE *queue, void *data) +{ + CP_QNODE *node; + + if(!queue || cp_queue_is_full(queue)) + { + return NULL; + } + + node = t_malloc(sizeof(*node)); + if(NULL == node) + { + return NULL; + } + + node->item = data; + node->next = NULL; + + if(cp_queue_is_empty(queue)) + { + queue->front = node; + } + else + { + queue->rear->next = node; + } + + queue->rear = node; + queue->items++; + + return data; +} + +void cp_travel_queue(CP_QUEUE *queue) +{ + CP_QNODE *node; + + for(node=queue->front; node!=NULL; node=node->next) + { + printf("queue node[%p] save data [%p]\n", node, node->item); + } +} + +void *cp_rmqueue(CP_QUEUE *queue, void *data) +{ + CP_QNODE *node, *tmp; + + if(!queue || cp_queue_is_empty(queue)) + { + return NULL; + } + + /* The first node->item is the data, we find it */ + if(queue->front->item==data) + { + tmp = queue->front; + queue->front = queue->front->next; + queue->items -= 1; + t_free(tmp); + return data; + } + + for(node=queue->front; node!=NULL; node=node->next) + { + if(node->next->item == data) + { + tmp = node->next; + queue->items -= 1; + + if(node->next != queue->rear) + node->next = node->next->next; + else + { + queue->rear = node; + queue->rear->next = NULL; + } + + t_free(tmp); + return data; + } + } + + return data; +} + +void *cp_dequeue(CP_QUEUE *queue) +{ + CP_QNODE *node; + void *item; + + if(!queue || cp_queue_is_empty(queue)) + { + return NULL; + } + + node = queue->front; + queue->front = queue->front->next; + + item = node->item; + t_free(node); + + queue->items--; + + if(queue->items == 0) + queue->rear = NULL; + + return item; +} + +void cp_queue_destroy(CP_QUEUE *queue) +{ + if(!queue) + return ; + + while( !cp_queue_is_empty(queue) ) + { + cp_dequeue(queue); + } + + t_free(queue); + + return ; +} + diff --git a/program/cp_library/cp_queue.h b/program/cp_library/cp_queue.h new file mode 100644 index 0000000..c64cd06 --- /dev/null +++ b/program/cp_library/cp_queue.h @@ -0,0 +1,49 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_queue.h + * Description: This head file is for the queue implement based on link list. + * + * Version: 1.0.0(11/12/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/12/2012 01:26:34 PM" + * + ********************************************************************************/ +#ifndef __CP_QUEUE +#define __CP_QUEUE + +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +typedef struct _CP_QNODE +{ + void *item; + struct _CP_QNODE *next; +} CP_QNODE; + + +typedef struct _CP_QUEUE +{ + CP_QNODE *front; + CP_QNODE *rear; + int items; + int size; +} CP_QUEUE; + +#define cp_queue_is_full(pq) ( (pq)->size==(pq)->items ? 1 :0 ) +#define cp_queue_is_empty(pq) ( 0==(pq)->items ? 1 : 0) +#define cp_queue_count(pq) ( (pq)->items ) +#define cp_queue_size(pq) ( (pq)->size ) + +CP_QUEUE *cp_queue_init(CP_QUEUE *queue, int size); +void *cp_enqueue(CP_QUEUE *queue, void *data); +void cp_travel_queue(CP_QUEUE *queue); +void *cp_rmqueue(CP_QUEUE *queue, void *data); +void *cp_dequeue(CP_QUEUE *queue); +void cp_queue_destroy(CP_QUEUE *queue); +#define cp_queue_destroy_clear(queue) {cp_queue_destroy(queue); queue=NULL;} + +#endif diff --git a/program/cp_library/cp_ringbuf.c b/program/cp_library/cp_ringbuf.c new file mode 100644 index 0000000..54d5e09 --- /dev/null +++ b/program/cp_library/cp_ringbuf.c @@ -0,0 +1,103 @@ +/* + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Based on ringbuffer.c by Patrick Prasse (patrick.prasse@gmx.net). Code + has been modified by Telenor and Gemalto. + + */ + + +#include <string.h> +#include <assert.h> +#include "cp_ringbuf.h" + +void rb_init (struct ring_buffer *ring, u_char* buff, int size) { + memset (ring, 0, sizeof (struct ring_buffer)); + ring->rd_pointer = 0; + ring->wr_pointer = 0; + ring->buffer= buff; + ring->size = size; +} + +int +rb_write (struct ring_buffer *rb, u_char * buf, int len) +{ + int total; + int i; + + /* total = len = min(space, len) */ + total = rb_free_size(rb); + if(len > total) + len = total; + else + total = len; + + i = rb->wr_pointer; + if(i + len > rb->size) + { + memcpy(rb->buffer + i, buf, rb->size - i); + buf += rb->size - i; + len -= rb->size - i; + i = 0; + } + memcpy(rb->buffer + i, buf, len); + rb->wr_pointer = i + len; + return total; +} + +int rb_free_size (struct ring_buffer *rb){ + return (rb->size - 1 - rb_data_size(rb)); +} + +int rb_read (struct ring_buffer *rb, u_char * buf, int max) { + int total; + int i; + /* total = len = min(used, len) */ + total = rb_data_size(rb); + + if(max > total) + max = total; + else + total = max; + + i = rb->rd_pointer; + if(i + max > rb->size) + { + memcpy(buf, rb->buffer + i, rb->size - i); + buf += rb->size - i; + max -= rb->size - i; + i = 0; + } + memcpy(buf, rb->buffer + i, max); + rb->rd_pointer = i + max; + + return total; +} + +int rb_data_size (struct ring_buffer *rb) { + return ((rb->wr_pointer - rb->rd_pointer) & (rb->size-1)); +} + +void rb_clear (struct ring_buffer *rb) { + memset(rb->buffer,0,rb->size); + rb->rd_pointer=0; + rb->wr_pointer=0; +} + +u_char rb_peek(struct ring_buffer* rb, int index) { + assert(index < rb_data_size(rb)); + + return rb->buffer[((rb->rd_pointer + index) % rb->size)]; +} diff --git a/program/cp_library/cp_ringbuf.h b/program/cp_library/cp_ringbuf.h new file mode 100644 index 0000000..617d187 --- /dev/null +++ b/program/cp_library/cp_ringbuf.h @@ -0,0 +1,57 @@ +/* + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Based on ringbuffer.h by Patrick Prasse (patrick.prasse@gmx.net). Code + has been modified by Telenor and Gemalto. + + */ + +#ifndef __CP_RINGBUF_H_ +#define __CP_RINGBUF_H_ + +#include <sys/types.h> + +struct ring_buffer { + u_char *buffer; + int wr_pointer; + int rd_pointer; + int size; +}; + +/* Initial the ring buffer */ +void rb_init (struct ring_buffer *ring, u_char* buff, int size) ; + +/* Description: Write $len bytes data in $buf into ring buffer $rb + * Return Value: The actual written into ring buffer data size, if ring buffer + * left space size small than $len, then only part of the data be written into. + */ +int rb_write (struct ring_buffer *rb, u_char * buf, int len) ; + +/* Get ring buffer left free size */ +int rb_free_size (struct ring_buffer *rb); + +/* Read $max bytes data from ring buffer $rb to $buf */ +int rb_read (struct ring_buffer *rb, u_char * buf, int max); + +/* Read a specify $index byte data in ring buffer $rb */ +u_char rb_peek(struct ring_buffer* rb, int index); + +/* Get data size in the ring buffer */ +int rb_data_size (struct ring_buffer *); + +/* Clear the ring buffer data */ +void rb_clear (struct ring_buffer *rb) ; + +#endif /* __CP_RINGBUF_H_ */ diff --git a/program/cp_library/cp_sock.c b/program/cp_library/cp_sock.c new file mode 100644 index 0000000..e742615 --- /dev/null +++ b/program/cp_library/cp_sock.c @@ -0,0 +1,854 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_sock.c + * Description: This file is the Linux TCP socket basic library. + * + * Version: 1.0.0(10/26/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/26/2012 01:20:41 PM" + * + ********************************************************************************/ + +#include "cp_sock.h" +#include "cp_logger.h" +#include "cp_common.h" +#include "cp_time.h" + +CP_SOCK *cp_sock_init(CP_SOCK *sock, unsigned int rsize, unsigned int ssize, int keepintvl, int keepcnt) +{ + if(!sock) + { + if( !(sock=(CP_SOCK *)t_malloc(sizeof(*sock))) ) + { + log_err("socket context malloc failed: %s\n", strerror(errno)); + goto failed; + } + else + { + memset(sock, 0, sizeof(*sock)); + sock->flag |= FLAG_SOCK_MALLOC; + } + } + else + { + memset(sock, 0, sizeof(*sock)); + } + + if( !(sock->rbuf=cp_string_create_empty(CP_DEF_RCVBUF_SIZE)) ) + { + log_err("socket context create recv buffer failed\n"); + cp_sock_term(sock); + goto failed; + } + + if( !(sock->sbuf=cp_string_create_empty(CP_DEF_SNDBUF_SIZE)) ) + { + log_err("socket context create send buffer failed\n"); + cp_sock_term(sock); + goto failed; + } + + log_dbg("socket context [%p] initialise ok\n", sock); + sock->rsize = rsize; + sock->ssize = ssize; + sock->keepintvl = keepintvl; + sock->keepcnt = keepcnt; + sock->idle_timeout = CP_SOCK_DEF_IDLE_TIMEOUT; + sock->msg_timeout = CP_SOCK_DEF_MSG_TIMEOUT; + sock->fd = -1; + sock->index = -1; + sock->actv_time = time_now(); + + sock->flag |= FLAG_SOCK_INIT; + + return sock; + +failed: + log_err("socket context initialize failed\n"); + return NULL; +} + +void cp_sock_term(CP_SOCK *sock) +{ + if(!sock) + return; + + log_dbg("terminate socket [%p:%d] now\n", sock, sock->fd); + + if(sock->flag & FLAG_SOCK_INIT) + cp_sock_close(sock); + + if(sock->rbuf) + { + cp_string_destroy(sock->rbuf); + } + + if(sock->privt && sock->privt_free) + { + sock->privt_free(); + } + + if(sock->sbuf) + { + cp_string_destroy(sock->sbuf); + } + + if(sock->flag & FLAG_SOCK_MALLOC) + { + //memset(sock, 0, sizeof(*sock)); + t_free(sock); + return ; + } + + //memset(sock, 0, sizeof(*sock)); + sock->fd = -1; + + return ; +} + +int cp_sock_close(CP_SOCK *sock) +{ + int rv = 0; + int force = 0; + + if(!sock) + return -1; + + if(sock->fd>0) + { + log_dbg("Close socket[%d] bind [%s:%d]\n", sock->fd, sock->laddr, sock->lport); + if(force) + { + /* + * If l_onoff is nonzero and l_linger is zero, TCP aborts the connection when it is closed. + * That is, TCP discards any data still remaining in the socket send buffer and sends an RST + * to the peer, not the normal four-packet connection termination sequence. + */ + struct linger so_linger; + + so_linger.l_onoff = 1; /* Turn on linger */ + so_linger.l_linger = 0; /* Set the timeout to 0 */ + + setsockopt (sock->fd, SOL_SOCKET, SO_LINGER, (char *) &so_linger, sizeof (struct linger)); + } + + if(CP_SOCK_MODE_ACCEPT == sock->mode || CP_SOCK_MODE_CONNECT == sock->mode) + { + shutdown (sock->fd, SHUT_RDWR); + } + + if( (rv=close(sock->fd)) ) + { + return -2; + } + } + + sock->fd = -1; + return rv; +} + + +int cp_sock_listen(CP_SOCK *sock, char *laddr, int lport, int backlog) +{ + int rv = 0; + int fd = -1; + char service[20]; + struct addrinfo hints, *rp; + struct addrinfo *res = NULL; + struct in_addr inaddr; + + if(!sock || !(sock->flag&FLAG_SOCK_INIT) || lport<=0 || backlog <=0) + { + log_err("Invalide input arguments\n"); + rv = -1; + goto cleanup; + } + + strncpy(sock->laddr, (!laddr?"0.0.0.0":laddr), sizeof(sock->laddr)); + log_dbg("Create socket listen on [%s:%d] now\n", sock->laddr, lport); + + cp_sock_close(sock); + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_INET; /* Only support IPv4 */ + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; /* TCP protocol */ + hints.ai_flags = AI_PASSIVE; + + /* If 'laddr' is a valid IP address, then don't use name resolution */ + if(laddr && inet_aton(laddr, &inaddr)) + { + log_info("%s is a valid IP address, don't use name resolution.\n", laddr); + hints.ai_flags |= AI_NUMERICHOST; + } + + /* Obtain address(es) matching host/port */ + snprintf(service, sizeof(service), "%d", lport); + if( (rv=getaddrinfo(laddr, service, &hints, &res)) ) + { + log_err("getaddrinfo() parser [%s:%s] failed: %s\n", laddr, service, gai_strerror(rv)); + rv = -2; + goto cleanup; + } + + + /* getaddrinfo() returns a list of address structures. Try each + * address until we successfully connect or bind*/ + sock->fd = -1; + for (rp=res; rp!=NULL; rp=rp->ai_next) + { + /* Create the socket */ + if( (fd=socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol)) < 0) + { + log_err("socket() create failed: %s\n", strerror(errno)); + rv = -3; + continue; + } + + cp_sock_set_reuseaddr(fd); + cp_sock_set_keepalive(fd, sock->keepintvl, sock->keepcnt); + cp_sock_set_nonblock(fd); + + if( 0==bind(fd, rp->ai_addr, rp->ai_addrlen) ) + { + struct sockaddr_in *saddr = (struct sockaddr_in *)rp->ai_addr; + sock->fd = fd; + sock->lport = lport; + + strncpy (sock->laddr, inet_ntoa (saddr->sin_addr), sizeof(sock->laddr)-1); + log_dbg("Bind socket[%d] ok\n", fd); + rv = 0; + break; + } + else + { + rv = -4; + log_err("Bind socket[%d] failed: %s\n", fd, strerror(errno)); + } + + close(fd); + } /* for (rp=res; rp!=NULL; rp=rp->ai_next) */ + + + if(sock->fd < 0) + { + close(fd); + goto cleanup; + } + + if(listen(sock->fd, backlog)) + { + log_err("Listen on socket[%d] failed: %s\n", sock->fd, strerror(errno)); + rv = -6; + goto cleanup; + } + + sock->mode = CP_SOCK_MODE_LISTEN; + sock->rport = 0; + memset(&sock->raddr, 0, sizeof(sock->raddr)); + +cleanup: + if( rv ) + { + log_err("Create socket listen on [%s:%d] failed\n", sock->laddr, lport); + if(sock->fd > 0) + close(sock->fd); + } + else + { + sock->actv_time = time_now(); + sock->status = SOCK_STAT_LISTENED; + log_nrml("Create socket[%p:%d] listen [%s:%d] ok\n", sock, sock->fd, sock->laddr, lport); + } + + if(res) + freeaddrinfo(res); /* No longer needed */ + return rv; +} + + +int cp_sock_accept(CP_SOCK *serv_sock, CP_SOCK *new_sock) +{ + struct sockaddr_in saddr; + socklen_t len = sizeof(saddr); + int fd = -1; + int rv = 0; + + if(!serv_sock || !new_sock || serv_sock->fd<0 ) + { + log_err("Invalide input arguments\n"); + rv = -1; + goto cleanup; + } + + log_dbg("accept new client from server [fd=%d %s:%d] now\n", serv_sock->fd, serv_sock->laddr, serv_sock->lport); + + if( (fd=accept(serv_sock->fd, (struct sockaddr *)&saddr, &len)) < 0 ) + { + log_err("Accept new client from server [fd=%d %s:%d] failed: %s\n", + serv_sock->fd, serv_sock->laddr, serv_sock->lport, strerror(errno)); + rv = -2; + goto cleanup; + } + + /* Set socket buffer size */ + cp_sock_set_buffer(fd, new_sock->rsize, new_sock->ssize); + /* Enable socket keepalive to detect network */ + cp_sock_set_keepalive(fd, new_sock->keepintvl, new_sock->keepcnt); + cp_sock_set_nonblock(fd); + + new_sock->fd = fd; + new_sock->mode = CP_SOCK_MODE_ACCEPT; + /* get remote address */ + strncpy (new_sock->raddr, inet_ntoa(saddr.sin_addr), sizeof(new_sock->raddr)-1); + new_sock->rport = ntohs(saddr.sin_port); + + /* Get local address */ + len = sizeof(saddr); + if (getsockname (new_sock->fd, (struct sockaddr *) &saddr, (socklen_t *) &len)) + { + strncpy(new_sock->laddr, serv_sock->laddr, sizeof(new_sock->laddr)-1); + new_sock->lport = serv_sock->lport; + } + else + { + strncpy (new_sock->laddr, inet_ntoa (saddr.sin_addr), sizeof (new_sock->laddr) - 1); + new_sock->lport = ntohs (saddr.sin_port); + } + +cleanup: + if(!rv) + { + new_sock->status = SOCK_STAT_ACCEPTED; + new_sock->actv_time = time_now(); + log_nrml("Accept new client socket [%d %s:%d] <== [%s:%d]\n", + new_sock->fd, new_sock->laddr, new_sock->lport, new_sock->raddr, new_sock->rport); + } + else + { + log_err("Accept new client from server [%d] on [%s:%d] failed\n", + serv_sock->fd, serv_sock->raddr, serv_sock->rport); + close(fd); + } + + return rv; +} + + +/* + * Description: Create a socket connect to the remove server + * Input args: $sock: The socket contex $raddr: Remote server address + * $rport: Remote server listened port + * $lport: Use this local port connect to remote server + * Output args: None + * Return value: <0:connect failed ==0:connect ok >0:connect in progress + * + */ +int cp_sock_connect(CP_SOCK *sock, char *raddr, int rport, int lport) +{ + int rv = 0; + int fd = -1; + char service[20]; + struct addrinfo hints, *rp; + struct addrinfo *res = NULL; + struct in_addr inaddr; + struct sockaddr_in saddr; + int len = sizeof(saddr); + + if(!sock || !(sock->flag&FLAG_SOCK_INIT) || !raddr || rport<=0) + { + log_err("Invalide input arguments\n"); + rv = -1; + goto failed; + } + + if(SOCK_STAT_CONNECTED == sock->status) + { + return 0; + } + else if(SOCK_STAT_CONNECTING == sock->status) + { + goto connecting; + } + + log_dbg("create socket connect to remote server [%s:%d] now\n", raddr, rport); + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_INET; /* Only support IPv4 */ + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; /* TCP protocol */ + hints.ai_flags = AI_PASSIVE; + + /* If 'raddr' is a valid IP address, then don't use name resolution */ + if(raddr && inet_aton(raddr, &inaddr)) + { + log_info("%s is a valid IP address, don't use name resolution.\n", raddr); + hints.ai_flags |= AI_NUMERICHOST; + } + + /* Obtain address(es) matching host/port */ + snprintf(service, sizeof(service), "%d", rport); + if( (rv=getaddrinfo(raddr, service, &hints, &res)) ) + { + log_err("getaddrinfo() parser [%s:%s] failed: %s\n", raddr, service, gai_strerror(rv)); + rv = -2; + goto failed; + } + + cp_sock_close(sock); /* close any opened socket on it */ + sock->fd = -1; + + /* getaddrinfo() returns a list of address structures. Try each + * address until we successfully connect or bind*/ + for (rp=res; rp!=NULL; rp=rp->ai_next) + { + fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + + /* Create the socket */ + if( fd < 0) + { + log_err("socket() create failed: %s\n", strerror(errno)); + rv = -3; + continue; + } + log_trace("create socket[%p:%d] with connect mode ok\n", sock, fd); + + /* We need bind lport to this socket */ + if(lport > 0) + { + memset(&saddr, 0, len); + saddr.sin_family = AF_INET; + saddr.sin_port = htons ((u_short) lport); + + if ( bind(fd, (struct sockaddr *)&saddr, len) ) + { + rv = -4; + close(fd); + log_err("Bind port[%d] to connect socket [%d] failed: %s\n", lport, fd, strerror(errno)); + continue; + } + else + { + sock->lport = lport; + rv = 0; + log_dbg("Bind port[%d] to connect socket [%d] OK\n", lport, fd); + } + } + + /* Set socket options */ + cp_sock_set_buffer(fd, sock->rsize, sock->ssize); + cp_sock_set_keepalive(fd, sock->keepintvl, sock->keepcnt); + cp_sock_set_nonblock(fd); + + /* Nono block Connect to the remote server */ + if(0==connect(fd, rp->ai_addr, rp->ai_addrlen)) + { + /* Conenct to server successfully */ + sock->fd = fd; + sock->status = SOCK_STAT_CONNECTING; + + memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr)); + + rv = 0; + goto connected; + } + else + { + if(EINPROGRESS == errno) + { + /* Connect to server now in progress */ + sock->fd = fd; + sock->status = SOCK_STAT_CONNECTING; + memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr)); + + rv = 0; + goto connecting; + } + else + { + /* Connect to server failed. */ + close(fd); + rv = -5; + log_err("connect() to server failed: %s\n", strerror(errno)); + goto failed; + } + } + + close(fd); + } /* for (rp=res; rp!=NULL; rp=rp->ai_next) */ + + + if(sock->fd < 0) + { + close(fd); + goto failed; + } + + +connecting: + if(SOCK_STAT_CONNECTING == sock->status) + { + + len = sizeof(sock->saddr); + + errno = 0; + if( !connect(sock->fd, &sock->saddr, len) ) + { + /* connect() return 0 means it already connected */ + sock->status = SOCK_STAT_CONNECTED; + rv = 0; + goto connected; + } + + /* Connect failure will continue to check */ + switch (errno) + { + case EISCONN: + sock->status = SOCK_STAT_CONNECTED; + rv = 0; + goto connected; + + case EALREADY: + case EINPROGRESS: + log_dbg("socket[%d] connect to remote [%s:%d] in progress\n", sock->fd, raddr, rport); + rv = 0; + goto cleanup; + + default: + log_err("socket[%d] connect to remote [%s:%d] failed: %s\n", sock->fd, raddr, rport, strerror(errno)); + sock->status = SOCK_STAT_DISCONNECT; + rv = -7; + break; + } + } + +connected: + if(SOCK_STAT_CONNECTED == sock->status) + { + rv = 0; + + log_nrml("socket[%d] connected to remote server [%s:%d]\n", sock->fd, raddr, rport); + /* Set remote address */ + sock->rport=rport; + strncpy (sock->raddr, raddr, sizeof(sock->raddr)-1); + sock->actv_time = time_now(); + + /* Get local address */ + memset(&saddr, 0, len); + len = sizeof(saddr); + + if (!getsockname (sock->fd, (struct sockaddr *) &saddr, (socklen_t *) &len)) + { + strncpy (sock->laddr, inet_ntoa (saddr.sin_addr), sizeof (sock->laddr) - 1); + sock->lport = ntohs (saddr.sin_port); + } + else + { + memset(&sock->laddr, 0, sizeof(sock->laddr)); + sock->lport = lport; + } + goto cleanup; + } + + +failed: + log_err("Create socket connect to [%s:%d] failed\n", raddr, rport); + if(sock && sock->fd >= 0) + close(sock->fd); + +cleanup: + if(res) + freeaddrinfo(res); /* No longer needed */ + + return rv; +} + + +int cp_sock_recv(CP_SOCK *sock) +{ + int rv, left; + int flag; + cp_string *rbuf; + + if(!sock || !sock->rbuf || !sock->rbuf->data || sock->fd<0) + { + log_err("Invalide input arguments\n"); + return -1; + } + + rbuf = sock->rbuf; + left = rbuf->size-rbuf->len; + flag = left ? 0 : MSG_PEEK; + + if(left <= 0) + return 0; + + rv=recv(sock->fd, &rbuf->data[rbuf->len], left, flag); + if( rv > 0) + { + rbuf->len += rv; + } + else if(rv<0) + { + if(EAGAIN==errno || EINPROGRESS==errno) + { + log_warn("socket [%d] please recv data again: %s\n", sock->fd, strerror(errno)); + rv = 0; + } + else + { + log_err("socket [%d] recv data failed: %s\n", sock->fd, strerror(errno)); + rv = -2; + } + } + + if(rv > 0) + { + sock->actv_time = sock->msg_time = time_now(); + } + return rv; +} + +int cp_sock_send(CP_SOCK *sock) +{ + int rv; + struct pollfd sock_poll; + + if(!sock || sock->fd<0 || !sock->sbuf->data || sock->sbuf->len<=0) + { + log_err("Invalide input arguments\n"); + return -1; + } + + sock_poll.events = POLLOUT; + sock_poll.fd = sock->fd; + + if( (rv=poll(&sock_poll, 1, 0)) > 0 ) + { + if( !(POLLOUT &sock_poll.events) ) + { + return -2; + } + + if ( (rv=send(sock->fd, sock->sbuf->data, sock->sbuf->len, MSG_NOSIGNAL)) < 0) + { + if (EAGAIN == errno) + { + log_warn("socket [%d] please send data again: %s\n", sock->fd, strerror(errno)); + return 0; + } + else + { + log_err("socket [%d] send data failed: %s\n", sock->fd, strerror(errno)); + return -4; + } + } + else + { + sock->sbuf->len -= rv; + sock->actv_time = time_now(); + memmove (sock->sbuf->data, sock->sbuf->data+rv, sock->sbuf->len); + return rv; + } + } + else /* poll()<0 means failed, poll()==0 means timeout */ + { + log_err("send data from socket [%d] poll failed: %s\n", sock->fd, strerror(errno)); + return 0; + } + + return 0; +} + +int cp_sock_set_nonblock(int sockfd) +{ + int opts; + /* + * fcntl may set: + * + * EACCES, EAGAIN: Operation is prohibited by locks held by other + * processes. Or, operation is prohibited because the file has + * been memory-mapped by another process. + * EBADF: fd is not an open file descriptor, or the command was F_SETLK + * or F_SETLKW and the file descriptor open mode doesn't match + * with the type of lock requested. + * EDEADLK: It was detected that the specified F_SETLKW command would + * cause a deadlock. + * EFAULT: lock is outside your accessible address space. + * EINTR: For F_SETLKW, the command was interrupted by a signal. For + * F_GETLK and F_SETLK, the command was interrupted by a signal + * before the lock was checked or acquired. Most likely when + * locking a remote file (e.g. locking over NFS), but can + * sometimes happen locally. + * EINVAL: For F_DUPFD, arg is negative or is greater than the maximum + * allowable value. For F_SETSIG, arg is not an allowable signal + * number. + * EMFILE: For F_DUPFD, the process already has the maximum number of + * file descriptors open. + * ENOLCK: Too many segment locks open, lock table is full, or a remote + * locking protocol failed (e.g. locking over NFS). + * EPERM: Attempted to clear the O_APPEND flag on a file that has the + * append-only attribute set. + */ + opts = fcntl(sockfd, F_GETFL); + if (opts < 0) + { + log_warn("fcntl() get socket options failure: %s\n", strerror(errno)); + return -1; + } + + opts |= O_NONBLOCK; + + if (fcntl(sockfd, F_SETFL, opts) < 0) + { + log_warn("fcntl() set socket options failure: %s\n", strerror(errno)); + return -1; + } + + log_dbg("Set socket[%d] none blocking\n", sockfd); + return opts; +} + +int cp_sock_set_buffer(int sockfd, int rsize, int ssize) +{ + int opt; + socklen_t optlen = sizeof(opt); + + if(sockfd < 0) + return -1; + + /* Get system default receive buffer size, Linux X86: 85K */ + if (getsockopt (sockfd, SOL_SOCKET, SO_RCVBUF, (char *) &opt, &optlen)) + { + log_warn("getsockopt() get receive buffer failure: %s\n", strerror(errno)); + return -2; + } + + /* Only when current receive buffer size larger than the default one will change it */ + if(rsize > opt) + { + opt = (int) rsize; + if (setsockopt (sockfd, SOL_SOCKET, SO_RCVBUF, (char *) &opt, optlen)) + { + log_warn("setsockopt() set receive buffer to %d failure: %s\n", opt, strerror(errno)); + return -2; + } + } + + /* Get system default send buffer size, Linux X86: 16K */ + if (getsockopt (sockfd, SOL_SOCKET, SO_SNDBUF, (char *) &opt, &optlen)) + { + log_warn("getsockopt() get send buffer failure: %s\n", strerror(errno)); + return -3; + } + + /* Only when current receive buffer size larger than the default one will change it */ + if(ssize > opt) + { + opt = (int) ssize; + if (setsockopt (sockfd, SOL_SOCKET, SO_SNDBUF, (char *) &opt, optlen)) + { + log_warn("setsockopt() set send buffer to %d failure: %s\n", opt, strerror(errno)); + return -3; + } + } + + log_info("Set socket[%d] RCVBUF size:%d SNDBUF size:%d\n", sockfd, rsize, ssize); + return 0; +} + +int cp_sock_set_reuseaddr(int sockfd) +{ + int opt = 1; + int len = sizeof (int); + + if (setsockopt (sockfd, SOL_SOCKET, SO_REUSEADDR, (void *) &opt, len)) + { + log_err("Set socket[%d] option SO_REUSEADDR failed:%s\n", sockfd, strerror(errno)); + return -1; + } + log_dbg("Set socket[%d] option SO_REUSEADDR ok\n", sockfd); + + return 0; +} + +/* + * Enable socket SO_KEEPALIVE, if the connection disconnected, any system call on socket + * will return immediately and errno will be set to "WSAENOTCONN" + * + * keepalive is not program related, but socket related, * so if you have multiple sockets, + * you can handle keepalive for each of them separately. + * + * Reference: http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/ + */ +int cp_sock_set_keepalive(int sockfd, int keepintvl, int keepcnt) +{ + int opt; + + if(sockfd < 0) + return -1; + + /* Enable the KEEPALIVE flag */ + opt = 1; + if (setsockopt (sockfd, SOL_SOCKET, SO_KEEPALIVE, (char *) &opt, sizeof (opt))) + { + log_warn("setsockopt() enable SO_KEEPALIVE failure: %s\n", strerror(errno)); + return -2; + } + + if(keepintvl || keepcnt) + { + /* + * The tcp_keepidle parameter specifies the interval between the last data packet sent + * (simple ACKs are not considered data) and the first keepalive probe; after the + * connection is marked to need keepalive, this counter is not used any further. + * ~ >: cat /proc/sys/net/ipv4/tcp_keepalive_time + * 7200 + */ + opt = 3; /* 3 seconds */ + if (setsockopt (sockfd, SOL_TCP, TCP_KEEPIDLE, (char *) &opt, sizeof (opt))) + { + log_err("setsockopt() set TCP_KEEPIDLE to %d seconds failure: %s\n", opt, strerror(errno)); + return -3; + } + + if((opt=keepintvl) > 0) + { + /* + * The tcp_keepintvl parameter specifies the interval between subsequential keepalive + * probes, regardless of what the connection has exchanged in the meantime. + * ~ >: cat /proc/sys/net/ipv4/tcp_keepalive_intvl + * 75 + */ + if (setsockopt (sockfd, SOL_TCP, TCP_KEEPINTVL, (char *) &opt, sizeof (opt))) + { + log_err("setsockopt() set TCP_KEEPINTVL to %d failure: %s\n", opt, strerror(errno)); + return -4; + } + } + + if((opt=keepcnt) > 0) + { + /* + * The TCP_KEEPCNT option specifies the maximum number of unacknowledged probes to + * send before considering the connection dead and notifying the application layer + * probes to be sent. The value of TCP_KEEPCNT is an integer value between 1 and n, + * where n is the value of the systemwide tcp_keepcnt parameter. + * ~ >: cat /proc/sys/net/ipv4/tcp_keepalive_probes + * 9 + */ + if (setsockopt (sockfd, SOL_TCP, TCP_KEEPCNT, (char *) &opt, sizeof (opt))) + { + log_err("setsockopt() set TCP_KEEPCNT to %d failure: %s\n", opt, strerror(errno)); + return -5; + } + } + } + + log_dbg("Set socket[%d] KEEPINTVL:%d KEEPCNT:%d\n", sockfd, keepintvl, keepcnt); + return 0; +} + + diff --git a/program/cp_library/cp_sock.h b/program/cp_library/cp_sock.h new file mode 100644 index 0000000..3979d0a --- /dev/null +++ b/program/cp_library/cp_sock.h @@ -0,0 +1,184 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_sock.h + * Description: This head file + * + * Version: 1.0.0(10/26/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/26/2012 01:21:38 PM" + * + ********************************************************************************/ +#ifndef __CP_SOCK_H +#define __CP_SOCK_H + +#include <stdio.h> +#include <stdlib.h> +#include <netdb.h> +#include <fcntl.h> +#include <unistd.h> +#include <sys/un.h> +#include <poll.h> +#include <errno.h> + +#include <sys/types.h> +#include <sys/socket.h> +#include <linux/sockios.h> +#include <sys/ioctl.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netinet/tcp.h> +#include <arpa/inet.h> + +#include "cp_klist.h" +#include "cp_string.h" +#include "cp_fds.h" + + +#define CP_DEF_RCVBUF_SIZE 2048 +#define CP_DEF_SNDBUF_SIZE 2048 + +#define CP_SOCK_RCVBUF 2048 +#define CP_SOCK_SNDBUF 2048 + +#define CP_SOCK_DEF_IDLE_TIMEOUT 120*1000 /* 2 minutes */ +#define CP_SOCK_DEF_MSG_TIMEOUT 120*1000 /* 2 minutes */ + +#define CP_SOCK_KEEPINTVL 600 +#define CP_SOCK_KEEPCNT 3 + +#define CP_SOCK_MODE_NONE 0 +#define CP_SOCK_MODE_ACCEPT 1 +#define CP_SOCK_MODE_CONNECT 2 +#define CP_SOCK_MODE_LISTEN 3 + +enum +{ + CP_SOCK_EVENT_READ = EPOLLIN, /* compatilbe with EPOLLIN */ + CP_SOCK_EVENT_WRITE = EPOLLOUT, /* compatilbe with EPOLLOUT */ + CP_SOCK_EVENT_ERROR = EPOLLERR, /* compatilbe with EPOLLERR */ + CP_SOCK_EVENT_HUP = EPOLLHUP, /* compatilbe with EPOLLHUP */ + CP_SOCK_EVENT_IDLE_TIMEOUT = (1<<16), /* compatilbe with EPOLL reserved*/ + CP_SOCK_EVENT_MSG_TIMEOUT = (1<<17), /* compatible with EPOLL reserved*/ +}; + +struct _CP_SOCK; +struct _CP_FDS; + +typedef void (*PRIVT_FREE)(void); +typedef int (*CP_SOCK_EVENT_CALLBACK)(struct _CP_SOCK *sock); +typedef struct _CP_SOCK_CALLBACK +{ + CP_SOCK_EVENT_CALLBACK error; + CP_SOCK_EVENT_CALLBACK read; + CP_SOCK_EVENT_CALLBACK write; +} CP_SOCK_CALLBACK; + + +#define FLAG_SOCK_INIT (1<<0) +#define FLAG_SOCK_MALLOC (1<<1) +#define FLAG_SOCK_EPOLLED (1<<2) +#define FLAG_SOCK_REGISTRY (1<<3) +#define FLAG_SOCK_INQUEUE (1<<4) +#define FLAG_SOCK_TASKED (1<<5) + +#define SOCK_STAT_INIT 0 +#define SOCK_STAT_CONNECTING 1 +#define SOCK_STAT_CONNECTED 2 +#define SOCK_STAT_LISTENED 2 +#define SOCK_STAT_ACCEPTED 2 +#define SOCK_STAT_ALREADY 2 +#define SOCK_STAT_DISCONNECT 3 + +typedef struct _CP_SOCK +{ + int fd; /* the socket file description */ + int mode; /* socket work mode: listen, accept, connect */ + unsigned short flag; /* Refer to the follow definition */ + unsigned char status; /* current socket status */ + + unsigned long actv_time; /* The last time get event(send/recv) data in this socket */ + unsigned long msg_time; /* The last time get incoming data in this socket */ + unsigned long idle_timeout; /* this is set to the socket idle timeout value, when timeout will disconnect */ + unsigned long msg_timeout; /* this is set to the socket recv data timeout value, */ + + int keepintvl; /* heartbeat(keepalive) detect interval */ + int keepcnt; /* heartbeat(keepalive) count */ + int rsize; /* ioctl() set socket recv buffer size */ + int ssize; /* ioctl() set socket send buffer size */ + + struct epoll_event event; /* epoll_wait returned event */ + + cp_string *sbuf; /* send buffer */ + cp_string *rbuf; /* receive buffer */ + + struct sockaddr saddr; /* sockaddr for connect */ + char laddr[16]; /* local IP address*/ + int lport; /* local port */ + char raddr[16]; /* remote IP address */ + int rport; /* remote port */ + + struct _CP_FDS *fds; /* epoll fds contex */ + CP_SOCK_EVENT_CALLBACK cbfunc; /* event callback function */ + CP_SOCK_EVENT_CALLBACK client_func; /* client data callback function, only server socket use it */ + struct _CP_SOCK *serv_sock; /* Accept socket used to point to the server socket */ + + int max_client; /* max clients, only listen socket use it*/ + int accept_cnt; /* current clients number, only listen socket use it*/ + struct list_head accept_list; /* all the accept client list head, only listen socket use it */ + + void *privt; /* socket private data */ + PRIVT_FREE privt_free; /* private data free function if it's malloc */ + + int index; /* The index member position in the task array */ + struct list_head rlist; /* The list_head member position just for the registry list */ + + /* flag definitions + * 1 1 1 1 1 1 1 1 + * | | | | | | | |______ Initial flag - 0: no 1: yes + * | | | | | | |________ Malloc flag - 0: variable, 1: malloc + * | | | | | |__________ registry flag - 0: not in, 1: in the registry list + * | | | | |____________ epolled flag - 0: not in, 1: put in epoll + * | | | |______________ in queue flag - 0: not in, 1: put in queue + * | | |________________ task flag - 0: not in, 1: in the task list + * | |__________________ reserved + * |____________________ reserved + */ +} CP_SOCK; + + +static void inline cp_sock_set_idle_timeout(CP_SOCK *sock, unsigned long timeout) +{ + sock->idle_timeout = timeout; +} + +static void inline cp_sock_set_msg_timeout(CP_SOCK *sock, unsigned long timeout) +{ + sock->msg_timeout = timeout; +} + +static void inline cp_sock_set_private_data(CP_SOCK *sock, void *data, PRIVT_FREE free) +{ + sock->privt = data; + sock->privt_free = free; +} + +extern CP_SOCK *cp_sock_init(CP_SOCK *sock, unsigned int rsize, unsigned int ssize, int keepintvl, int keepcnt); +extern int cp_sock_close(CP_SOCK *sock); +extern void cp_sock_term(CP_SOCK *sock); +#define cp_sock_term_clear(sock) {cp_sock_term(sock); sock=NULL;} + +extern int cp_sock_listen(CP_SOCK *sock, char *laddr, int lport, int backlog); +extern int cp_sock_connect(CP_SOCK *sock, char *raddr, int rport, int lport); +extern int cp_sock_accept(CP_SOCK *serv_sock, CP_SOCK *new_sock); + +extern int cp_sock_recv(CP_SOCK *sock); +extern int cp_sock_send(CP_SOCK *sock); + +extern int cp_sock_set_reuseaddr(int sockfd); +extern int cp_sock_set_keepalive(int sockfd, int keepintvl, int keepcnt); +extern int cp_sock_set_nonblock(int sockfd); +extern int cp_sock_set_buffer(int sockfd, int rsize, int ssize); + +#endif /* __CP_SOCK_H */ diff --git a/program/cp_library/cp_string.c b/program/cp_library/cp_string.c new file mode 100644 index 0000000..c6f020f --- /dev/null +++ b/program/cp_library/cp_string.c @@ -0,0 +1,673 @@ + +/** + * @addtogroup cp_string + */ +/** @{ */ +/** + * @file + * cp_string - 'safe' string implementation + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <errno.h> + +#include "cp_string.h" +#include "cp_common.h" + +cp_string *cp_string_create(char *data, int len) +{ + cp_string *str; + +#ifdef DEBUG + if (len < 0) + { + return NULL; + } +#endif + + str = t_malloc(sizeof(cp_string)); + + if (str) + { + str->len = len; + str->size = str->len + 1; + str->data = t_malloc(str->size * sizeof(char)); + if (str->data) + memcpy(str->data, data, str->len); + else + { + t_free(str); + str = NULL; + } + } + + return str; +} + +cp_string *cp_string_create_empty(int initial_size) +{ + cp_string *str = t_malloc(sizeof(cp_string)); + + if (str) + { + str->len = 0; + str->size = initial_size; + str->data = (char *) t_malloc(str->size * sizeof(char)); + if (str->data == NULL) + { + t_free(str); + str = NULL; + } + } + + return str; +} + +void cp_string_destroy(cp_string *str) +{ + if (str) + { + if (str->data) + { + t_free(str->data); + } + + t_free(str); + } +} + + +void cp_string_clear_data(cp_string *str) +{ + if (str && str->data) + { + memset(str->data, 0, str->size); + str->len = 0; + } +} + +cp_string *cp_string_cstrcpy(cp_string *str, char *cstr) +{ + if (str) + { + str->len = strlen(cstr); + if (str->size < str->len + 1) + { + str->size = str->len + 1; + str->data = t_malloc(str->size * sizeof(char)); + } + if (str->data) + memcpy(str->data, cstr, str->size * sizeof(char)); + else + { + t_free(str); + str = NULL; + } + } + + return str; +} + +int cp_string_copy(cp_string *dst, cp_string *src) +{ + int left; + int size; + + if(!dst || !dst->data || !src || !src->data) + return 0; + + left=dst->size - dst->len; + size = left>src->len ? src->len : left; + + memcpy(&dst->data[dst->len], src->data, size); + dst->len += size; + + return size; +} + +int cp_string_cstrcopy(cp_string *dst, char *string, int len) +{ + int left; + int size; + + if(!dst || !dst->data || !string || len<=0) + return 0; + + left=dst->size - dst->len; + size = left>len ? len : left; + + memcpy(&dst->data[dst->len], string, size); + dst->len += size; + + return size; +} + + +int cp_string_move(cp_string *dst, cp_string *src) +{ + int left; + int size; + + if(!dst || !dst->data || !src || !src->data) + return 0; + + /* Check how many left size in $dst and set the size */ + left=dst->size - dst->len; + size = left>src->len ? src->len : left; + + /* copy the $src data to $dst */ + memcpy(&dst->data[dst->len], src->data, size); + dst->len += size; + + /* remove the $src copied data in it*/ + src->len -= size; + memmove (src->data, src->data+size, src->len); + + return size; +} + +cp_string *cp_string_dup(cp_string *src) +{ + cp_string *str = t_malloc(sizeof(cp_string)); + + if (str) + { + *str = *src; /* bitwise copy */ + str->data = t_malloc((str->len + 1) * sizeof(char)); + if (str->data) + memcpy(str->data, src->data, (str->len + 1) * sizeof(char)); + else + { + t_free(str); + str = NULL; + } + } + + return str; +} + +cp_string *cp_string_cstrdup(char *src) +{ + cp_string *str = t_malloc(sizeof(cp_string)); + + if (str) + { + str->len = strlen(src); + str->size = str->len + 1; + str->data = t_malloc(str->size * sizeof(char)); + if (str->data == NULL) + { + t_free(str); + return NULL; + } + memcpy(str->data, src, str->size); + } + + return str; +} + +cp_string *cp_string_cat(cp_string *str, cp_string *appendum) +{ + int len = str->len; + str->len += appendum->len; + if (str->len + 1 > str->size) + { + str->size = str->len + 1; + str->data = realloc(str->data, str->size * sizeof(char)); + } + if (str->data) + memcpy(str->data + len * sizeof(char), appendum->data, + appendum->len * sizeof(char)); + + return str; +} + +cp_string *cp_string_cstrcat(cp_string *str, char *cstr) +{ + int len = str->len; + int clen = strlen(cstr); + + str->len += clen * sizeof(char); + if (str->len + 1 > str->size) + { +// str->size = str->len + 0x400 - (str->len % 0x400); /* align to 1kb block */ + str->size = str->len + 1; + str->data = realloc(str->data, str->size * sizeof(char)); + } + if (str->data) + memcpy(str->data + len * sizeof(char), cstr, clen); + + return str; +} + +cp_string *cp_string_append_char(cp_string *str, char ch) +{ + if (str->len + 1 > str->size) + { + str->size = str->len + 0x100; + str->data = realloc(str->data, str->size * sizeof(char)); + if (str->data == NULL) return NULL; + } + str->data[str->len++] = ch; + + return str; +} + +cp_string *cp_string_cat_bin(cp_string *str, void *bin, int len) +{ + int olen = str->len; + str->len += len; + + if (str->len > str->size) + { + str->size = str->len + 0x400 - (str->len % 0x400); /* align to 1kb block */ + str->data = realloc(str->data, str->size * sizeof(char)); + } + memcpy(&str->data[olen], bin, len); + + return str; +} + +int cp_string_cmp(cp_string *s1, cp_string *s2) +{ + if (s1 == s2) return 0; //~~ implies cp_string_cmp(NULL, NULL) == 0 + + if (s1 == NULL) return -1; + if (s2 == NULL) return 1; + + if (s1->len == s2->len) + return memcmp(s1->data, s2->data, s1->len); + else + { + int p = (s1->len > s2->len) ? s2->len : s1->len; + int rc = memcmp(s1->data, s2->data, p); + if (rc == 0) + return s1->len - s2->len; + return rc; + } +} + +char *cp_string_tocstr(cp_string *str) +{ + char *cstr = NULL; + + if (str) + { + str->data[str->len * sizeof(char)] = '\0'; +// str->data[str->len * sizeof(char) + 1] = '\0'; + cstr = str->data; + } + + return cstr; +} + +int cp_string_len(cp_string *s) +{ + return s->len; +} + +char *cp_string_data(cp_string *s) +{ + return s->data; +} + +#define CHUNK 0x1000 +cp_string *cp_string_read(int fd, int len) +{ + char buf[CHUNK]; + int read_len; + cp_string *res = NULL; + + if (len == 0) + read_len = CHUNK; + else + read_len = len < CHUNK ? len : CHUNK; + + while (len == 0 || res == NULL || res->len < len) + { + int rc = + read(fd, buf, read_len); + if (rc <= 0) break; + if (res == NULL) + { + res = cp_string_create(buf, rc); + if (res == NULL) return NULL; + } + else + cp_string_cat_bin(res, buf, rc); + } + + return res; +} + +int cp_string_write(cp_string *str, int fd) +{ + int rc; + int total = 0; + + while (total < str->len) + { + rc = write(fd, &str->data[total], str->len - total); + + /* write sets EAGAIN when a socket is marked non-blocking and the + * write would block. trying to write again could result in spinning + * on the write call. + */ + if (rc == -1) + { + if (errno == EINTR /* || errno == EAGAIN */) /* try again */ + continue; + else + break; + } + total += rc; + } + + return total; +} + +cp_string *cp_string_read_file(char *filename) +{ + cp_string *res; + FILE *fp = fopen(filename, "rb"); + if (fp == NULL) return NULL; + + res = cp_string_read(fileno(fp), 0); + fclose(fp); + + return res; +} + +int cp_string_write_file(cp_string *str, char *filename) +{ + int rc; + FILE *fp = fopen(filename, "wb"); + if (fp == NULL) return 0; + + rc = cp_string_write(str, fileno(fp)); + fclose(fp); + + return rc; +} + +#define LINELEN 81 +#define CHARS_PER_LINE 16 + +static char *print_char = + " " + " " + " !\"#$%&'()*+,-./" + "0123456789:;<=>?" + "@ABCDEFGHIJKLMNO" + "PQRSTUVWXYZ[\\]^_" + "`abcdefghijklmno" + "pqrstuvwxyz{|}~ " + " " + " " + " ???????????????" + "????????????????" + "????????????????" + "????????????????" + "????????????????" + "????????????????"; + +void cp_cstring_dump(char *data, int len) +{ + int rc; + int idx; + char prn[LINELEN]; + char lit[CHARS_PER_LINE + 1]; + char hc[4]; + short line_done = 1; + + rc = len; + idx = 0; + lit[CHARS_PER_LINE] = '\0'; + while (rc > 0) + { + if (line_done) + snprintf(prn, LINELEN, "%08X: ", idx); + do + { + unsigned char c = data[idx]; + snprintf(hc, 4, "%02X ", c); + strncat(prn, hc, 4); + lit[idx % CHARS_PER_LINE] = print_char[c]; + ++idx; + } while (--rc > 0 && (idx % CHARS_PER_LINE != 0)); + line_done = (idx % CHARS_PER_LINE) == 0; + if (line_done) + printf("%s %s\n", prn, lit); + else if (rc == 0) + strncat(prn, " ", LINELEN); + } + if (!line_done) + { + lit[(idx % CHARS_PER_LINE)] = '\0'; + while ((++idx % CHARS_PER_LINE) != 0) + strncat(prn, " ", LINELEN); + + printf("%s %s\n", prn, lit); + + } +} + +const char *cp_hexdump_string(const void *data, size_t len) +{ + static char string[1024]; + unsigned char *d = (unsigned char *)data; + unsigned int i, left; + + string[0] = '\0'; + left = sizeof(string); + for (i = 0; len--; i += 3) { + if (i >= sizeof(string) - 4) + break; + snprintf(string + i, 4, " %02x", *d++); + } + + return string; +} + + +void cp_string_dump(cp_string *str) +{ + int rc; + int idx; + char prn[LINELEN]; + char lit[CHARS_PER_LINE + 1]; + char hc[4]; + short line_done = 1; + + rc = str->len; + idx = 0; + lit[CHARS_PER_LINE] = '\0'; + while (rc > 0) + { + if (line_done) + snprintf(prn, LINELEN, "%08X: ", idx); + do + { + unsigned char c = str->data[idx]; + snprintf(hc, 4, "%02X ", c); + strncat(prn, hc, 4); + lit[idx % CHARS_PER_LINE] = print_char[c]; + ++idx; + } while (--rc > 0 && (idx % CHARS_PER_LINE != 0)); + line_done = (idx % CHARS_PER_LINE) == 0; + if (line_done) + printf("%s %s\n", prn, lit); + else if (rc == 0) + strncat(prn, " ", LINELEN); + } + if (!line_done) + { + lit[(idx % CHARS_PER_LINE)] = '\0'; + while ((++idx % CHARS_PER_LINE) != 0) + strncat(prn, " ", LINELEN); + + printf("%s %s\n", prn, lit); + } +} + +/** flip the contents of a cp_string */ +void cp_string_flip(cp_string *str) +{ + if (str->len) + { + char *i, *f, ch; + f = &str->data[str->len - 1]; + i = str->data; + while (i < f) + { + ch = *i; + *i = *f; + *f = ch; + i++; + f--; + } + } +} + +/* remove all occurrences of letters from str */ +cp_string *cp_string_filter(cp_string *str, char *letters) +{ + char *i; + char *f; + + str->data[str->len] = '\0'; + i = str->data; + while ((f = strpbrk(i, letters))) + { + i = f; + while (*f && strchr(letters, *f)) f++; + if (*f) + { + memmove(i, f, str->len - (f - str->data)); + str->len -= f - i; + str->data[str->len] = '\0'; + } + else + { + *i = '\0'; + str->len -= str->len - (i - str->data); + break; + } + } + + return str; +} + +/** @} */ + + +char *del_char_from_string(char *str, char delchar) +{ + char *idx = str; + char *end = str; + while (*idx) + { + if (*idx == delchar) + { + ++idx; + } + else + { + *end = *idx; + ++end; + ++idx; + } + } + *end = '\0'; + return str; +} + +int split_string_to_value(char *str, char *fmt, ...) +{ + va_list ap; + + int *iPtr; + long *lPtr; + char *pcPtr; + + char delim[2]={*(fmt+2), '\0'}; + char *result; + + va_start(ap, fmt); + + result = strtok( str, delim ); + + while(*fmt) + { + switch (*fmt++) + { + case 's': /* string */ + pcPtr = va_arg(ap, char *); + if(NULL!= result) + { + if(NULL!=pcPtr) + { + strcpy(pcPtr, result); + } + result = strtok( NULL, delim ); + } + else + goto OUT; + + break; + + case 'd': /* int */ + iPtr = va_arg(ap, int *); + if(NULL!= result) + { + if(NULL!=iPtr) + { + *iPtr = atoi(result); + } + result = strtok( NULL, delim ); + } + else + goto OUT; + + break; + + case 'l': /* long */ + lPtr = va_arg(ap, long *); + if(NULL!= result) + { + if(NULL!=lPtr) + { + *lPtr = strtol(result, NULL, 10); + } + result = strtok( NULL, delim ); + } + else + goto OUT; + + break; + + case 'x': /* long hex*/ + lPtr = va_arg(ap, long *); + if(NULL!= result) + { + if(NULL!=lPtr) + { + *lPtr = strtol(result, NULL, 16); + } + result = strtok( NULL, delim ); + } + else + goto OUT; + + break; + } + } + +OUT: + va_end(ap); + return 0; +} + diff --git a/program/cp_library/cp_string.h b/program/cp_library/cp_string.h new file mode 100644 index 0000000..aeea28f --- /dev/null +++ b/program/cp_library/cp_string.h @@ -0,0 +1,86 @@ +#ifndef _CP_STRING_H +#define _CP_STRING_H + +/** @{ */ +/** + * @file + * cp_string - 'safe' string allowing binary content + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> +#include <stdarg.h> + +/** cp_string definition */ +typedef struct _cp_string +{ + int size; /**< size allocated */ + int len; /**< size used */ + char *data; /**< internal buffer */ +} cp_string; + +/** allocate a new cp_string */ +cp_string *cp_string_create(char *data, int len); +/** allocate an empty cp_string with a given buffer size */ +cp_string *cp_string_create_empty(int initial_size); +/** deallocate a cp_string */ +void cp_string_destroy(cp_string *str); +/** Sets string data to 0 */ +void cp_string_clear_data(cp_string *str); +/** copies the content of a null terminated c string */ +cp_string *cp_string_cstrcpy(cp_string *str, char *cstr); +/** copies the content of a cp_string */ +//cp_string *cp_string_cp(cp_string *dst, cp_string *src); +int cp_string_copy(cp_string *dst, cp_string *src); +int cp_string_move(cp_string *dst, cp_string *src); +/** copy the string into *dst */ +int cp_string_cstrcopy(cp_string *dst, char *string, int len); +/** creates a copy of src string. internal buffer is duplicated. */ +cp_string *cp_string_dup(cp_string *src); +/** creates a cp_string with src as its content */ +cp_string *cp_string_cstrdup(char *src); +/** concatenate cp_strings */ +cp_string *cp_string_cat(cp_string *str, cp_string *appendum); +/** append data from a buffer */ +cp_string *cp_string_cat_bin(cp_string *str, void *bin, int len); +/** append data from a null terminated c string */ +cp_string *cp_string_cstrcat(cp_string *str, char *cstr); +/** append a character to a string */ +cp_string *cp_string_append_char(cp_string *str, char ch); +/** compare cp_strings */ +int cp_string_cmp(cp_string *s1, cp_string *s2); +/** return a pointer to the internal buffer */ +char *cp_string_tocstr(cp_string *str); +/** return the length of the internal buffer */ +int cp_string_len(cp_string *s); +/** return the internal buffer */ +char *cp_string_data(cp_string *s); + +/** read len bytes from an open file descriptor (blocking) */ +cp_string *cp_string_read(int fd, int len); +/** write the content of a cp_string to a file descriptor (blocking) */ +int cp_string_write(cp_string *str, int fd); +/** read the contents of a file into a cp_string */ +cp_string *cp_string_read_file(char *filename); +/** write the contents of a cp_string to a file */ +int cp_string_write_file(cp_string *str, char *filename); + +/** flip the contents of a cp_string */ +void cp_string_flip(cp_string *str); +/** remove all occurrences of letters from str */ +cp_string *cp_string_filter(cp_string *str, char *letters); + +/** dump a cp_string to stdout */ +const char *cp_hexdump_string(const void *data, size_t len); +void cp_string_dump(cp_string *str); +void cp_cstring_dump(char *data, int len); + +char *del_char_from_string(char *str, char delchar); +int split_string_to_value(char *str, char *fmt, ...); + +/** @} */ + +#endif + diff --git a/program/cp_library/cp_time.h b/program/cp_library/cp_time.h new file mode 100644 index 0000000..3a35e1e --- /dev/null +++ b/program/cp_library/cp_time.h @@ -0,0 +1,123 @@ +/******************************************************************************** + * Copyright: (C) 2012 CoherentPlus Sdn. Bhd. + * All rights reserved. + * + * Filename: cp_time.h + * Description: This head file + * + * Version: 1.0.0(02/23/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "02/23/2012 07:46:37 AM" + * + ********************************************************************************/ +#ifndef __CP_TIME_H +#define __CP_TIME_H + +#include <unistd.h> +#include <string.h> +#include <fcntl.h> +#include <time.h> + +#include <linux/rtc.h> +#include <sys/ioctl.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/time.h> + +typedef struct __DATE_TIME +{ + int iYear; + int iMonth; + int iDay; + int iHour; + int iMinute; + int iSecond; + int iDayOfWeek; +} DATE_TIME; + +static inline void micro_second_sleep(unsigned long ms) +{ + struct timespec cSleep; + unsigned long ulTmp; + cSleep.tv_sec = ms / 1000; + if (cSleep.tv_sec == 0) + { + ulTmp = ms * 10000; + cSleep.tv_nsec = ulTmp * 100; + } + else + { + cSleep.tv_nsec = 0; + } + + nanosleep(&cSleep, 0); +} + +/*UNIT: micro second*/ +static inline unsigned long time_now() +{ + struct timeval now; + gettimeofday(&now, 0); + return (now.tv_sec * 1000) + (now.tv_usec / 1000); +} + +/*UNIT: micro second*/ +static inline unsigned long time_elapsed(unsigned long start) +{ + unsigned long current = time_now(); + + if (current < start) + { + return (0xFFFFFFFF - start) + current; + } + + //printf("time_elapsed: %ld\n", current-start); + return current - start; +} + +static inline void get_current_time(DATE_TIME * date) +{ + time_t now = time(NULL); + struct tm *tnow = localtime(&now); + + memset(date, 0, sizeof(DATE_TIME)); + date->iYear = 1900 + tnow->tm_year; + date->iMonth = 1 + tnow->tm_mon; + date->iDay = tnow->tm_mday; + + date->iHour = tnow->tm_hour; + date->iMinute = tnow->tm_min; + date->iSecond = tnow->tm_sec; + date->iDayOfWeek = tnow->tm_wday; + return; +} +#define get_sys_time(date) get_current_time(date) + +static inline int get_rtc_time(DATE_TIME *date) +{ + int rv, fd = -1; + struct rtc_time rtc_tm; + + memset(date, 0, sizeof(DATE_TIME)); + + if ((fd=open("/dev/rtc0", O_RDONLY)) < 0) + return -1; + + if((rv=ioctl(fd, RTC_RD_TIME, &rtc_tm)) < 0) + return -2; + + date->iYear = 1900 + rtc_tm.tm_year; + date->iMonth = 1 + rtc_tm.tm_mon; + date->iDay = rtc_tm.tm_mday; + + date->iHour = rtc_tm.tm_hour; + date->iMinute = rtc_tm.tm_min; + date->iSecond = rtc_tm.tm_sec; + date->iDayOfWeek = rtc_tm.tm_wday; + + close(fd); + + return 0; +} + +#endif diff --git a/program/cp_library/cp_vector.c b/program/cp_library/cp_vector.c new file mode 100644 index 0000000..525ea0a --- /dev/null +++ b/program/cp_library/cp_vector.c @@ -0,0 +1,96 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_vector.c + * Description: This file is for a dynamic array + * + * Version: 1.0.0(11/12/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/12/2012 11:20:30 AM" + * + ********************************************************************************/ + +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +#include "cp_vector.h" +#include "cp_common.h" + +CP_VECTOR *cp_vector_init(int size) +{ + CP_VECTOR *vector = NULL; + if(size < 0) + return NULL; + + vector = (CP_VECTOR *)t_malloc(sizeof(CP_VECTOR)); + if(!vector) + { + return NULL; + } + + vector->mem = t_malloc(size*sizeof(void *)); + if(!vector->mem) + { + t_free(vector); + return NULL; + } + + memset(vector->mem, 0, size); + vector->size = size; + vector->used = 0; + + return vector; +} + +void *cp_vector_add(CP_VECTOR *vector, int index, void *item) +{ + if(index<0 || index>vector->size) + return NULL; + + vector->mem[index]=item; + vector->used++; + + return item; +} + +void *cp_vector_del(CP_VECTOR *vector, int index) +{ + void *save; + + if(index<0 ||index>vector->size) + return NULL; + + save = vector->mem[index]; + + vector->mem[index]=NULL; + vector->used--; + + return save; +} + +void *cp_vector_get(CP_VECTOR *vector, int index) +{ + if(index<0 ||index>vector->size) + return NULL; + + return vector->mem[index]; +} + +void cp_vector_destroy(CP_VECTOR *vector) +{ + if(!vector) + return; + + if(vector->mem) + { + t_free(vector->mem); + } + + t_free(vector); +} + + + diff --git a/program/cp_library/cp_vector.h b/program/cp_library/cp_vector.h new file mode 100644 index 0000000..ffba647 --- /dev/null +++ b/program/cp_library/cp_vector.h @@ -0,0 +1,40 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_vector.h + * Description: This head file is for dynamic array + * + * Version: 1.0.0(11/12/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/12/2012 11:20:53 AM" + * + ********************************************************************************/ + +#ifndef __CP_VECTOR +#define __CP_VECTOR + +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +typedef struct _CP_VECTOR +{ + int size; + int used; + void **mem; +} CP_VECTOR; + +#define cp_vector_count(v) ((v) ? (v)->used : 0) +#define cp_vector_size(v) ((v) ? (v)->size : 0) + +CP_VECTOR *cp_vector_init(int size); +void *cp_vector_add(CP_VECTOR *vector, int index, void *item); +void *cp_vector_del(CP_VECTOR *vector, int index); +void *cp_vector_get(CP_VECTOR *vector, int index); +void cp_vector_destroy(CP_VECTOR *vector); + +#endif + + diff --git a/program/cp_library/cscope.in.out b/program/cp_library/cscope.in.out new file mode 100644 index 0000000..12ecb10 --- /dev/null +++ b/program/cp_library/cscope.in.out Binary files differ diff --git a/program/cp_library/cscope.out b/program/cp_library/cscope.out new file mode 100644 index 0000000..43e51a0 --- /dev/null +++ b/program/cp_library/cscope.out @@ -0,0 +1,132502 @@ +cscope 15 $HOME/.project/aliyun/fl2440/program/cp_library -q 0000007577 0000736519 + @at91_ioctl.h + +14 #i�de� +__AT91_IOCTL_H + + +15 + #__AT91_IOCTL_H + + + ) + +17 + ~<asm/io�l.h +> + +18 #i�de� +__KERNEL__ + + +19 + ~<sys/io�l.h +> + +26 + #PLATDRV_MAGIC + 0x60 + + ) + +33 + #SET_DRV_DEBUG + + `_IO + ( +PLATDRV_MAGIC +, 0x01) + + ) + +34 + #GET_DRV_VER + + `_IO + ( +PLATDRV_MAGIC +, 0x02) + + ) + +41 + #GET_BATTERY_STAT + + `_IO + ( +PLATDRV_MAGIC +, 0x06) + + ) + +42 + #GET_GMTUBE_VHIGH + + `_IO + ( +PLATDRV_MAGIC +, 0x08) + + ) + +43 + #GET_GPRS_VBAT + + `_IO + ( +PLATDRV_MAGIC +, 0x09) + + ) + +44 + #GET_ADC_DATA + + `_IO + ( +PLATDRV_MAGIC +, 0x10) + + ) + +45 + #SET_ADC_INTERVEL + + `_IO + ( +PLATDRV_MAGIC +, 0x11) + + ) + +49 + #BUZZER_ON + + `_IO + ( +PLATDRV_MAGIC +, 0x12) + + ) + +50 + #BUZZER_BEEP + + `_IO + ( +PLATDRV_MAGIC +, 0x13) + + ) + +51 + #BUZZER_OFF + + `_IO + ( +PLATDRV_MAGIC +, 0x14) + + ) + +52 + #BUZZER_FREQ + + `_IO + ( +PLATDRV_MAGIC +, 0x15) + + ) + +55 + #GET_BUTTON_STATUS + + `_IO + ( +PLATDRV_MAGIC +, 0x17) + + ) + +58 + #LED_OFF + + `_IO + ( +PLATDRV_MAGIC +, 0x18) + + ) + +59 + #LED_ON + + `_IO + ( +PLATDRV_MAGIC +, 0x19) + + ) + +60 + #LED_BLINK + + `_IO + ( +PLATDRV_MAGIC +, 0x1A) + + ) + +61 + #TURN_ALL_LED + + `_IO + ( +PLATDRV_MAGIC +, 0x1B) + + ) + +64 + #ZIGBEE_RESET + + `_IO + ( +PLATDRV_MAGIC +, 0x1E) + + ) + +65 + #ZIGBEE_STATUS + + `_IO + ( +PLATDRV_MAGIC +, 0x1F) + + ) + +70 + #GSM_SET_POWER + + `_IO + ( +PLATDRV_MAGIC +, 0x30� + + ) + +71 + #GSM_GET_POWER + + `_IO + ( +PLATDRV_MAGIC +, 0x31� + + ) + +72 + #GSM_GET_ADC + + `_IO + ( +PLATDRV_MAGIC +, 0x32� + + ) + +74 + #GPS_SET_POWER + + `_IO + ( +PLATDRV_MAGIC +, 0x3A� + + ) + +75 + #GPS_GET_POWER + + `_IO + ( +PLATDRV_MAGIC +, 0x3B� + + ) + +80 + #GM_SET_MEASURE_RADI + + `_IO + ( +PLATDRV_MAGIC +, 0x40� + + ) + +81 + #GM_GET_MEASURE_DOSE + + `_IO + ( +PLATDRV_MAGIC +, 0x41� + + ) + +82 + #GM_SET_DUTY + + `_IO + ( +PLATDRV_MAGIC +, 0x42� + + ) + +83 + #GM_SET_INTERVAL + + `_IO + ( +PLATDRV_MAGIC +, 0x43� + + ) + +84 + #GM_GET_VOLTAGE + + `_IO + ( +PLATDRV_MAGIC +, 0x44� + + ) + +86 + #GM_SET_POWER + + `_IO + ( +PLATDRV_MAGIC +, 0x45� + + ) + +87 + #GM_SET_PWM_TC + + `_IO + ( +PLATDRV_MAGIC +, 0x46� + + ) + +88 + #GM_SET_MEASURE_TC + + `_IO + ( +PLATDRV_MAGIC +, 0x47� + + ) + +89 + #GM_SET_TIMER_TC + + `_IO + ( +PLATDRV_MAGIC +, 0x48� + + ) + + @cp_array.c + +14 + ~<�dlib.h +> + +15 + ~"�_��y.h +" + +16 + ~"�_comm�.h +" + +17 + ~"�_logg�.h +" + +19 +CP_ARRAY + * + $�_��y_�� +( +CP_ARRAY + * +��y +, +size +) + +21 +i +; + +23 if�! +��y + ) + +25 if�!( +��y += + `t_m�loc +((*array))) ) + +27 +NULL +; + +31 + `mem�t +( +��y +, 0, (*array)); + +32 +��y +-> +�ag + |� +CP_ARRAY_FLAG_MALLOC +; + +38 + `mem�t +( +��y +, 0, (*array)); + +41 +��y +-> +size + = size; + +42 if�! +��y +-> +d�a + && !ay->d�a=(**) + `m�loc +ay-> +size +*(*))) ) + +44 + `�_��y_�rm +( +��y +); + +45 +NULL +; + +48 +i +=0; i< +��y +-> +size +; i++) + +50 +��y +-> +d�a +[ +i +] = +NULL +; + +53 +��y +; + +54 + } +} + +56 + $�_��y_�rm +( +CP_ARRAY + * +��y +) + +58 if(! +��y +) + +61 if( +��y +-> +d�a +) + +62 + `t_� +( +��y +-> +d�a +); + +64 if( +��y +-> +�ag +& +CP_ARRAY_FLAG_MALLOC +) + +66 + `t_� +( +��y +); + +70 + } +} + +73 + $�_��y_add +( +CP_ARRAY + * +��y +, * +d�a +) + +75 +i +; + +76 * +��y +; + +78 if(! +��y + || ! +d�a +) + +80 + `log_�r +("Invalude input�rguments\n"); + +85 if( +��y +-> +�ems + >�y-> +size +) + +87 + `log_�r +("��y i�fu�,��nهdd d��[%p]\n", +d�a +); + +92 + `�_li�_��y_f�_�ch +( +��y +, +i +, +��y +) + +94 if�! +��y + ) + +96 + `log_dbg +("A�ay[%d]�dd d�a[%p] ok\n", +i +, +d�a +); + +97 +��y +-> +d�a +[ +i +] = data; + +98 +��y +-> +�ems + ++; + +103 +i +; + +104 + } +} + +106 + $�_��y_rm_by�dex +( +CP_ARRAY + * +��y +, +�dex +) + +109 if(! +��y + || +�dex +<0) + +111 + `log_�r +("Invalude input�rguments\n"); + +115 if( +��y +-> +d�a +[ +�dex +]) + +117 +��y +-> +�ems + --; + +118 +��y +-> +d�a +[ +�dex +] = +NULL +; + +120 + } +} + +122 + $�_��y_rm_byd�a +( +CP_ARRAY + * +��y +, * +d�a +) + +124 +i +, +rv + = -3; + +125 * +��y +; + +127 if(! +��y + || ! +d�a +) + +129 + `log_�r +("Invalude input�rguments\n"); + +133 if( +��y +-> +�ems + <= 0) + +135 + `log_�r +("��y i�em�y,��nلemov�d��[%p]\n", +d�a +); + +140 + `�_li�_��y_f�_�ch +( +��y +, +i +, +��y +) + +142 if� +��y + =� +d�a + ) + +144 +��y +-> +�ems + --; + +145 +��y +-> +d�a +[ +i +] = +NULL +; + +146 +rv + = 0; + +151 +rv +; + +152 + } +} + +154 + $�_��y_�av� +( +CP_ARRAY + * +��y +) + +156 +i +; + +157 * +d�a +; + +160 + `�_li�_��y_f�_�ch +( +��y +, +i +, +d�a +) + +162 + `log_dbg +("��y d�a[%d] sav�d��[%p]\n", +i +, +d�a +); + +166 + } +} + + @cp_array.h + +14 #i�de� +__CP_ARRAY_H + + +15 + #__CP_ARRAY_H + + + ) + +17 + #CP_ARRAY_FLAG_MALLOC + (1<<0) + + ) + +18 + s_CP_ARRAY + + +20 + m�ag +; + +21 + msize +; + +22 + m�ems +; + +23 ** + md�a +; + +24 } + tCP_ARRAY +; + +26 + #�_��y_is_fu� +( +�r +��)-> +size +-1==)-> +�ems + ? 1 :0 ) + + ) + +27 + #�_��y_is_em�y +( +�r +��0==)-> +�ems + ? 1 : 0) + + ) + +28 + #�_��y_cou� +( +�r +��)-> +�ems + ) + + ) + +29 + #�_��y_size +( +�r +��)-> +size +-1 ) + + ) + +31 + #�_li�_��y_f�_�ch +( +�r +, +i +, +��y +�i=0,��y��-> +d�a +[i]; i<�r-> +size +; ++i,��y=i<�r->size?�r->d�a[i]: +NULL +) + + ) + +34 +CP_ARRAY + * +�_��y_�� +(CP_ARRAY * +��y +, +size +); + +35 +�_��y_�rm +( +CP_ARRAY + * +��y +); + +36 +�_��y_add +( +CP_ARRAY + * +��y +, * +d�a +); + +37 +�_��y_rm_by�dex +( +CP_ARRAY + * +��y +, +�dex +); + +38 +�_��y_rm_byd�a +( +CP_ARRAY + * +��y +, * +d�a +); + +39 +�_��y_�av� +( +CP_ARRAY + * +��y +); + + @cp_atcmd.c + +14 + ~"�_�cmd.h +" + +15 + ~"�_�r�g.h +" + +16 + ~"�_logg�.h +" + +17 + ~"�_time.h +" + +19 #i�de� +ATCMD_REPLY_LEN + + +20 + #ATCMD_REPLY_LEN + 512 + + ) + +29 + $�nd_�cmd_check_ok +( +COM_PORT + * +comp�t +, * +�cmd +, +timeout +) + +31 +�tv� +; + +32 +�tv� + = + `�nd_�cmd +( +comp�t +, +�cmd +, "OK\r\n", "ERROR\r\n", +timeout +, +NULL +, 0); + +34 0== +�tv� + ? 0 : -2; + +35 + } +} + +45 + $�nd_�cmd_check_v�ue +( +COM_PORT + * +comp�t +, * +�cmd +, +timeout +, * +buf +, +buf_�n +) + +47 +i + = 0; + +48 +�tv� +=0; + +49 +tmp +[ +ATCMD_REPLY_LEN +]; + +50 * +��t +; + +52 if( +NULL +== +buf +) + +54 + `log_�r +("Function call�rguments�rror!\n"); + +58 + `mem�t +( +tmp +, 0, (tmp)); + +59 +�tv� + = + `�nd_�cmd +( +comp�t +, +�cmd +, "OK\r\n", "ERROR\r\n", +timeout +, +tmp +, (tmp)); + +60 if�0 !� +�tv� +) + +66 if( +NULL + !�( +��t += + `�rchr +( +tmp +, '\n')) ) + +68 +��t + ++; + +69 * +��t +!='\r' && +i +< +buf_�n +-1) + +71 +buf +[ +i +++] = * +��t +; + +72 +��t + ++; + +75 +buf +[ +i +] = '\0'; + +77 ('\0'== +buf +[0] ? -3 : 0); + +78 + } +} + +88 + $�nd_�cmd_check_�que� +( +COM_PORT + * +comp�t +, * +�cmd +, +timeout +, * +buf +, +buf_�n +) + +90 +�tv� +; + +91 +i + = 0; + +92 +tmp +[ +ATCMD_REPLY_LEN +]; + +93 * +�r + = +NULL +; + +95 if( +NULL +== +buf +) + +97 + `log_�r +("%s(��·rgum�t��r�!\n", +__FUNCTION__ +); + +101 + `mem�t +( +tmp +, 0, (tmp)); + +102 +�tv� + = + `�nd_�cmd +( +comp�t +, +�cmd +, "OK\r\n", "ERROR\r\n", +timeout +, +tmp +, (tmp)); + +103 if�0 !� +�tv� +) + +109 if( +NULL + !�( +�r += + `�rchr + ( +tmp +, ':')) ) + +111 +�r + += 2; + +112 * +�r +!='\r' && +i +< +buf_�n +-1) + +114 +buf +[ +i +++] = * +�r +; + +115 +�r + ++; + +118 +buf +[ +i +] = '\0'; + +120 ('\0'== +buf +[0] ? -3 : 0); + +121 + } +} + +128 + $�cmd_check_�_�ady +( +COM_PORT + * +comp�t +) + +130 +�tv� +; + +131 +�tv� += + `�nd_�cmd_check_ok +( +comp�t +, "ATE0\r", 500); + +132 if( +�tv� +) + +134 + `log_�r +("ATE0 check AT command�eady [FAILED]\n"); + +137 + `log_�ml +("ATE0 check AT command�eady [OK]\n"); + +139 +�tv� +; + +140 + } +} + +146 + $�cmd_check_sim_v�id +( +COM_PORT + * +comp�t +) + +148 +�tv� + = 0; + +149 +�cv_buf +[ +ATCMD_REPLY_LEN +]; + +151 +�tv� + = + `�nd_�cmd_check_�que� +( +comp�t +, "AT+CPIN?\r", 800, +�cv_buf +, (recv_buf)); + +152 if(0x00 !� +�tv� +) + +154 +�tv� + = 1; + +155 + `log_w�n +("AT+CPIN? Check SIM Validation: [FAILED]\n"); + +156 +�tv� +; + +159 if( + `�r�r +( +�cv_buf +, "READY")) + +161 + `log_�ml +("AT+CPIN? Check SIM Validataion: [OK]\n"); + +166 + } +} + +169 + $�cmd_check_g�s_sig�l +( +COM_PORT + * +comp�t +) + +171 +�cv_buf +[ +ATCMD_REPLY_LEN +]; + +172 +�tv� +; + +173 +sig�l + = -1; + +175 + `mem�t +( +�cv_buf +, 0, (recv_buf)); + +176 +�tv� + = + `�nd_�cmd_check_�que� +( +comp�t +, "AT+CSQ\r", 3000, +�cv_buf +, (recv_buf)); + +177 if�0 !� +�tv� +) + +179 + `log_�r +("AT+CSQ Check Signal Strength: [FAILED]\n"); + +180 +�tv� +; + +183 + `�l�_�r�g_to_v�ue +( +�cv_buf +, "%d,%d", & +sig�l +, +NULL +); + +185 + `log_�ml +("AT+CSQ Check Sig��S��gth: [%d]\n", +sig�l +); + +187 +sig�l +; + +188 + } +} + +191 + $�cmd_check_g�s_�gi�� +( +COM_PORT + * +comp�t +) + +193 +�tv� +, +�� + = -1; + +194 +�cv_buf +[ +ATCMD_REPLY_LEN +]; + +196 + `mem�t +( +�cv_buf +, 0, (recv_buf)); + +197 +�tv� + = + `�nd_�cmd_check_�que� +( +comp�t +, "AT+CREG?\r", 3000, +�cv_buf +, (recv_buf)); + +198 if�0 !� +�tv� +) + +200 + `log_�r +("AT+CREG? Check SIM card Register: [FAILED]\n"); + +201 +�� +; + +204 + `�l�_�r�g_to_v�ue +( +�cv_buf +, "%d,%d", +NULL +, & +�� +); + +205 + `log_�ml +("AT+CREG? Check SIM C�d Regi��: [%d]\n", +�� +); + +207 +�� +; + +208 + } +} + +211 + $�cmd_check_g�s_���r +( +COM_PORT + * +comp�t +, * +���r +) + +213 +�tv� +; + +214 +�cv_buf +[ +ATCMD_REPLY_LEN +]; + +216 if( +���r + =� +NULL +) + +221 +�tv� + = + `�nd_�cmd_check_�que� +( +comp�t +, "AT+COPS?\r", 5000, +�cv_buf +, (recv_buf)); + +222 if( +�tv� +) + +224 + `log_w�n +("AT+COPS? Check SIM Card Carrier: [FAILED]\n"); + +225 +�tv� +; + +228 + `�l�_�r�g_to_v�ue +( +�cv_buf +, "%d,%d,%s,%d", +NULL +, NULL, +���r +, NULL); + +229 + `d�_ch�_�om_�r�g +( +���r +, '\"'); + +231 + `log_�ml +("AT+COPS? Check SIM C�d C�r�r: [%s]\n", +���r +); + +234 + } +} + +236 + $�cmd_check_g�s_mcc_mnc +( +COM_PORT + * +comp�t +, * +mcc_mnc +) + +238 +�tv� +; + +239 +�cv_buf +[ +ATCMD_REPLY_LEN +]; + +240 +��us +; + +241 +mcc +[5]; + +242 +mnc +[5]; + +243 * +�r + = +NULL +; + +245 +�tv� += + `�nd_�cmd_check_ok +( +comp�t +, "AT+QENG=1\r", 1000); + +246 if( +�tv� +) + +248 + `log_�r +("Send AT command AT+QENG=1 failure\n"); + +249 +�tv� +; + +252 +�tv� + = + `�nd_�cmd +( +comp�t +, "AT+QENG?\r", "OK\r\n", "ERROR\r\n", 5000, +�cv_buf +, (recv_buf)); + +253 if( +�tv� +) + +255 + `log_�r +("AT+QENG? Check GPRS MCC�nd MNC failure\n"); + +256 +�tv� +; + +263 if( +NULL + !�( +�r += + `��chr + ( +�cv_buf +, ':')) ) + +265 + `�l�_�r�g_to_v�ue +( +�r +, "%d,%s,%s,%s", & +��us +, +mcc +, +mnc +, +NULL +); + +266 if(! +��us +) + +268 + `�r�tf +( +mcc_mnc +, "%s-%s", +mcc +, +mnc +); + +269 + `log_�ml +("AT+QGSMLOC=1 Check GPRS Lo�ti� MCC-MNC: %s\n", +mcc_mnc +); + +274 + `��tf +("�r: %s\n", +�r +); + +277 + } +} + +280 + $�cmd_check_g�s_lo�ti� +( +COM_PORT + * +comp�t +, +GPRS_LOCATION + * +loc +) + +282 +�tv� +; + +283 +�cv_buf +[ +ATCMD_REPLY_LEN +]; + +284 +��us +; + +286 +�tv� += + `�nd_�cmd_check_ok +( +comp�t +, "AT+QIFGCNT=0\r", 1000); + +287 if( +�tv� +) + +289 + `log_w�n +("Send AT command AT+QIFGCNT=0 failure\n"); + +290 +�tv� +; + +293 +�tv� + = + `�nd_�cmd_check_�que� +( +comp�t +, "AT+QGSMLOC=1\r", 10000, +�cv_buf +, (recv_buf)); + +294 if( +�tv� +) + +296 + `log_w�n +("AT+QGSMLOC=1 Check GPRS Location: [FAILED]\n"); + +297 +�tv� +; + +301 + `�l�_�r�g_to_v�ue +( +�cv_buf +, "%d,%s,%s,%s,%s", & +��us +, +loc +-> +l�g�ude +,�oc-> +�t�ude +,�oc-> +d�e +,�oc-> +time +); + +303 if( +��us +) + +305 + `mem�t +( +loc +-> +l�g�ude +, 0, (loc->longitude)); + +306 + `mem�t +( +loc +-> +�t�ude +, 0, (loc->latitude)); + +307 + `mem�t +( +loc +-> +d�e +, 0, (loc->date)); + +308 + `mem�t +( +loc +-> +time +, 0, (loc->time)); + +309 + `log_w�n +("AT+QGSMLOC=1 Check GPRS Lo�ti� fa�u�: %s\n", +�cv_buf +); + +313 + `log_�ml +("GPRS�o�tiڄesu�=%d���ude,l�g�ude: [%s,%s]\n", +��us +, +loc +-> +�t�ude +,�oc-> +l�g�ude +); + +314 + `log_�ml +("GPRS D���d�ime: %s,%s\n", +loc +-> +d�e +,�oc-> +time +); + +316 +�tv� +; + +317 + } +} + +320 + $�cmd_�t_�tw�k_mode +( +COM_PORT + * +comp�t +, +mode +) + +322 +�tv� +; + +323 +�cmd +[64]={0}; + +325 + `�r�tf + ( +�cmd +, "AT+CNMP=%d\r", +mode +); + +326 if(0 !�( +�tv� += + `�nd_�cmd_check_ok +( +comp�t +, +�cmd +, 3000)) ) + +328 + `log_w�n +("AT+CNMP S� N�w�k Mod�a�%d: [FAILED]\n", +mode +); + +329 +�tv� +; + +331 + `log_�ml +("AT+CNMP=%d S� N�w�k Mode: [OK]\n", +mode +); + +334 + `���y + ( +�cmd +, "AT+CNAOP=2\r", (atcmd)); + +335 if(0 !�( +�tv� += + `�nd_�cmd_check_ok +( +comp�t +, +�cmd +, 3000)) ) + +337 + `log_w�n +("AT+CNAOP=2 Set Acquisitions order�reference�o WCDMA,GSM [FAILED]\n"); + +338 +�tv� +; + +340 + `log_�ml +("AT+CNAOP=2 Set Network Preference [OK]\n"); + +343 + } +} + +345 + $�cmd_check_g�s_�me +( +COM_PORT + * +comp�t +, * +�me +) + +347 +�tv� +; + +348 +�cv_buf +[ +ATCMD_REPLY_LEN +]; + +350 if( +�me + =� +NULL +) + +355 +�tv� + = + `�nd_�cmd_check_v�ue +( +comp�t +, "AT+CGMM\r", 5000, +�cv_buf +, (recv_buf)); + +356 if( +�tv� +) + +358 + `log_w�n +("AT+CGMM Check GPRS Module Name: [FAILED]\n"); + +359 +�tv� +; + +362 + `�r�y +( +�me +, +�cv_buf +); + +364 + `log_�ml +("AT+CGMM Check GPRS Modu� Name: [%s]\n", +�me +); + +367 + } +} + +370 + $�cmd_check_g�s_v�si� +( +COM_PORT + * +comp�t +, * +v�si� +) + +372 +�tv� +; + +373 +�cv_buf +[ +ATCMD_REPLY_LEN +]; + +375 if( +v�si� + =� +NULL +) + +380 +�tv� + = + `�nd_�cmd_check_�que� +( +comp�t +, "AT+CGMR\r", 5000, +�cv_buf +, (recv_buf)); + +381 if( +�tv� +) + +383 + `log_w�n +("AT+CGMR Check GPRS Module Version: [FAILED]\n"); + +384 +�tv� +; + +387 + `�r�y +( +v�si� +, +�cv_buf +); + +388 + `log_�ml +("AT+CGMR Check GPRS Modu� V�si�: [%s]\n", +v�si� +); + +391 + } +} + +393 + $�cmd_check_g�s_�mi +( +COM_PORT + * +comp�t +, * +�mi +) + +395 +�tv� +; + +396 +�cv_buf +[ +ATCMD_REPLY_LEN +]; + +398 if( +�mi + =� +NULL +) + +403 +�tv� + = + `�nd_�cmd_check_v�ue +( +comp�t +, "AT+CGSN\r", 5000, +�cv_buf +, (recv_buf)); + +404 if( +�tv� +) + +406 + `log_w�n +("AT+CGSN Check GPRS Module IEMI: [FAILED]\n"); + +407 +�tv� +; + +410 + `�r�y +( +�mi +, +�cv_buf +); + +411 + `log_�ml +("AT+CGSN Check GPRS Modu� IEMI: [%s]\n", +�mi +); + +414 + } +} + +417 + $�cmd_check_g�s_�tw�k +( +COM_PORT + * +comp�t +, * +�tw�k +) + +419 +�tv� +; + +420 +�cv_buf +[ +ATCMD_REPLY_LEN +]; + +422 if( +�tw�k + =� +NULL +) + +427 +�tv� + = + `�nd_�cmd_check_�que� +( +comp�t +, "AT+CNSMOD?\r", 5000, +�cv_buf +, (recv_buf)); + +428 if( +�tv� +) + +430 + `log_w�n +("AT+CNSMOD Check Network Mode: [FAILED]\n"); + +431 +�tv� +; + +434 + `�l�_�r�g_to_v�ue +( +�cv_buf +, "%d,%d", +NULL +, +�tw�k +); + +436 + `log_�ml +("AT+CNSMOD? Check N�w�k Mode: [%d]\n", * +�tw�k +); + +438 + } +} + +441 + $�cmd_�t_�n +( +COM_PORT + * +comp�t +, * +�n +) + +443 +�cmd +[64]={0}; + +444 +�tv� +; + +446 + `�r�tf + ( +�cmd +, "AT+CGDCONT=1,\"IP\",\"%s\"\r", +�n +); + +447 if(0 !�( +�tv� += + `�nd_�cmd_check_ok +( +comp�t +, +�cmd +, 2000)) ) + +449 + `log_�r +("AT+CGDCONT S� APN��\"%s\" [FAILED]\n", +�n +); + +450 +�tv� +; + +453 + `log_�ml +("AT+CGDCONT Set APN�s \"%s\" [OK]\n"); + +454 +�tv� +; + +455 + } +} + +458 + $�_m�ch + (* +p_pcS� +, * +p_pcM�ch +) + +460 +acBuf + [256], + +461 * +pcS�� + = +NULL +, + +462 * +pcTab + = +NULL +; + +464 +pcS�� + = +p_pcM�ch +; + +466 0 !� +pcS�� +) + +468 + `mem�t + ( +acBuf +, 0x00, (acBuf)); + +470 +pcTab + = + `�rchr + ( +pcS�� +, 9); + +471 i�(0 !� +pcTab +) + +473 i�( +pcTab + !� +pcS�� +) + +475 + `���y + ( +acBuf +, +pcS�� +, +pcTab + -�cStart); + +477 +pcS�� + = (0 !�*(++ +pcTab +)) ?�cTab : 0; + +481 + `�r�y + ( +acBuf +, +pcS�� +); + +482 +pcS�� + = +NULL +; + +484 i�(0 !� +acBuf + [0] && 0 !� + `�r�r + ( +p_pcS� +,�cBuf)) + +490 + } +} + +509 + $�nd_�cmd +( +COM_PORT + * +comp�t +, * +�Cmd +, * +ex�� +, * +�r� +, + +510 +timeout +, * +��y +, +��y_�n +) + +512 +�tv� + = -1; + +513 +d�ay + = 200; + +514 +g� + = 300; + +515 +ulS��Time +; + +517 +iCmdL� + = 0, + +518 +iRecvL� + = 0, + +519 +iRecvSize + = 0, + +520 +iSize + = 0; + +523 +acRecv +[1024]; + +524 * +pcRecvP� + = +NULL +; + +526 if( +comp�t +-> +is_c��ed + != 0x01) + +528 + `log_dbg +("Comport�ot opened.\n"); + +536 if(0 !� +d�ay +) + +538 +ulS��Time + = + `time_now +(); + +539 + `time_���d +( +ulS��Time +�< +d�ay +) + +541 + `mi�o_�c�d_��p +(1); + +549 +ulS��Time + = + `time_now +(); + +550 + `mem�t +(& +acRecv +, 0, (acRecv)); + +552 + `time_���d +( +ulS��Time +�< +d�ay +) + +554 +iSize + = + `comp�t_�cv +( +comp�t +, +acRecv +, 1, 50); + +555 if( +iSize + <= 0) + +559 + `mi�o_�c�d_��p +(1); + +566 +iCmdL� + = + `��� +( +�Cmd +); + +567 +�tv� + = + `comp�t_�nd + ( +comp�t +, +�Cmd +, +iCmdL� +); + +568 i�(0 !� +�tv� +) + +570 +�tv� + = 0x02; + +571 +C˪Up +; + +577 if(0 !� +g� +) + +579 +ulS��Time + = + `time_now +(); + +580 + `time_���d +( +ulS��Time +�< +g� +) + +582 + `mi�o_�c�d_��p +(1); + +586 + `mem�t + ( +acRecv +, 0, (acRecv)); + +587 +pcRecvP� + = +acRecv +; + +588 +iRecvL� + = 0; + +589 +iRecvSize + = ( +acRecv +); + +591 +�tv� + = -1; + +592 +ulS��Time + = + `time_now +(); + +594 + `time_���d +( +ulS��Time +�< +timeout +) + +596 i�� +iRecvL� + < ( +iRecvSize +-1) ) + +598 +iSize + = + `comp�t_�cv + ( +comp�t +, +pcRecvP� +, 1, 50); + +599 i�( +iSize + >0) + +601 +iRecvL� + +� +iSize +; + +602 +pcRecvP� + +� +iSize +; + +603 +acRecv + [ +iRecvSize +-1] = 0; + +608 if( +NULL + !� +ex�� +) + +610 i�(0x00 =� + `�_m�ch +( +acRecv +, +ex�� +)) + +612 +�tv� + = 0; + +613 +C˪Up +; + +620 if( +NULL + !� +�r� +) + +622 i�(0x00 =� + `�_m�ch +( +acRecv +, +�r� +)) + +624 +�tv� + = -3; + +625 +C˪Up +; + +631 + `mi�o_�c�d_��p +(1); + +635 if( +NULL +== +ex�� +) + +636 +�tv� + = 0x00; + +638 +�tv� + = -4; + +640 +C˪Up +: + +642 if� +NULL + !� +��y +) + +644 + `���y +( +��y +, +acRecv +, +��y_�n +); + +649 +log +[512] = {0}; + +650 + `���tf +( +log +, 512, "S�d AT comm�d: \"%s\" g���ly \"%s\"", +�Cmd +, +acRecv +); + +651 +i + = 0; + +652 +i +=0; i<512; i++) + +654 if('\r'== +log +[ +i +] || '\n'==log[i] || '\t'==log[i]) + +656 +log +[ +i +]=' '; + +658 i�(0 =� +log +[ +i +]) + +663 + `log_�fo +("%s\n", +log +); + +667 +�tv� +; + +668 + } +} + + @cp_atcmd.h + +14 #i�de� +__CP_ATCMD_H + + +15 + #__CP_ATCMD_H + + + ) + +17 + ~"�_comp�t.h +" + +20 + s_GPRS_LOCATION + + +22 + ml�g�ude +[15]; + +23 + m�t�ude +[15]; + +24 + md�e +[15]; + +25 + mtime +[15]; + +26 + mmcc_mnc +[16]; + +27 } + tGPRS_LOCATION +; + +29 + s_REGISTER_INFO + + +31 + mty� +; + +32 + msig�l +; + +33 + m���r +[64]; + +34 +GPRS_LOCATION + + mloc +; + +35 } + tREGISTER_INFO +; + +38 + s_HARDWARE_INFO + + +40 + mmod� +[64]; + +41 + mm�v +[64]; + +42 + m�mi +[64]; + +43 } + tHW_INFO +; + +45 +�nd_�cmd +( +COM_PORT + * +�_comp�t +, * +�Cmd +, * +ex�� +, * +�r� +, + +46 +timeout +, * +��y +, +��y_�n +); + +48 +�nd_�cmd_check_ok +( +COM_PORT + * +comp�t +, * +�cmd +, +timeout +); + +49 +�nd_�cmd_check_v�ue +( +COM_PORT + * +comp�t +, * +�cmd +, +timeout +, * +buf +, +buf_�n +); + +50 +�nd_�cmd_check_�que� +( +COM_PORT + * +comp�t +, * +�cmd +, +timeout +, * +buf +, +buf_�n +); + +53 +�cmd_check_�_�ady +( +COM_PORT + * +comp�t +); + +54 +�cmd_check_sim_v�id +( +COM_PORT + * +comp�t +); + +55 +�cmd_check_g�s_sig�l +( +COM_PORT + * +comp�t +); + +56 +�cmd_check_g�s_�gi�� +( +COM_PORT + * +comp�t +); + +57 +�cmd_check_g�s_���r +( +COM_PORT + * +comp�t +, * +���r +); + +58 +�cmd_check_g�s_�me +( +COM_PORT + * +comp�t +, * +�me +); + +59 +�cmd_check_g�s_v�si� +( +COM_PORT + * +comp�t +, * +v�si� +); + +60 +�cmd_check_g�s_�mi +( +COM_PORT + * +comp�t +, * +�mi +); + +61 +�cmd_check_g�s_�tw�k +( +COM_PORT + * +comp�t +, * +�tw�k +); + +62 +�cmd_check_g�s_lo�ti� +( +COM_PORT + * +comp�t +, +GPRS_LOCATION + * +lo�ti� +); + +63 +�cmd_check_g�s_mcc_mnc +( +COM_PORT + * +comp�t +, * +mcc_mnc +); + +65 +�cmd_�t_�tw�k_mode +( +COM_PORT + * +comp�t +, +mode +); + +66 +�cmd_�t_�n +( +COM_PORT + * +comp�t +, * +�n +); + + @cp_common.h + +14 #i�de� +__CP_COMMON_H + + +15 + #__CP_COMMON_H + + + ) + +17 + ~<�dio.h +> + +18 + ~<�dlib.h +> + +19 + ~<�r�g.h +> + +21 #i�de� +off�tof + + +22 + #off�tof +( +TYPE +, +MEMBER +�(( +size_t +�&((TYPE *)0)->MEMBER) + + ) + +25 + #cڏ��_of +( +�r +, +ty� +, +memb� +) ({ \ + +26 cڡ + `ty�of +�(( +ty� + *)0)-> +memb� + ) * +__m�r + = ( +�r +); \ + +27 ( +ty� + *)�(*) +__m�r + - + `off�tof +�y�, +memb� +�);}) + + ) + +31 +�l�e + * +_t_m�loc +( +size_t + +size + + +32 #ifde� +MEM_LEAK_CHECK + + +33 , cڡ * +f�e +, +l�e + + +37 * + g�r +; + +39 i�(( + g�r + = +m�loc + ( +size +))) + +40 +mem�t + ( +�r +, 0, +size +); + +41 #ifde� +MEM_LEAK_CHECK + + +42 +��tf + ("MALLOC,0x%�@%s:%u\n", +�r +, +f�e +, +l�e +); + +44 + g�r +; + +47 +�l�e + +_t_� +(* +�r + + +48 #ifde� +MEM_LEAK_CHECK + + +49 , cڡ * +f�e +, +l�e + + +53 #ifde� +MEM_LEAK_CHECK + + +54 +��tf + ("FREE,0x%�@%s:%u\n", +�r +, +f�e +, +l�e +); + +56 +� +( +�r +); + +59 #ifde� +MEM_LEAK_CHECK + + +60 + #t_� +( +p +�if�){ + `_t_� +�, +__FILE__ +, +__LINE__ +);�= +NULL +; } + + ) + +61 + #t_m�loc +( +s +� + `_t_m�loc +(s, +__FILE__ +, +__LINE__ +) + + ) + +63 + #t_� +( +p +�if�){ + `_t_� +�);�= +NULL +; } + + ) + +64 + #t_m�loc +( +s +� + `_t_m�loc +(s) + + ) + + @cp_comport.c + +14 + ~"�_comp�t.h +" + +24 +COM_PORT + * + $comp�t_�� +(cڡ * +dev_�me +, +baud�� +, cڡ * +���gs +) + +26 +COM_PORT + * +comp�t + = +NULL +; + +27 i�( +NULL + =�( +comp�t + = ( +COM_PORT + *� + `m�loc +((COM_PORT)))) + +29 +NULL +; + +31 + `mem�t +( +comp�t +, 0, ( +COM_PORT +)); + +32 +comp�t +-> +is_c��ed + = 0; + +33 +comp�t +-> +�ag_size + = 128; + +35 + `���y +( +comp�t +-> +dev_�me +, dev_�me, +DEVNAME_LEN +); + +36 +comp�t +-> +baud�� + = baudrate; + +38 + `�t_���gs +( +comp�t +, +���gs +); + +39 #ifde� +COM_DEBUG + + +40 + `di�_���gs +( +comp�t +); + +43 +comp�t +; + +44 + } +} + +46 #ifde� +COM_DEBUG + + +47 + $di�_���gs +( +COM_PORT + * +comp�t +) + +49 + `COM_PRINT +("Devi�:\t\t\t\"%s\"\n", +comp�t +-> +dev_�me +); + +50 + `COM_PRINT +("Baud��:\t\t%ld\n", +comp�t +-> +baud�� +); + +51 + `COM_PRINT +("D�aB�:\t\t\'%d\'\n", +comp�t +-> +d�ab� +); + +52 +comp�t +-> +�r�y +) + +55 + `COM_PRINT +("Parity:\t\t\t\'N\'\n"); + +58 + `COM_PRINT +("Parity:\t\t\t\'O\'\n"); + +61 + `COM_PRINT +("Parity:\t\t\t\'E\'\n"); + +64 + `COM_PRINT +("Parity:\t\t\t\'S\'\n"); + +67 + `COM_PRINT +("St�B�:\t\t\'%ld\'\n", () +comp�t +-> +��b� +); + +68 +comp�t +-> +�ow�� +) + +71 + `COM_PRINT +("FlowCtrl:\t\t\'N\'\n"); + +74 + `COM_PRINT +("FlowCtrl:\t\t\'S\'\n"); + +77 + `COM_PRINT +("FlowCtrl:\t\t\'H\'\n"); + +80 + `COM_PRINT +("FlowCtrl:\t\t\'B\'\n"); + +83 + `COM_PRINT +("\n"); + +85 + } +} + +95 + $�t_���gs +( +COM_PORT + * +comp�t +, cڡ * +���gs +) + +97 if( +NULL +== +���gs + || NULL== +comp�t +) + +100 +���gs +[0]) + +103 +comp�t +-> +d�ab� + = 7; + +107 +comp�t +-> +d�ab� + = 8; + +111 +���gs +[1]) + +115 +comp�t +-> +�r�y + = 1; + +119 +comp�t +-> +�r�y + = 2; + +123 +comp�t +-> +�r�y + = 3; + +128 +comp�t +-> +�r�y + = 0; + +132 +���gs +[2]) + +135 +comp�t +-> +��b� + = 0; + +139 +comp�t +-> +��b� + = 1; + +143 +���gs +[3]) + +147 +comp�t +-> +�ow�� + = 1; + +151 +comp�t +-> +�ow�� + = 2; + +155 +comp�t +-> +�ow�� + = 3; + +160 +comp�t +-> +�ow�� + = 0; + +163 + } +} + +165 + $comp�t_�o� +( +COM_PORT + * +comp�t +) + +167 i�(0 !� +comp�t +-> +fd +) + +169 + `COM_PRINT +("Clo� devi� \"%s\"\n", +comp�t +-> +dev_�me +); + +170 + `�o� +( +comp�t +-> +fd +); + +172 +comp�t +-> +is_c��ed + = 0x00; + +173 +comp�t +-> +fd + = -1; + +174 + } +} + +176 + $comp�t_�rm +( +COM_PORT + * +comp�t +) + +178 if( +NULL + =� +comp�t +) + +181 i�(0 !� +comp�t +-> +fd +) + +183 + `comp�t_�o� +( +comp�t +); + +185 + `mem�t +( +comp�t +, 0x00, ( +COM_PORT +)); + +186 + `� +( +comp�t +); + +187 +comp�t + = +NULL +; + +190 + } +} + +192 + $comp�t_ݒ +( +COM_PORT + * +comp�t +) + +194 +�tv� + = -1; + +195 +�rmios + +�d_cfg +, +�w_cfg +; + +196 +�d_�ags +; + +197 +tmp +; + +199 if( +NULL +== +comp�t +) + +202 + `comp�t_�o� +( +comp�t +); + +206 if�! + `�r�r +( +comp�t +-> +dev_�me +, "tty")) + +208 + `COM_PRINT +("O��Nفty devi� \"%s\"\n", +comp�t +-> +dev_�me +); + +209 +comp�t +-> +fd + = + `ݒ +(comp�t-> +dev_�me +, +O_RDWR +); + +210 +�tv� + = +comp�t +-> +fd +<0 ? -2 : comport->fd; + +211 +C˪Up +; + +214 +comp�t +-> +fd + = + `ݒ +(comp�t-> +dev_�me +, +O_RDWR + | +O_NOCTTY + | +O_NONBLOCK +); + +215 i�( +comp�t +-> +fd + < 0) + +217 +�tv� + = -3; + +218 +C˪Up +; + +220 + `COM_PRINT +("O��devi� \"%s\"\n", +comp�t +-> +dev_�me +); + +222 i�((-1 !�( +�d_�ags + = + `f�� +( +comp�t +-> +fd +, +F_GETFL +, 0))) + +223 && (-1 !� + `f�� +( +comp�t +-> +fd +, +F_SETFL +, +�d_�ags + & ~ +O_NONBLOCK +))) + +226 i�(-1 =� + `tc�ush +( +comp�t +-> +fd +, +TCIOFLUSH +)) + +228 +�tv� + = -4; + +229 +C˪Up +; + +234 +�tv� + = -5; + +235 +C˪Up +; + +238 i�(0 !� + `tcg��� +( +comp�t +-> +fd +, & +�d_cfg +)) + +240 +�tv� + = -6; + +241 +C˪Up +; + +244 + `mem�t +(& +�w_cfg +, 0, (new_cfg)); + +250 +�w_cfg +. +c_c�ag + &�~ +CSIZE +; + +251 +�w_cfg +. +c_l�ag + &�~( +ICANON + | +ECHO + | +ECHOE + | +ISIG +); + +252 +�w_cfg +. +c_i�ag + &�~( +BRKINT + | +ICRNL + | +INPCK + | +ISTRIP + | +IXON +); + +253 +�w_cfg +. +c_o�ag + &�~( +OPOST +); + +256 +comp�t +-> +d�ab� +) + +259 +�w_cfg +. +c_c�ag + |� +CS7 +; + +262 +�w_cfg +. +c_c�ag + |� +CS6 +; + +265 +�w_cfg +. +c_c�ag + |� +CS5 +; + +268 +�w_cfg +. +c_c�ag + |� +CS8 +; + +273 +comp�t +-> +�r�y +) + +276 +�w_cfg +. +c_c�ag + |�( +PARENB + | +PARODD +); + +277 +�w_cfg +. +c_c�ag + |�( +INPCK + | +ISTRIP +); + +280 +�w_cfg +. +c_c�ag + |� +PARENB +; + +281 +�w_cfg +. +c_c�ag + &�~ +PARODD +;; + +282 +�w_cfg +. +c_c�ag + |�( +INPCK + | +ISTRIP +); + +285 +�w_cfg +. +c_c�ag + &�~ +PARENB +; + +286 +�w_cfg +. +c_c�ag + &�~ +CSTOPB +; + +289 +�w_cfg +. +c_c�ag + &�~ +PARENB +; + +293 i�(0x01 !� +comp�t +-> +��b� +) + +295 +�w_cfg +. +c_c�ag + |� +CSTOPB +; + +299 +�w_cfg +. +c_c�ag + &�~ +CSTOPB +; + +303 +comp�t +-> +�ow�� +) + +307 +�w_cfg +. +c_c�ag + &�~( +CRTSCTS +); + +308 +�w_cfg +. +c_i�ag + |�( +IXON + | +IXOFF +); + +311 +�w_cfg +. +c_c�ag + |� +CRTSCTS +; + +312 +�w_cfg +. +c_i�ag + &�~( +IXON + | +IXOFF +); + +315 +�w_cfg +. +c_c�ag + &�~( +CRTSCTS +); + +316 +�w_cfg +. +c_i�ag + &�~( +IXON + | +IXOFF +); + +321 +comp�t +-> +baud�� +) + +324 +tmp + = +B115200 +; + +327 +tmp + = +B57600 +; + +330 +tmp + = +B38400 +; + +333 +tmp + = +B19200 +; + +336 +tmp + = +B9600 +; + +339 +tmp + = +B4800 +; + +342 +tmp + = +B2400 +; + +345 +tmp + = +B1800 +; + +348 +tmp + = +B1200 +; + +351 +tmp + = +B600 +; + +354 +tmp + = +B300 +; + +357 +tmp + = +B200 +; + +360 +tmp + = +B150 +; + +363 +tmp + = +B134 +; + +366 +tmp + = +B110 +; + +369 +tmp + = +B75 +; + +372 +tmp + = +B50 +; + +375 +tmp + = +B115200 +; + +377 + `cf�ti��d +(& +�w_cfg +, +tmp +); + +378 + `cf�ti��d +(& +�w_cfg +, +tmp +); + +381 +�w_cfg +. +c_cc +[ +VMIN +] = 0; + +382 +�w_cfg +. +c_cc +[ +VTIME +] = 0; + +384 + `tc�ush +( +comp�t +-> +fd +, +TCIFLUSH +); + +385 i�(0 !� + `tc���r +( +comp�t +-> +fd +, +TCSANOW +, & +�w_cfg +)) + +387 +�tv� + = -7; + +388 +C˪Up +; + +391 + `COM_PRINT +("C���ed devi� \"%s\".\n", +comp�t +-> +dev_�me +); + +392 +comp�t +-> +is_c��ed + = 0x01; + +393 +�tv� + = +comp�t +-> +fd +; + +395 +C˪Up +: + +396 + `COM_PRINT +("O��devi� \"%s\" %s.\n", +comp�t +-> +dev_�me +, +�tv� +>0 ? "successfully" : "failure"); + +397 +�tv� +; + +398 + } +} + +400 + $n�block +() + +402 +�rmios + +�y��e +; + +405 + `tcg��� +( +STDIN_FILENO +, & +�y��e +); + +408 +�y��e +. +c_l�ag + &�~ +ICANON +; + +410 +�y��e +. +c_cc +[ +VMIN +] = 1; + +413 + `tc���r +( +STDIN_FILENO +, +TCSANOW +, & +�y��e +); + +414 + } +} + +416 + $kbh� +() + +418 +timev� + +tv +; + +419 +fd_�t + +fds +; + +420 +tv +. +tv_�c + = 0; + +421 +tv +. +tv_u�c + = 0; + +422 + `FD_ZERO +(& +fds +); + +423 + `FD_SET +( +STDIN_FILENO +, & +fds +); + +424 + `��� +( +STDIN_FILENO + + 1, & +fds +, +NULL +, NULL, & +tv +); + +425 + `FD_ISSET +( +STDIN_FILENO +, & +fds +); + +426 + } +} + +428 + $comp�t_�cv +( +COM_PORT + * +comp�t +, * +buf +, +buf_size +, +timeout +) + +430 +�tv� + = 0; + +431 +iR� +; + +432 +fd_�t + +�R�dFds +, +�Ex�Fds +; + +433 +timev� + +�Time +; + +435 i�( +NULL + =� +buf + || 0 >� +buf_size +) + +437 + `COM_PRINT +("%s(�u�g��r�.\n", +__FUNCTION__ +); + +438 +�tv� + = -1; + +439 +C˪Up +; + +442 i�(0x01 !� +comp�t +-> +is_c��ed +) + +444 + `COM_PRINT +("%s(�comp܈n� c���ed.\n", +__FUNCTION__ +); + +445 +�tv� + = -2; + +446 +C˪Up +; + +451 + `FD_ZERO +(& +�R�dFds +); + +452 + `FD_ZERO +(& +�Ex�Fds +); + +453 + `FD_SET +( +comp�t +-> +fd +, & +�R�dFds +); + +454 + `FD_SET +( +comp�t +-> +fd +, & +�Ex�Fds +); + +456 i�(0xFFFFFFFF !� +timeout +) + +458 +�Time +. +tv_�c + = ( +time_t +�( +timeout + / 1000); + +459 +�Time +. +tv_u�c + = ()(1000 * ( +timeout + % 1000)); + +461 +iR� + = + `��� +( +comp�t +-> +fd + + 1, & +�R�dFds +, 0, & +�Ex�Fds +, & +�Time +); + +462 i�(0 =� +iR� +) + +464 +�tv� + = 0; + +465 +C˪Up +; + +467 i�(0 < +iR� +) + +469 i�(0 !� + `FD_ISSET +( +comp�t +-> +fd +, & +�Ex�Fds +)) + +471 +�tv� + = -6; + +472 + `COM_PRINT +("Error checking�ecv status.\n"); + +473 +C˪Up +; + +476 i�(0 =� + `FD_ISSET +( +comp�t +-> +fd +, & +�R�dFds +)) + +478 +�tv� + = 0; + +479 + `COM_PRINT +("No incoming data.\n"); + +480 +C˪Up +; + +485 i�( +EINTR + =� +��o +) + +487 + `COM_PRINT +("catch interrupt signal.\n"); + +488 +�tv� + = 0; + +492 + `COM_PRINT +("Check�ecv status failure.\n"); + +493 +�tv� + = -7; + +496 +C˪Up +; + +500 + `u��p +(10000); + +503 +iR� + = + `�ad +( +comp�t +-> +fd +, +buf +, +buf_size +); + +504 i�(0 > +iR� +) + +506 i�( +EINTR + =� +��o +) + +507 +�tv� + = 0; + +509 +�tv� + = -3; + +511 +C˪Up +; + +516 +i +=0; + +517 + `��tf +("Re�iv�%d by��d�a: \n", +iR� +); + +518 +i +=0; i< +iR� +; i++) + +520 + `��tf +("0x%02x ", +buf +[ +i +]); + +522 + `��tf +("\n"); + +526 +�tv� + = +iR� +; + +528 +C˪Up +: + +529 +�tv� +; + +531 + } +} + +533 + $comp�t_�nd +( +COM_PORT + * +comp�t +, * +buf +, +�nd_by�s +) + +535 * +�r +, * +�d +; + +536 +�tv� + = 0; + +537 +�nd + = 0; + +539 i�( +NULL + =� +buf + || 0 >� +�nd_by�s +) + +541 + `COM_PRINT +("%s(�U�g��r�.\n", +__FUNCTION__ +); + +542 +�tv� + = -1; + +543 +C˪Up +; + +546 i�(0x01 !� +comp�t +-> +is_c��ed +) + +548 +�tv� + = -3; + +549 + `COM_PRINT +("Serail�ot connected.\n"); + +550 +C˪Up +; + +556 i�( +comp�t +-> +�ag_size + < +�nd_by�s +) + +558 +�r + = +buf +; + +559 +�d + = +buf + + +�nd_by�s +; + +564 i�( +comp�t +-> +�ag_size + < ( +�d + - +�r +)) + +566 +�nd + = + `wr�e +( +comp�t +-> +fd +, +�r +, comp�t-> +�ag_size +); + +567 i�(0 >� +�nd + || +comp�t +-> +�ag_size + != send) + +569 +�tv� + = -4; + +570 +C˪Up +; + +572 +�r + +� +comp�t +-> +�ag_size +; + +576 +�nd + = + `wr�e +( +comp�t +-> +fd +, +�r +, ( +�d + -�tr)); + +577 i�(0 >� +�nd + || ( +�d + - +�r +) != send) + +579 +�tv� + = -4; + +580 +C˪Up +; + +582 +�r + +�( +�d + -�tr); + +585 +�r + < +�d +); + +589 +�nd + = + `wr�e +( +comp�t +-> +fd +, +buf +, +�nd_by�s +); + +590 i�(0 >� +�nd + || +�nd_by�s + != send) + +592 +�tv� + = -5; + +593 +C˪Up +; + +597 +C˪Up +: + +598 +�tv� +; + +599 + } +} + + @cp_comport.h + +13 #i�de� +_CP_COMPORT_H + + +14 + #_CP_COMPORT_H + + + ) + +16 + ~<�dio.h +> + +17 + ~<�dlib.h +> + +18 + ~<uni�d.h +> + +19 + ~<�r�g.h +> + +20 + ~<g��t.h +> + +21 + ~<f��.h +> + +22 + ~<��o.h +> + +23 + ~<�rmios.h +> + +24 + ~<sys/��.h +> + +25 + ~<sys/wa�.h +> + +26 + ~<sys/ty�s.h +> + +27 + ~<sys/��.h +> + +28 + ~<sys/���.h +> + +30 + #BUF_64 + 64 + + ) + +32 #i�de� +DEVNAME_LEN + + +33 + #DEVNAME_LEN + 64 + + ) + +37 #ifde� +COM_DEBUG + + +38 + #COM_PRINT +( +f�m� +, +�gs +...� + `��tf +(f�m�, ##�gs) + + ) + +40 + #COM_PRINT +( +f�m� +, +�gs +...�do{} 0); + + ) + +45 + s__COM_PORT + + +47 + md�ab� +, + m�r�y +, + m��b� +, + m�ow�� +, + mis_c��ed +; + +48 + mdev_�me +[ +DEVNAME_LEN +]; + +49 + mu�d +; + +50 + mfd +; + +51 + m�ag_size +; + +52 + mbaud�� +; + +53 } + tCOM_PORT +; + +55 +COM_PORT + * +comp�t_�� +(cڡ * +dev_�me +, +baud�� +, cڡ * +���gs +); + +56 +comp�t_�o� +( +COM_PORT + * +comp�t +); + +57 +comp�t_ݒ +( +COM_PORT + * +comp�t +); + +58 +comp�t_�rm +( +COM_PORT + * +comp�t +); + +59 +comp�t_�cv +( +COM_PORT + * +comp�t +, * +buf +, +buf_size +, +timeout +); + +60 +comp�t_�nd +( +COM_PORT + * +comp�t +, * +buf +, +�nd_by�s +); + +62 +�t_���gs +( +COM_PORT + * +comp�t +, cڡ * +���gs +); + +63 +di�_���gs +( +COM_PORT + * +comp�t +); + +64 +n�block +(); + +65 +kbh� +(); + + @cp_dictionary.c + +16 + ~"�_di�iڬy.h +" + +18 + ~<�dio.h +> + +19 + ~<�dlib.h +> + +20 + ~<�r�g.h +> + +21 + ~<uni�d.h +> + +24 + #MAXVALSZ + 1024 + + ) + +27 + #DICTMINSZ + 128 + + ) + +30 + #DICT_INVALID_KEY + ((*)-1) + + ) + +38 * + $mem_doub� +(* +�r +, +size +) + +40 * +�w�r + ; + +42 +�w�r + = + `��oc +(2* +size +, 1); + +43 i�( +�w�r +== +NULL +) { + +44 +NULL + ; + +46 + `mem�y +( +�w�r +, +�r +, +size +); + +47 + `� +( +�r +); + +48 +�w�r + ; + +49 + } +} + +61 * + $x�rdup +(cڡ * +s +) + +63 * +t + ; + +64 i�(! +s +) + +65 +NULL + ; + +66 +t + = (*) + `m�loc +( + `��� +( +s +)+1) ; + +67 i�( +t +) { + +68 + `�r�y +( +t +, +s +); + +70 +t + ; + +71 + } +} + +88 + $di�iڬy_hash +(cڡ * +key +) + +90 +�n + ; + +91 +hash + ; + +92 +i + ; + +94 +�n + = + `��� +( +key +); + +95 +hash +=0, +i +=0 ; i< +�n + ; i++) { + +96 +hash + +�() +key +[ +i +] ; + +97 +hash + += (hash<<10); + +98 +hash + ^= (hash>>6) ; + +100 +hash + += (hash <<3); + +101 +hash + ^= (hash >>11); + +102 +hash + += (hash <<15); + +103 +hash + ; + +104 + } +} + +117 +di�iڬy + * + $di�iڬy_�w +( +size +) + +119 +di�iڬy + * +d + ; + +122 i�( +size +< +DICTMINSZ +) size=DICTMINSZ ; + +124 i�(!( +d + = ( +di�iڬy + *) + `��oc +(1, (dictionary)))) { + +125 +NULL +; + +127 +d +-> +size + = size ; + +128 +d +-> +v� + = (**) + `��oc +( +size +, (*)); + +129 +d +-> +key + = (**) + `��oc +( +size +, (*)); + +130 +d +-> +hash + = (*) + `��oc +( +size +, ()); + +131 +d + ; + +132 + } +} + +143 + $di�iڬy_d� +( +di�iڬy + * +d +) + +145 +i + ; + +147 i�( +d +== +NULL +) ; + +148 +i +=0 ; i< +d +-> +size + ; i++) { + +149 i�( +d +-> +key +[ +i +]!= +NULL +) + +150 + `� +( +d +-> +key +[ +i +]); + +151 i�( +d +-> +v� +[ +i +]!= +NULL +) + +152 + `� +( +d +-> +v� +[ +i +]); + +154 + `� +( +d +-> +v� +); + +155 + `� +( +d +-> +key +); + +156 + `� +( +d +-> +hash +); + +157 + `� +( +d +); + +159 + } +} + +175 * + $di�iڬy_g� +( +di�iڬy + * +d +, cڡ * +key +, * +def +) + +177 +hash + ; + +178 +i + ; + +180 +hash + = + `di�iڬy_hash +( +key +); + +181 +i +=0 ; i< +d +-> +size + ; i++) { + +182 i�( +d +-> +key +[ +i +]== +NULL +) + +185 i�( +hash +== +d +->hash[ +i +]) { + +187 i�(! + `�rcmp +( +key +, +d +->key[ +i +])) { + +188 +d +-> +v� +[ +i +] ; + +192 +def + ; + +193 + } +} + +221 + $di�iڬy_�t +( +di�iڬy + * +d +, cڡ * +key +, cڡ * +v� +) + +223 +i + ; + +224 +hash + ; + +226 i�( +d +== +NULL + || +key +==NULL) -1 ; + +229 +hash + = + `di�iڬy_hash +( +key +) ; + +231 i�( +d +-> +n +>0) { + +232 +i +=0 ; i< +d +-> +size + ; i++) { + +233 i�( +d +-> +key +[ +i +]== +NULL +) + +235 i�( +hash +== +d +->hash[ +i +]) { + +236 i�(! + `�rcmp +( +key +, +d +->key[ +i +])) { + +238 i�( +d +-> +v� +[ +i +]!= +NULL +) + +239 + `� +( +d +-> +v� +[ +i +]); + +240 +d +-> +v� +[ +i +] = v� ? + `x�rdup +(v��: +NULL + ; + +249 i�( +d +-> +n +==d-> +size +) { + +252 +d +-> +v� + = (**) + `mem_doub� +(d->v�, d-> +size + * (*)) ; + +253 +d +-> +key + = (**) + `mem_doub� +(d->key, d-> +size + * (*)) ; + +254 +d +-> +hash + = (*) + `mem_doub� +(d->hash, d-> +size + * ()) ; + +255 i�(( +d +-> +v� +== +NULL +�|| (d-> +key +==NULL�|| (d-> +hash +==NULL)) { + +260 +d +-> +size + *= 2 ; + +266 +i += +d +-> +n + ; d-> +key +[i] ; ) { + +267 if(++ +i + =� +d +-> +size +) i = 0; + +270 +d +-> +key +[ +i +] = + `x�rdup +(key); + +271 +d +-> +v� +[ +i +] = v� ? + `x�rdup +(v��: +NULL + ; + +272 +d +-> +hash +[ +i +] = hash; + +273 +d +-> +n + ++ ; + +275 + } +} + +288 + $di�iڬy_un�t +( +di�iڬy + * +d +, cڡ * +key +) + +290 +hash + ; + +291 +i + ; + +293 i�( +key + =� +NULL +) { + +297 +hash + = + `di�iڬy_hash +( +key +); + +298 +i +=0 ; i< +d +-> +size + ; i++) { + +299 i�( +d +-> +key +[ +i +]== +NULL +) + +302 i�( +hash +== +d +->hash[ +i +]) { + +304 i�(! + `�rcmp +( +key +, +d +->key[ +i +])) { + +310 i�( +i +>= +d +-> +size +) + +314 + `� +( +d +-> +key +[ +i +]); + +315 +d +-> +key +[ +i +] = +NULL + ; + +316 i�( +d +-> +v� +[ +i +]!= +NULL +) { + +317 + `� +( +d +-> +v� +[ +i +]); + +318 +d +-> +v� +[ +i +] = +NULL + ; + +320 +d +-> +hash +[ +i +] = 0 ; + +321 +d +-> +n + -- ; + +323 + } +} + +337 + $di�iڬy_dump +( +di�iڬy + * +d +, +FILE + * +out +) + +339 +i + ; + +341 i�( +d +== +NULL + || +out +==NULL) ; + +342 i�( +d +-> +n +<1) { + +343 + `�r�tf +( +out +, "empty dictionary\n"); + +346 +i +=0 ; i< +d +-> +size + ; i++) { + +347 i�( +d +-> +key +[ +i +]) { + +348 + `�r�tf +( +out +, "%20s\t[%s]\n", + +349 +d +-> +key +[ +i +], + +350 +d +-> +v� +[ +i +] ? d->val[i] : "UNDEF"); + +354 + } +} + +358 #ifde� +TESTDIC + + +359 + #NVALS + 20000 + + ) + +360 + $ma� +( +�gc +, * +�gv +[]) + +362 +di�iڬy + * +d + ; + +363 * +v� + ; + +364 +i + ; + +365 +cv� +[90] ; + +368 + `��tf +("allocating...\n"); + +369 +d + = + `di�iڬy_�w +(0); + +372 + `��tf +("���g %d v�ues...\n", +NVALS +); + +373 +i +=0 ; i< +NVALS + ; i++) { + +374 + `�r�tf +( +cv� +, "%04d", +i +); + +375 + `di�iڬy_�t +( +d +, +cv� +, "salut"); + +377 + `��tf +("g�t�g %d v�ues...\n", +NVALS +); + +378 +i +=0 ; i< +NVALS + ; i++) { + +379 + `�r�tf +( +cv� +, "%04d", +i +); + +380 +v� + = + `di�iڬy_g� +( +d +, +cv� +, +DICT_INVALID_KEY +); + +381 i�( +v� +== +DICT_INVALID_KEY +) { + +382 + `��tf +("��� g� v�u�f� key [%s]\n", +cv� +); + +385 + `��tf +("un���g %d v�ues...\n", +NVALS +); + +386 +i +=0 ; i< +NVALS + ; i++) { + +387 + `�r�tf +( +cv� +, "%04d", +i +); + +388 + `di�iڬy_un�t +( +d +, +cv� +); + +390 i�( +d +-> +n + != 0) { + +391 + `��tf +("error deleting values\n"); + +393 + `��tf +("deallocating...\n"); + +394 + `di�iڬy_d� +( +d +); + +396 + } +} + + @cp_dictionary.h + +14 #i�de� +_CP_DICTIONARY_H_ + + +15 + #_CP_DICTIONARY_H_ + + + ) + +21 + ~<�dio.h +> + +22 + ~<�dlib.h +> + +23 + ~<�r�g.h +> + +24 + ~<uni�d.h +> + +41 + s_di�iڬy_ + { + +42 + mn + ; + +43 + msize + ; + +44 ** + mv� + ; + +45 ** + mkey + ; + +46 * + mhash + ; + +47 } + tdi�iڬy + ; + +66 +di�iڬy_hash +(cڡ * +key +); + +79 +di�iڬy + * +di�iڬy_�w +( +size +); + +90 +di�iڬy_d� +( +di�iڬy + * +vd +); + +106 * +di�iڬy_g� +( +di�iڬy + * +d +, cڡ * +key +, * +def +); + +135 +di�iڬy_�t +( +di�iڬy + * +vd +, cڡ * +key +, cڡ * +v� +); + +148 +di�iڬy_un�t +( +di�iڬy + * +d +, cڡ * +key +); + +163 +di�iڬy_dump +( +di�iڬy + * +d +, +FILE + * +out +); + + @cp_fds.c + +14 + ~<sys/�sour�.h +> + +15 + ~"�_fds.h +" + +16 + ~"�_sock.h +" + +17 + ~"�_time.h +" + +18 + ~"�_comm�.h +" + +21 + $�_fds_��lim� +( +maxfd +) + +23 +�im� + +�s +; + +25 if( + `g��im� +( +RLIMIT_NOFILE +, & +�s +) <0) + +27 + `log_�l +("g��im� fa�ed: %s\n", + `���� +( +��o +)); + +31 if( +�s +. +�im_cur + < +maxfd +) + +33 +�s +. +�im_cur + = +maxfd +; + +34 if( + `��lim� +( +RLIMIT_NOFILE +, & +�s +) <0) + +36 + `log_�l +("��lim� fa�ed: %s\n", + `���� +( +��o +)); + +42 + } +} + +45 +CP_FDS + * + $�_fds_�� +( +CP_FDS + * +fds +, +maxev�ts +, +timeout +) + +47 +rv + = 0; + +49 if( +NULL + !� +fds +) + +51 + `mem�t +( +fds +, 0, (*fds)); + +52 +fds +-> +�fd + = -1; + +56 if�!( +fds +=( +CP_FDS + *) + `t_m�loc +((*fds))) ) + +58 + `log_�r +("fd�cڋx�m�lo��ed: %s\n", + `���� +( +��o +)); + +59 +NULL +; + +63 + `log_�a� +("m�lo�fd�w�h�dd�s�[%p]\n", +fds +); + +64 + `mem�t +( +fds +, 0, (*fds)); + +65 +fds +-> +�fd + = -1; + +66 +fds +-> +�ag + |� +FLAG_FDS_MALLOC +; + +71 +maxev�ts + = maxev�ts< +CP_DEF_MAX_EVENTS + ? maxevents : CP_DEF_MAX_EVENTS; + +72 if� + `�_fds_��lim� +( +maxev�ts +) ) + +74 +rv + = -2; + +75 +��nup +; + +79 +fds +-> +�fd + = + `��l_��� +( +maxev�ts +); + +80 if( +fds +-> +�fd + < 0) + +82 +rv + = -3; + +83 + `log_�l +("��l_��� fa�ed: %s\n", + `���� +( +��o +)); + +84 +��nup +; + +86 + `log_�a� +("O�����f��des��ti� [%d]\n", +fds +-> +�fd +); + +89 + `INIT_LIST_HEAD +(& +fds +-> +�rv�_li� +); + +90 + `INIT_LIST_HEAD +(& +fds +-> +���_li� +); + +91 +fds +-> +�sk_��y + = + `�_��y_�� +( +NULL +, +maxev�ts +); + +92 +fds +-> +ev�t_queue + = + `�_queue_�� +( +NULL +, +maxev�ts +); + +94 +fds +-> +timeout + =�imeout<0 ? -1 :�imeout; + +95 +fds +-> +max_ev�t + = +maxev�ts +; + +96 +fds +-> +�ag + |� +FLAG_FDS_INIT +; + +98 +��nup +: + +99 if( +rv +) + +101 + `log_�r +("Initialise fds contex failed\n"); + +102 + `�_fds_�rm +( +fds +); + +103 +NULL +; + +106 + `log_�ml +("In��li� fd�cڋx [%p] ok\n", +fds +); + +107 +fds +; + +108 + } +} + +111 + $�_fds_�rm +( +CP_FDS + * +fds +) + +113 + `log_dbg +("terminate�poll fds contex�ow\n"); + +115 if(! +fds +) + +117 + `log_�r +("Invalude input�rguments\n"); + +121 if( +fds +-> +�fd + >= 0) + +123 + `log_dbg +("Clo��p��f��des��ti� [%d]\n", +fds +-> +�fd +); + +124 + `�o� +( +fds +-> +�fd +); + +127 if( +fds +-> +�sk_��y +) + +129 + `�_��y_�rm +( +fds +-> +�sk_��y +); + +132 if( +fds +-> +ev�t_queue +) + +134 + `�_queue_de�roy +( +fds +-> +ev�t_queue +); + +137 if( +fds +-> +�ag +& +FLAG_FDS_MALLOC +) + +139 + `t_� +( +fds +); + +142 + `log_�ml +("Terminate�poll fds contex ok.\n"); + +145 + } +} + +148 + $�_add_��l_ev�t +( +CP_SOCK + * +sock +) + +150 +rv + = 0; + +151 +CP_FDS + * +fds +; + +153 if�! +sock + || !( +fds +=sock->fds) ) + +155 + `log_�r +("Invalude input�rguments\n"); + +159 if� +sock +-> +�ag +& +FLAG_SOCK_EPOLLED + ) + +162 if( +fds +-> +ev�t_�t + > fds-> +max_ev�t +) + +164 + `log_�l +("No more�poll�vent space [%d/%d] for socket[%d]\n", + +165 +fds +-> +ev�t_�t +, fds-> +max_ev�t +, +sock +-> +fd +); + +169 + `mem�t +(& +sock +-> +ev�t +, 0, (sock->event)); + +170 +sock +-> +ev�t +. +ev�ts + = +EPOLLIN +; + +171 +sock +-> +ev�t +. +d�a +. +�r + = sock; + +173 i�� + `��l_�l + ( +fds +-> +�fd +, +EPOLL_CTL_ADD +, +sock +-> +fd +, &sock-> +ev�t +) < 0) + +175 if( +EEXIST + =� +��o +) + +177 + `log_w�n +("sock�[%d]�̗dy�egi����p�l\n", +sock +-> +fd +); + +178 +��nup +; + +182 + `log_�r +("sock�[%d]�egi����p���ed: %s\n", +sock +-> +fd +, + `���� +( +��o +)); + +183 +rv + = -3; + +184 +��nup +; + +188 +fds +-> +ev�t_�t +++; + +189 +sock +-> +�ag + |� +FLAG_SOCK_EPOLLED +; + +191 +��nup +: + +192 if( +rv +) + +193 + `log_�r +("add sock� [%d]�ؕ��ev���ed\n", +sock +-> +fd +); + +195 + `log_dbg +("add sock� [%d]�ؕ��ev��ok\n", +sock +-> +fd +); + +197 +rv +; + +198 + } +} + +202 + $�_mod_��l_ev�t +( +CP_SOCK + * +sock +, +ev�t +) + +204 +CP_FDS + * +fds +; + +206 if�! +sock + || !( +fds +=sock->fds) ) + +208 + `log_�r +("Invalude input�rguments\n"); + +212 if�!( +sock +-> +�ag +& +FLAG_SOCK_EPOLLED +) ) + +217 +sock +-> +ev�t +. +ev�ts + =�vent; + +218 i�� + `��l_�l + ( +fds +-> +�fd +, +EPOLL_CTL_MOD +, +sock +-> +fd +, &sock-> +ev�t +) < 0) + +220 + `log_�r +("modidfy sock� [%d]�p��ev���ed: %s\n", +sock +-> +fd +, + `���� +( +��o +)); + +224 + `log_dbg +("modidfy sock� [%d]�p��ev��ok\n", +sock +-> +fd +); + +227 + } +} + +230 + $�_d�_��l_ev�t +( +CP_SOCK + * +sock +) + +232 +CP_FDS + * +fds +; + +234 if�! +sock + || !( +fds +=sock->fds) ) + +236 + `log_�r +("Invalude input�rguments\n"); + +240 if�!( +sock +-> +�ag +& +FLAG_SOCK_EPOLLED +) ) + +243 +sock +-> +�ag + &�~ +FLAG_SOCK_EPOLLED +; + +244 + `��l_�l +( +fds +-> +�fd +, +EPOLL_CTL_DEL +, +sock +-> +fd +, +NULL +); + +245 +fds +-> +ev�t_�t +--; + +247 + `log_dbg +("�mov�sock� [%d] from�p��ev��ok\n", +sock +-> +fd +); + +249 + } +} + +252 + $�_fds_add_sock_�gi�ry +( +CP_SOCK + * +sock +) + +254 +CP_FDS + * +fds +; + +256 if�! +sock + || !( +fds +=sock->fds) ) + +258 + `log_�r +("Invalude input�rguments\n"); + +262 if� +sock +-> +�ag +& +FLAG_SOCK_REGISTRY + ) + +265 if( +CP_SOCK_MODE_CONNECT + =� +sock +-> +mode +) + +267 + `log_dbg +("�gi� sock� [%p] o�CONNECT mod��t�����i� ok\n", +sock +); + +268 + `li�_add_�� +(& +sock +-> +�i� +, & +fds +-> +���_li� +); + +270 if( +CP_SOCK_MODE_LISTEN + =� +sock +-> +mode +) + +272 + `log_dbg +("�gi� sock� [%p] o�LISTEN mod��tأrv��i� ok\n", +sock +); + +273 + `li�_add_�� +(& +sock +-> +�i� +, & +fds +-> +�rv�_li� +); + +275 if( +CP_SOCK_MODE_ACCEPT +== +sock +-> +mode + && sock-> +�rv_sock +) + +277 + `log_dbg +("�gi� sock� [%p] o�ACCEPT mod��tأrv��i� ok\n", +sock +); + +278 + `li�_add_�� +(& +sock +-> +�i� +, &sock-> +�rv_sock +-> +ac��_li� +); + +279 +sock +-> +�rv_sock +-> +ac��_�t +++; + +283 + `log_�r +("�gi� sock� [%p] o�mod�%d i�����/�rv��i� fa�ed: Unsu�܈mode.\n", +sock +, sock-> +mode +); + +287 +sock +-> +�ag + |� +FLAG_SOCK_REGISTRY +; + +289 + } +} + +292 + $�_fds_d�_sock_�gi�ry +( +CP_SOCK + * +sock +) + +294 if(! +sock + || !(sock-> +�ag +& +FLAG_SOCK_REGISTRY +) ) + +297 if( +CP_SOCK_MODE_ACCEPT +== +sock +-> +mode + && sock-> +�rv_sock +) + +298 +sock +-> +�rv_sock +-> +ac��_�t +--; + +300 + `log_dbg +("�mov�sock� [%d] from sock��egi�ry�i� ok\n", +sock +-> +fd +); + +301 + `li�_d� +(& +sock +-> +�i� +); + +302 +sock +-> +�ag + &�~ +FLAG_SOCK_REGISTRY +; + +305 + } +} + +309 + $�_fds_add_sock_�sk +( +CP_SOCK + * +sock +) + +311 +CP_FDS + * +fds +; + +312 +rv +; + +314 if�! +sock + || !( +fds +=sock->fds) ) + +316 + `log_�r +("Invalude input�rguments\n"); + +320 if� +sock +-> +�ag +& +FLAG_SOCK_TASKED + ) + +323 + `log_�fo +("add sock� [%d] i�؏sk�i�\n", +sock +-> +fd +); + +324 if�( +rv += + `�_��y_add +( +fds +-> +�sk_��y +, +sock +)) >=0 ) + +326 +sock +-> +�dex + = +rv +; + +327 +sock +-> +�ag + |� +FLAG_SOCK_TASKED +; + +332 + } +} + +334 + $�_fds_d�_sock_�sk +( +CP_SOCK + * +sock +) + +336 if(! +sock + || !(sock-> +�ag +& +FLAG_SOCK_TASKED +)) + +339 + `log_�fo +("�mov�sock� [%d:%p] from�ask�i�[%p] by index [%d]\n", +sock +-> +fd +, sock, sock-> +fds +-> +�sk_��y +, sock-> +�dex +); + +341 if( +sock +-> +�dex + >= 0) + +342 + `�_��y_rm_by�dex +( +sock +-> +fds +-> +�sk_��y +, sock-> +�dex +); + +344 + `�_��y_rm_byd�a +( +sock +-> +fds +-> +�sk_��y +, sock); + +346 +sock +-> +�ag + &�~ +FLAG_SOCK_TASKED +; + +347 +sock +-> +�dex + = -1; + +348 + `mem�t +(& +sock +-> +ev�t +, 0, ( +��l_ev�t +)); + +351 + } +} + +353 * + $�_fds_sock_�queue +( +CP_SOCK + * +sock +) + +355 if(! +sock + || sock-> +�ag +& +FLAG_SOCK_INQUEUE + || sock->�ag& +FLAG_SOCK_TASKED + || !sock-> +fds +) + +356 +NULL +; + +358 +sock +-> +�ag + |� +FLAG_SOCK_INQUEUE +; + +359 + `�_�queue +( +sock +-> +fds +-> +ev�t_queue +, sock); + +360 + } +} + +362 * + $�_fds_sock_dequeue +( +CP_FDS + * +fds +) + +364 +CP_SOCK + * +sock + = +NULL +; + +366 if�! +fds + ) + +367 +NULL +; + +369 +sock + = + `�_dequeue +( +fds +-> +ev�t_queue +); + +370 +sock +-> +�ag + &�~ +FLAG_SOCK_INQUEUE +; + +372 +sock +; + +373 + } +} + +375 * + $�_fds_sock_rmqueue +( +CP_SOCK + * +sock +) + +377 if(! +sock + || !(sock-> +�ag +& +FLAG_SOCK_INQUEUE +�|| !sock-> +fds +) + +378 +NULL +; + +380 +sock +-> +�ag + &�~ +FLAG_SOCK_INQUEUE +; + +381 + `�_rmqueue +( +sock +-> +fds +-> +ev�t_queue +, sock); + +382 + } +} + +384 + $�_fds_li�_sock_�sk +( +CP_FDS + * +fds +) + +386 +i +; + +387 +CP_SOCK + * +sock +; + +389 if(! +fds +) + +392 + `log_dbg +("list�ll�he socket in�ask�ist:\n"); + +395 + `�_li�_��y_f�_�ch +( +fds +-> +�sk_��y +, +i +, +sock +) + +397 if( +sock +) + +398 + `log_dbg +("sock�[%d:%p] i��sk�i�\n", +sock +-> +fd +, sock); + +402 + } +} + +405 + $�_fds_de�roy_sock +( +CP_SOCK + * +sock +) + +407 + `�_fds_d�_sock_�sk +( +sock +); + +408 + `�_fds_sock_rmqueue +( +sock +); + +409 + `�_d�_��l_ev�t +( +sock +); + +410 + `�_fds_d�_sock_�gi�ry +( +sock +); + +411 + `�_sock_�rm +( +sock +); + +414 + } +} + +417 + $�_fds_d�e�_ev�t +( +CP_FDS + * +fds +) + +419 +i +=0, +nfds +=0; + +420 +CP_SOCK + * +sock +; + +421 +��l_ev�t + +evts +[ +CP_MAX_EVENT_ONCE +]; + +423 if�! +fds + ) + +426 +nfds + = + `��l_wa� +( +fds +-> +�fd +, +evts +, +CP_MAX_EVENT_ONCE +, fds-> +timeout +); + +428 if( +nfds +<0) + +430 + `log_�l +("��l_wa� fa�u�: %s\n", + `���� +( +��o +)); + +434 if( +nfds + == 0) + +437 + `log_dbg +("��l_wa� g� [%d]�v�ts\n", +nfds +); + +439 +i +=0; i< +nfds +; i++) + +441 +sock +=( +CP_SOCK + *) +evts +[ +i +]. +d�a +. +�r +; + +442 +sock +-> +ev�t + = +evts +[ +i +]; + +443 +sock +-> +a�v_time + = + `time_now +(); + +445 + `log_dbg +("sock� [%d] g��v��[0x%0x]�nd�dded��ev��queu�ok\n", +sock +-> +fd +, sock-> +ev�t +. +ev�ts +); + +446 if� +SOCK_STAT_ALREADY +== +sock +-> +��us + ) + +447 + `�_fds_sock_�queue +( +sock +); + +451 + } +} + +453 + $�_fds_�oc_ev�t +( +CP_FDS + * +fds +) + +455 +i +; + +456 +CP_SOCK + * +sock +; + +457 +rv +; + +459 if�! +fds + ) + +467 + `�_li�_��y_f�_�ch +( +fds +-> +�sk_��y +, +i +, +sock +) + +469 if( +sock +) + +471 if( +sock +-> +cbfunc +) + +473 + `log_dbg +("Pro�s�sock� [%d] i��sk�i� o�ev��[%d]\n", +sock +-> +fd +, sock-> +ev�t +. +ev�ts +); + +474 +rv + = +sock +-> + `cbfunc +(sock); + +478 + `log_�r +("Pro�s�Sock� [%d:%p]�� im�em��ev����back�nd�emov��\n", +sock +-> +fd +, sock); + +479 + `�_fds_d�_sock_�sk +( +sock +); + +485 ! + `�_queue_is_em�y +( +fds +-> +ev�t_queue +)) + +487 if� +NULL +!�( +sock += + `�_fds_sock_dequeue +( +fds +)) ) + +490 if( +sock +-> +cbfunc +) + +492 + `log_dbg +("Pro�s�sock� [%d %p] i�ev��queu�ڃv��[%d]\n", +sock +-> +fd +, sock, sock-> +ev�t +. +ev�ts +); + +493 +rv + = +sock +-> + `cbfunc +(sock); + +497 + `log_�r +("Pro�s�Sock� [%d:%p]�� im�em��ev����back�nd�emov��\n", +sock +-> +fd +, sock); + +504 + } +} + +507 + $�_sock_�rm_�rv� +( +CP_SOCK + * +�rv_sock +) + +509 +CP_SOCK + * +sock +, * +tsock +; + +511 + `log_w�n +("�rm����rv� sock� [%d]�nd [%d]�c�� cl���ow\n", +�rv_sock +-> +fd +, s�v_sock-> +ac��_�t +); + +512 + `li�_f�_�ch_��y_�� +( +sock +, +tsock +, & +�rv_sock +-> +ac��_li� +, +�i� +) + +516 + `�_fds_de�roy_sock +( +sock +); + +520 + `log_w�n +("�rm����rv� sock� [%d]�nd it�ac�� cl�� ok\n", +�rv_sock +-> +fd +); + +521 + `�_fds_de�roy_sock +( +�rv_sock +); + +524 + } +} + +527 + $�_sock_�rm_�l_�rv� +( +CP_FDS + * +fds +) + +529 +CP_SOCK + * +sock +, * +tsock +; + +531 + `log_dbg +("destroy�ll�he�isten socket�ow\n"); + +534 + `li�_f�_�ch_��y_�� +( +sock +, +tsock +, & +fds +-> +�rv�_li� +, +�i� +) + +536 + `�_sock_�rm_�rv� +( +sock +); + +539 + `log_w�n +("destroy�ll�he�isten socket ok\n"); + +542 + } +} + +545 + $�_sock_�rm_�l_��� +( +CP_FDS + * +fds +) + +547 +CP_SOCK + * +sock + = +NULL +, * +tsock +; + +549 + `log_dbg +("destroy�ll�he connect socket�ow\n"); + +551 + `li�_f�_�ch_��y_�� +( +sock +, +tsock +, & +fds +-> +���_li� +, +�i� +) + +554 + `�_fds_de�roy_sock +( +sock +); + +556 + `log_w�n +("destroy�ll�he connect socket ok\n"); + +557 + } +} + +560 + $�_sock_d�e�_timeout +( +CP_FDS + * +fds +) + +562 +CP_SOCK + * +sock +, * +tsock +, * +�rv_sock +; + +565 + `li�_f�_�ch_��y_�� +( +sock +, +tsock +, & +fds +-> +���_li� +, +�i� +) + +568 if� +sock +-> +id�_timeout +>0 && + `time_���d +(sock-> +a�v_time +)>sock->idle_timeout ) + +570 + `log_w�n +("sock�[%d] idˁimeou�h���d�nd�dd�؏sk�i�\n", +sock +-> +fd +); + +571 + `log_dbg +("ϡ: %lu��p�d�ime: %lu id��imeout: %lu\n", +sock +-> +a�v_time +, + `time_���d +(sock->a�v_time), sock-> +id�_timeout +); + +572 +sock +-> +ev�t +. +ev�ts + = +CP_SOCK_EVENT_IDLE_TIMEOUT +; + +573 + `�_fds_add_sock_�sk +( +sock +); + +575 if� +sock +-> +msg_timeout +>0 && sock-> +msg_time +>0 && + `time_���d +(sock->msg_time)>sock->msg_timeout ) + +577 + `log_w�n +("sock�[%d] mes�g�timeou�h���d�nd�dd�؏sk�i�\n", +sock +-> +fd +); + +578 +sock +-> +ev�t +. +ev�ts + = +CP_SOCK_EVENT_MSG_TIMEOUT +; + +579 + `�_fds_add_sock_�sk +( +sock +); + +584 + `li�_f�_�ch_��y +( +�rv_sock +, & +fds +-> +�rv�_li� +, +�i� +) + +586 + `li�_f�_�ch_��y_�� +( +sock +, +tsock +, & +�rv_sock +-> +ac��_li� +, +�i� +) + +589 if� +sock +-> +id�_timeout +>0 && + `time_���d +(sock-> +a�v_time +)>sock->idle_timeout ) + +591 +sock +-> +ev�t +. +ev�ts + = +CP_SOCK_EVENT_IDLE_TIMEOUT +; + +592 + `log_w�n +("sock�[%d] idˁimeou�h���d�nd�dd�؏sk�i�\n", +sock +-> +fd +); + +593 + `log_dbg +("ϡ: %lu��p�d�ime: %lu id��imeout: %lu\n", +sock +-> +a�v_time +, + `time_���d +(sock->a�v_time), sock-> +id�_timeout +); + +594 + `�_fds_add_sock_�sk +( +sock +); + +596 if� +sock +-> +msg_timeout +>0 && sock-> +msg_time +>0 && + `time_���d +(sock->msg_time)>sock->msg_timeout ) + +598 +sock +-> +ev�t +. +ev�ts + = +CP_SOCK_EVENT_MSG_TIMEOUT +; + +599 + `log_w�n +("sock�[%d] mes�g�timeou�h���d�nd�dd�؏sk�i�\n", +sock +-> +fd +); + +600 + `�_fds_add_sock_�sk +( +sock +); + +604 + } +} + +607 + $�_sock_�rm_�l_�sk +( +CP_FDS + * +fds +) + +609 +i +; + +610 +CP_SOCK + * +sock +; + +612 + `log_dbg +("remove�ll�he socket in�ask�ist�ow\n"); + +615 + `�_li�_��y_f�_�ch +( +fds +-> +�sk_��y +, +i +, +sock +) + +618 if( +sock +) + +619 + `�_fds_d�_sock_�sk +( +sock +); + +622 ! + `�_queue_is_em�y +( +fds +-> +ev�t_queue +) ) + +624 + `�_dequeue +( +fds +-> +ev�t_queue +); + +627 + `log_w�n +("remove�ll�he socket in�ask�ist ok\n"); + +630 + } +} + + @cp_fds.h + +14 #i�de� +__CP_FDS_H + + +15 + #__CP_FDS_H + + + ) + +17 + ~<�dio.h +> + +18 + ~<uni�d.h +> + +19 + ~<�dlib.h +> + +20 + ~<��o.h +> + +21 + ~<�r�g.h +> + +23 + ~<sys/��l.h +> + +25 + ~"�_kli�.h +" + +26 + ~"�_logg�.h +" + +27 + ~"�_sock.h +" + +28 + ~"�_queue.h +" + +29 + ~"�_��y.h +" + +31 + #CP_MAX_EVENT_ONCE + 128 + + ) + +32 + #CP_DEF_MAX_EVENTS + 1024 + + ) + +33 + #CP_DEF_FDS_TIMEOUT + 10 + + ) + +35 + #IN_EVENT_LIST + 0 + + ) + +36 + #IN_TASK_LIST + 1 + + ) + +38 + #FLAG_FDS_INIT + (1<<0) + + ) + +39 + #FLAG_FDS_MALLOC + (1<<1) + + ) + +41 + g_CP_SOCK +; + +42 + g_CP_FDS +; + +44 + s_CP_FDS + + +46 + m�ag +; + +47 + m�fd +; + +48 + mtimeout +; + +49 + mmax_ev�t +; + +50 + mev�t_�t +; + +52 +li�_h�d + + m�rv�_li� +; + +53 +li�_h�d + + m���_li� +; + +54 +CP_QUEUE + * + mev�t_queue +; + +55 +CP_ARRAY + * + m�sk_��y +; + +65 } + tCP_FDS +; + +68 +CP_FDS + * +�_fds_�� +(CP_FDS * +fds +, +maxev�ts +, +timeout +); + +70 +�_fds_�rm +( +CP_FDS + * +fds +); + +71 + #�_fds_�rm_��r +( +fds +�{ + `�_fds_�rm +(fds); fds= +NULL +;} + + ) + +74 +�_add_��l_ev�t +( +_CP_SOCK + * +sock +); + +76 +�_mod_��l_ev�t +( +_CP_SOCK + * +sock +, +ev�t +); + +78 +�_d�_��l_ev�t +( +_CP_SOCK + * +sock +); + +82 +�_fds_add_sock_�gi�ry +( +_CP_SOCK + * +sock +); + +84 +�_fds_d�_sock_�gi�ry +( +_CP_SOCK + * +sock +); + +87 +�_fds_add_sock_�sk +( +_CP_SOCK + * +sock +); + +89 +�_fds_d�_sock_�sk +( +_CP_SOCK + * +sock +); + +91 +�_fds_li�_sock_�sk +( +CP_FDS + * +fds +); + +93 * +�_fds_sock_�queue +( +_CP_SOCK + * +sock +); + +94 * +�_fds_sock_rmqueue +( +_CP_SOCK + * +sock +); + +95 * +�_fds_sock_dequeue +( +CP_FDS + * +fds +); + +98 +�_fds_de�roy_sock +( +_CP_SOCK + * +sock +); + +99 + #�_fds_de�roy_sock_��r +( +sock +�{ + `�_fds_de�roy_sock +(sock); sock= +NULL +;} + + ) + +102 +�_fds_d�e�_ev�t +( +CP_FDS + * +fds +); + +104 +�_fds_�oc_ev�t +( +CP_FDS + * +fds +); + +106 +�_sock_d�e�_timeout +( +CP_FDS + * +fds +); + +109 +�_sock_�rm_�rv� +( +_CP_SOCK + * +�rv_sock +); + +110 +�_sock_�rm_�l_�rv� +( +CP_FDS + * +fds +); + +111 +�_sock_�rm_�l_��� +( +CP_FDS + * +fds +); + +112 +�_sock_�rm_�l_�sk +( +CP_FDS + * +fds +); + + @cp_gprs.c + +14 + ~"�_g�s.h +" + +15 + ~"�_h�.h +" + +16 + ~"�_�oc.h +" + +17 + ~"�_gsmmux.h +" + +18 + ~"�91_io�l.h +" + +20 + $��_gsm_modu� +( +MODULE_INFO + * +modu� +) + +22 +i +=0; + +23 +dev�me +[ +DEVNAME_LEN +]; + +25 + `log_�fo +("Initialize GSM module context\n"); + +27 + `mem�t +( +modu� +, 0, (*module)); + +29 +modu� +-> +ev�t + = +REQ_POWER_RESET +; + +31 + `�h�ad_mu�x_�� +(& +modu� +-> +lock +, +NULL +); + +33 if�!( +modu� +-> +gsmp�t += + `comp�t_�� +( +GSM_DATAPORT +, 115200, "8N1N")) ) + +39 +modu� +-> +comp�t_�t + = +MAX_DATAPORT +; + +40 +i +=0; i< +modu� +-> +comp�t_�t +; i++) + +42 + `���tf +( +dev�me +, +DEVNAME_LEN +, "%s%d", +CMUX_DATAPORT +, +i ++ +CMUX_PORT_START_INDEX +); + +43 +modu� +-> +comp�t +[ +i +] = + `comp�t_�� +( +dev�me +, 115200, "8N1N"); + +44 if( +NULL + =� +modu� +-> +comp�t +[ +i +]) + +45 +ERROR +; + +52 +ERROR +: + +53 +i +-- >= 0) + +55 + `comp�t_�rm +( +modu� +-> +comp�t +[ +i +]); + +58 + } +} + +66 + $�o�_gsm_d���t +( +MODULE_INFO + * +modu� +) + +68 +i +; + +70 +i +=0; i< +modu� +-> +comp�t_�t +; i++) + +72 + `log_�ml +("Clo� GPRS d��܈%s=>[fd:%d]\n", +modu� +-> +comp�t +[ +i +]-> +dev_�me +, modu�->comp�t[i]-> +fd +); + +73 + `comp�t_�o� +( +modu� +-> +comp�t +[ +i +]); + +77 + } +} + +84 + $ݒ_gsm_d���t +( +MODULE_INFO + * +modu� +) + +86 +i +, +�tv� + = -1; + +88 +i +=0; i< +modu� +-> +comp�t_�t +; i++) + +90 if�( +�tv� += + `comp�t_ݒ +( +modu� +-> +comp�t +[ +i +])) < 0) + +92 + `log_�r +("O��GPRS d��܈%��u�: %d\n", +modu� +-> +comp�t +[ +i +]-> +dev_�me +, +�tv� +); + +93 +ERROR +; + +95 + `log_�ml +("O��GPRS d���t[%p] %s=>[fd:%d]\n", +modu� +-> +comp�t +, modu�->comp�t[ +i +]-> +dev_�me +, modu�->comp�t[i]-> +fd +); + +100 +ERROR +: + +101 + `�o�_gsm_d���t +( +modu� +); + +102 +�tv� +; + +103 + } +} + +113 +COM_PORT + * + $�loc_gsm_d���t +(* +who +, +MODULE_INFO + * +modu� +) + +115 +lock + = 0; + +116 +i +; + +117 +COM_PORT + * +comp�t + = +NULL +; + +119 if( +lock +) + +120 +NULL +; + +122 +lock + = 1; + +125 +i +=0; i< +modu� +-> +comp�t_�t +; i++) + +127 if( +modu� +-> +comp�t +[ +i +]-> +u�d + !� +YES +) + +129 +comp�t + = +modu� +->comp�t[ +i +]; + +130 +comp�t +-> +u�d + = +YES +; + +135 +lock + = 0; + +137 if( +comp�t +) + +139 + `log_dbg +("%��lo�� GPRS d���t[%d] %s=>[fd:%d] ok\n", +who +, +i +, +comp�t +-> +dev_�me +, comp�t-> +fd +); + +140 +modu� +-> +u�rs +++; + +144 + `log_dbg +("%��lo�� GPRS d��܈�u�\n", +who +); + +148 +comp�t +; + +149 + } +} + +156 + $�_gsm_d���t +(* +who +, +MODULE_INFO + * +modu� +, +COM_PORT + ** +comp�t +) + +158 +i +; + +161 +i +=0; i< +modu� +-> +comp�t_�t +; i++) + +163 if( +modu� +-> +comp�t +[ +i +] == *comport) + +165 + `log_dbg +("%�� GPRS d��܈%s=>[fd:%d]\n", +who +, (* +comp�t +)-> +dev_�me +, (*comp�t)-> +fd +); + +166 +modu� +-> +comp�t +[ +i +]-> +u�d + = +NO +; + +167 +modu� +-> +u�rs +--; + +168 * +comp�t + = +NULL +; + +174 + } +} + +182 + $pow�_�_modu� +( +MODULE_INFO + * +modu� +) + +184 +rv + = 0; + +185 + `log_dbg +("Turn on GPRS module�ow\n"); + +187 if� +ON + =�( +modu� +-> +pwr_��us += + `h�_g�_g�s_pow� +()) ) + +189 +rv + = 0; + +190 + `log_dbg +("GPRS module�lready�ower on\n"); + +191 +��nup +; + +194 if�( +rv += + `h�_tu�_g�s_pow� +( +ON +)�|| ON!= + `h�_g�_g�s_pow� +()) + +196 + `log_�r +("Tu� o�GPRS modu� fa�u�:�v=%d�ow�=%d\n", +rv +, + `h�_g�_g�s_pow� +()); + +197 +rv + = -1; + +198 +��nup +; + +201 + `mi�o_�c�d_��p +(500); + +203 if� + `comp�t_ݒ +( +modu� +-> +gsmp�t +) < 0) + +205 + `log_�r +("O��GSM s���p܈[%s] fa�u�\n", +modu� +-> +gsmp�t +-> +dev_�me +); + +209 if�! + `�cmd_check_pow�_� +( +modu� +-> +gsmp�t +) ) + +211 + `log_�r +("S�d ATE0 check GPRS modu� AT comm�d fa�u�\n", +modu� +-> +gsmp�t +-> +dev_�me +); + +215 + `��ch_gsm0710 +( +modu� +-> +gsmp�t +); + +217 if�0 !� + `ݒ_gsm_d���t +( +modu� +) ) + +219 +rv + = -3; + +220 + `log_�r +("Open GPRS module comport failure\n"); + +221 +��nup +; + +224 +��nup +: + +226 if(! +rv +) + +228 +modu� +-> +�ady + = +MODULE_READY +; + +229 + `log_�ml +("Turn on GPRS module succesfully\n"); + +233 +modu� +-> +�ady + = +NOT_READY +; + +234 + `log_�ml +("Tu� o�GPRS modu� fa�ed,�v=%d\n", +rv +); + +237 +modu� +-> +�ady + = 0!= +rv + ? +NOT_READY + : +MODULE_READY +; + +238 + `mem�t +(&( +modu� +-> +�g +), 0, ( +REGISTER_INFO +)); + +239 +modu� +-> +pwr_��us + = + `h�_g�_g�s_pow� +(); + +241 +rv +; + +242 + } +} + +249 + $pow�_off_modu� +( +MODULE_INFO + * +modu� +) + +251 if� +OFF + =�( +modu� +-> +pwr_��us += + `h�_g�_g�s_pow� +()) ) + +253 + `log_dbg +("GPRS module�lready�ower off\n"); + +257 +modu� +-> +u�rs +) + +259 + `log_w�n +("%d��li�ti� st��u��h�GPRS modu� d���t, wa�����d...\n", +modu� +-> +u�rs +); + +260 + `��p +(1); + +263 + `log_�ml +("Turn off GPRS module�ow\n"); + +264 + `�o�_gsm_d���t +( +modu� +); + +266 + `comp�t_�o� +( +modu� +-> +gsmp�t +); + +267 + `h�_tu�_g�s_pow� +( +OFF +); + +269 +modu� +-> +�ady + = +NOT_READY +; + +270 + `mem�t +(&( +modu� +-> +�g +), 0, ( +REGISTER_INFO +)); + +271 +modu� +-> +pwr_��us + = + `h�_g�_g�s_pow� +(); + +273 + `mi�o_�c�d_��p +(800); + +275 + } +} + +277 + $�t_modu�_ev�t +( +MODULE_INFO + * +modu� +, +�que� +) + +279 + `log_dbg +("S��h�modu˃v���que�[%d]\n", +�que� +); + +280 + `�h�ad_mu�x_lock +(& +modu� +-> +lock +); + +281 +modu� +-> +ev�t + = +�que� +; + +282 + `�h�ad_mu�x_u�ock +(& +modu� +-> +lock +); + +283 + } +} + +290 + $�t_modu�_ev�t_pow� +( +MODULE_INFO + * +modu� +) + +292 +rv + = 0; + +293 +modu� +-> +ev�t +) + +295 +REQ_POWER_ON +: + +296 +rv + = + `pow�_�_modu� +( +modu� +); + +299 +REQ_POWER_OFF +: + +300 +rv + = + `pow�_off_modu� +( +modu� +); + +303 +REQ_POWER_RESET +: + +304 +rv + = + `pow�_off_modu� +( +modu� +); + +305 +rv + = + `pow�_�_modu� +( +modu� +); + +309 if� +rv + ) + +311 + `log_�ml +("Re�ڣ f܁h�GPRS�eque��v��%d fa�u�,�v=%d\n", +modu� +-> +ev�t +, +rv +); + +312 +rv +; + +316 + `log_�ml +("Re�ڣ f܁h�GPRS�eque��v��%d�nd cˬ�hi�ev��ok\n", +modu� +-> +ev�t +); + +317 + `�t_modu�_ev�t +( +modu� +, +REQ_EVENT_NONE +); + +320 + } +} + +323 + $�cmd_��e�_��us +( +MODULE_INFO + * +modu� +) + +325 +COM_PORT + * +comp�t +; + +326 +REGISTER_INFO + * +�g + = &( +modu� +->reg); + +327 * +who + = "atcmd_inspect_status()"; + +329 +��t_time + ; + +332 if( +��t_time + && + `time_���d +(start_time) < 10000) + +337 +��t_time +� + `time_now +(); + +339 +comp�t + = + `�loc_gsm_d���t +( +who +, +modu� +); + +340 if( +NULL + !� +comp�t +) + +342 + `log_dbg +("A�o�d��܈%s=>[fd:%d]\n", +comp�t +-> +dev_�me +, comp�t-> +fd +); + +347 +�g +-> +sig�l + = + `�cmd_check_g�s_sig�l +( +comp�t +); + +349 + `�cmd_check_g�s_lo�ti� +( +comp�t +, & +�g +-> +loc +); + +351 + `log_dbg +("F��d��܈%s=>[fd:%d]\n", +comp�t +-> +dev_�me +, comp�t-> +fd +); + +352 + `�_gsm_d���t +( +who +, +modu� +, & +comp�t +); + +355 + } +} + +364 + $�cmd_check_modu�_�ady +( +COM_PORT + * +comp�t +, +times +) + +366 +rv +; + +367 +�_�t + = 0; + +370 +rv + = + `�cmd_check_�_�ady +( +comp�t +); + +371 if( +rv +) + +372 +��nup +; + +375 +rv + = + `�cmd_check_sim_v�id +( +comp�t +); + +377 +��nup +: + +378 if( +rv +) + +380 if( +�_�t + < +times +) + +382 +�_�t + ++; + +387 +�_�t + = 0; + +393 +�_�t + = 0; + +396 + } +} + +398 + $�cmd_check_pow�_� +( +COM_PORT + * +comp�t +) + +400 +i +, +rv + = 0; + +402 +i +=0; i<10; i++) + +404 if�! + `�cmd_check_�_�ady +( +comp�t +) ) + +406 +rv + = 1; + +411 +rv +; + +412 + } +} + +417 + $�cmd_modu�_�e�t +( +COM_PORT + * +comp�t +) + +419 +�tv� + = 0; + +422 if(0 !�( +�tv� += + `�nd_�cmd_check_ok +( +comp�t +, "AT+COPS=0\r", 3000)) ) + +424 + `log_w�n +("AT+COPS=0 Set Auto Select Carrier: [FAILED]\n"); + +427 + `log_�ml +("AT+COPS=0 Set Auto Select Carrier: [OK]\n"); + +429 +�tv� +; + +430 + } +} + +433 + $�cmd_check_hw�fo +( +COM_PORT + * +comp�t +, +HW_INFO + * +hw +, +times +) + +435 +rv +; + +436 +�_�t + = 0; + +439 +rv + = + `�cmd_check_g�s_�me +( +comp�t +, +hw +-> +mod� +); + +440 if( +rv +) + +441 +��nup +; + +444 +rv + = + `�cmd_check_g�s_v�si� +( +comp�t +, +hw +-> +m�v +); + +445 if( +rv +) + +446 +��nup +; + +449 +rv + = + `�cmd_check_g�s_�mi +( +comp�t +, +hw +-> +�mi +); + +451 +��nup +: + +452 if( +rv +) + +454 if( +�_�t + < +times +) + +456 +�_�t + ++; + +461 +�_�t + = 0; + +467 +�_�t + = 0; + +470 + } +} + +473 + $�cmd_check_�gi� +( +COM_PORT + * +comp�t +, +REGISTER_INFO + * +�g +, +times +) + +475 +rv + = 0; + +476 +�_�t + = 0; + +479 +�g +-> +sig�l + = + `�cmd_check_g�s_sig�l +( +comp�t +); + +480 if( +�g +-> +sig�l +<2 &&�eg->signal>31) + +482 +rv + = -1; + +483 +��nup +; + +487 +�g +-> +ty� + = + `�cmd_check_g�s_�gi�� +( +comp�t +); + +489 if( +REG_HOMEWORK +== +�g +-> +ty� + || +REG_ROAMING +==�eg->type) + +492 + `log_�ml +("SIM card�egister successfully.\n"); + +493 +rv + = 0; + +495 if( +REG_DENIED +== +�g +-> +ty� +) + +498 + `log_�r +("SIM card�egist denied.\n"); + +499 +rv + = -2; + +500 +��nup +; + +504 + `log_�r +("SIM card�egist failure.\n"); + +505 +rv + = -3; + +506 +��nup +; + +509 +rv + = + `�cmd_check_g�s_���r +( +comp�t +, +�g +-> +���r +); + +510 if( +rv +) + +512 +rv + = -4; + +513 + `log_�r +("Check SIM card�crrier failure.\n"); + +514 +��nup +; + +517 +rv + = + `�cmd_check_g�s_mcc_mnc +( +comp�t +, +�g +-> +loc +. +mcc_mnc +); + +518 if( +rv +) + +520 +rv + = -4; + +521 + `log_�r +("Check SIM card�egister MCC-MNC failure\n"); + +522 +��nup +; + +526 +��nup +: + +527 if( +rv +) + +529 if( +�_�t + < +times +) + +531 +�_�t + ++; + +536 +�_�t + = 0; + +542 +�_�t + = 0; + +546 + } +} + +548 + $�cmd_check_�tw�k_�fo +( +COM_PORT + * +comp�t +, +REGISTER_INFO + * +�g +) + +550 +�tv� + = 0; + +553 +�tv� + = + `�cmd_check_g�s_���r +( +comp�t +, +�g +-> +���r +); + +554 if( +�tv� +) -1; + +557 +�tv� + = + `�cmd_check_g�s_lo�ti� +( +comp�t +, &( +�g +-> +loc +)); + +558 if( +�tv� +) -3; + +560 +�tv� +; + +561 + } +} + +564 + $�cmd_check_�ady +( +MODULE_INFO + * +modu� +) + +566 +rv +; + +567 +COM_PORT + * +comp�t +; + +568 * +who + = "atcmd_check_ready()"; + +570 + `log_�ml +("AT command check GPRS�egistry status�ow\n"); + +572 +comp�t + = + `�loc_gsm_d���t +( +who +, +modu� +); + +573 if( +NULL + =� +comp�t +) + +575 + `log_w�n +("A�o�d��܈f� %s(��u�.\n", +__FUNCTION__ +); + +578 + `log_dbg +("A�o�d��܈%s=>[fd:%d]\n", +comp�t +-> +dev_�me +, comp�t-> +fd +); + +580 +modu� +-> +�ady +) + +582 +MODULE_READY +: + +583 +rv + = + `�cmd_check_modu�_�ady +( +comp�t +, 10); + +584 if( +rv + > 0) + +586 + `log_�ml +("GPRS AT command�eady�nd SIM card valid successfully\n"); + +587 +modu� +-> +�ady +++; + +589 if( +rv + == 0) + +591 + `log_�ml +("GPRS AT command�eady�nd SIM card valid check continue...\n"); + +593 if( +rv + < 0) + +595 + `log_�ml +("GPRS AT command�eady�nd SIM card valid check failed\n"); + +596 + `�t_modu�_ev�t +( +modu� +, +REQ_POWER_RESET +); + +600 +CHECK_HWINFO +: + +601 +rv + = + `�cmd_check_hw�fo +( +comp�t +, &( +modu� +-> +hw +), 10); + +602 if( +rv + > 0) + +604 + `log_�ml +("Check�he GPRS Module hardware information successfully\n"); + +605 +modu� +-> +�ady +++; + +607 if( +rv + == 0) + +609 + `log_�ml +("Check�he GPRS Module hardware information continue...\n"); + +611 if( +rv + < 0) + +613 + `log_�ml +("Check�he GPRS Module hardware information failed...\n"); + +614 + `�t_modu�_ev�t +( +modu� +, +REQ_POWER_RESET +); + +618 +CHECK_REGISTRY +: + +619 +rv + = + `�cmd_check_�gi� +( +comp�t +, &( +modu� +-> +�g +), 10); + +620 if( +rv + > 0) + +622 + `log_�ml +("Check�he SIM card�egistry successfully\n"); + +623 +modu� +-> +�ady +++; + +625 if( +rv + == 0) + +627 + `log_�ml +("Check�he SIM card�egistry continue...\n"); + +629 if( +rv + < 0) + +631 + `log_�ml +("Check�he SIM card�egistry failed\n"); + +632 + `�t_modu�_ev�t +( +modu� +, +REQ_POWER_RESET +); + +637 + `�_gsm_d���t +( +who +, +modu� +, & +comp�t +); + +638 +rv +; + +639 + } +} + +646 + $��_th�ad_�rm +(* +th�ad_�g +) + +648 +i +=0; + +649 +MODULE_INFO + * +modu� + = (MODULE_INFO *) +th�ad_�g +; + +651 + `log_�ml +("start�erminate GPRS main(control)�hread\n"); + +653 + `pow�_off_modu� +( +modu� +); + +655 +i +=0; i< +modu� +-> +comp�t_�t +; i++) + +657 + `comp�t_�rm +( +modu� +-> +comp�t +[ +i +]); + +659 + } +} + +668 + $��_th�ad_��t +(* +th�ad_�g +) + +670 +MODULE_INFO + * +modu� + = (MODULE_INFO *) +th�ad_�g +; + +672 + `log_�ml +("GPRS�ower control�hread start�unning\n"); + +674 ! +g_�_sig�l +. +�� + ) + +677 if( +modu� +-> +ev�t +) + +679 + `�t_modu�_ev�t_pow� +( +modu� +); + +682 if( +ALL_READY + =� +modu� +-> +�ady +) + +686 + `�cmd_��e�_��us +( +modu� +); + +692 if� +ON + =� +modu� +-> +pwr_��us + ) + +694 + `�cmd_check_�ady +( +modu� +); + +698 + `��p +(1); + +702 + `��_th�ad_�rm +( +th�ad_�g +); + +705 + } +} + + @cp_gprs.h + +14 #i�de� +__CP_GPRS_H + + +15 + #__CP_GPRS_H + + + ) + +17 + ~<�dio.h +> + +18 + ~<�dlib.h +> + +19 + ~<uni�d.h +> + +20 + ~<�h�ad.h +> + +22 + ~"�_comm�.h +" + +23 + ~"�_logg�.h +" + +24 + ~"�_comp�t.h +" + +25 + ~"�_�cmd.h +" + +26 + ~"�_time.h +" + +27 + ~"�_h�.h +" + +29 + #YES + 1 + + ) + +30 + #NO + 0 + + ) + +32 + #GSM_CTRLPORT + "/dev/g�s" + + ) + +33 + #GSM_DATAPORT + "/dev/�yS2" + + ) + +35 + #MAX_DATAPORT + 4 + + ) + +36 + #CMUX_PORT_START_INDEX + 1 + + ) + +37 + #CMUX_DATAPORT + "/dev/gsm�y" + + ) + +42 + mREQ_EVENT_NONE + = 0, + +43 + mREQ_POWER_OFF +, + +44 + mREQ_POWER_ON +, + +45 + mREQ_POWER_RESET +, + +51 + mNOT_READY +, + +52 + mMODULE_READY +, + +53 + mCHECK_HWINFO +, + +54 + mCHECK_REGISTRY +, + +55 + mALL_READY +, + +61 + mREG_UNREGIST + = 0, + +62 + mREG_HOMEWORK +, + +63 + mREG_SEARCHING +, + +64 + mREG_DENIED +, + +65 + mREG_UNKNOW +, + +66 + mREG_ROAMING +, + +70 + #MODE_AUTO + 2 + + ) + +71 + #MODE_GSM + 13 + + ) + +72 + #MODE_WCDMA + 14 + + ) + +77 + mNS_NONE + = 0, + +78 + mNS_GSM +, + +79 + mNS_GPRS +, + +80 + mNS_EGPRS +, + +81 + mNS_WCDMA +, + +82 + mNS_HSDPA +, + +83 + mNS_HSUPA +, + +84 + mNS_HSPA +, + +87 + s__MODULE_INFO + + +89 + mu�rs +; + +90 + m�ady +; + +91 + mev�t +; + +92 + mpwr_��us +; + +94 +�h�ad_mu�x_t + + mlock +; + +96 +HW_INFO + + mhw +; + +97 +REGISTER_INFO + + m�g +; + +99 +COM_PORT + * + mgsmp�t +; + +101 + mcomp�t_�t +; + +102 +COM_PORT + * + mcomp�t +[ +MAX_DATAPORT +]; + +103 } + tMODULE_INFO +; + +106 +��_gsm_modu� +( +MODULE_INFO + * +modu� +); + +107 +ݒ_gsm_d���t +( +MODULE_INFO + * +modu� +); + +108 +�o�_gsm_d���t +( +MODULE_INFO + * +modu� +); + +109 +COM_PORT + * +�loc_gsm_d���t +(* +who +, +MODULE_INFO + * +modu� +); + +110 +�_gsm_d���t +(* +who +, +MODULE_INFO + * +modu� +, +COM_PORT + ** +comp�t +); + +112 +pow�_�_modu� +( +MODULE_INFO + * +modu� +); + +113 +pow�_off_modu� +( +MODULE_INFO + * +modu� +); + +115 +�cmd_check_�ady +( +MODULE_INFO + * +modu� +); + +116 +�cmd_��e�_��us +( +MODULE_INFO + * +modu� +); + +117 +�cmd_check_pow�_� +( +COM_PORT + * +comp�t +); + +120 +�t_modu�_ev�t +( +MODULE_INFO + * +modu� +, +�que� +); + +121 +�t_modu�_ev�t_pow� +( +MODULE_INFO + * +modu� +); + +123 +��_th�ad_��t +(* +th�ad_�g +); + +124 +��_th�ad_�rm +(* +th�ad_�g +); + + @cp_gsmmux.c + +15 + ~<�dlib.h +> + +16 + ~<�dio.h +> + +17 + ~<�r�g.h +> + +18 + ~<sys/ty�s.h +> + +19 + ~<sys/��.h +> + +20 + ~<f��.h +> + +21 + ~<sys/io�l.h +> + +22 + ~<��o.h +> + +23 + ~<�rmios.h +> + +24 + ~<uni�d.h +> + +26 + ~"�_logg�.h +" + +27 + ~"�_gsmmux.h +" + +29 + $��ch_gsm0710 +( +COM_PORT + * +comp�t +) + +31 +ldisc + = +N_GSM0710 +; + +32 +gsm_c�fig + +c +; + +34 + `log_�ml +("A�ach GMUX o�GSM�܈\"%s\"�ow\n", +comp�t +-> +dev_�me +); + +36 if� + `�nd_�cmd_check_ok +( +comp�t +, "AT+CMUX=0\r", 3000) ) + +38 + `log_�r +("S�d \"AT+CMUX=0\" comm�d check %��u�\n", +comp�t +-> +dev_�me +); + +42 i�( + `io�l +( +comp�t +-> +fd +, +TIOCSETD +, & +ldisc +) < 0) + +44 + `log_�r +("C��ه�ach N_GSM0710��comp܈\"%s\" \n", +comp�t +-> +dev_�me +); + +49 + `io�l +( +comp�t +-> +fd +, +GSMIOC_GETCONF +, & +c +); + +52 +c +. +���t� + = 1; + +53 +c +. +��psu�ti� + = 0; + +56 +c +. +mru + = 127; + +57 +c +. +mtu + = 127; + +60 + `io�l +( +comp�t +-> +fd +, +GSMIOC_SETCONF +, & +c +); + +62 + `log_�ml +("A�ach GMUX o�GSM�܈\"%s\" OK\n", +comp�t +-> +dev_�me +); + +63 + `��p +(1); + +66 + } +} + +70 + $d�ach_gsm0710 +( +COM_PORT + * +comp�t +) + +72 + `log_�ml +("D��ch GMUX o�GSM�܈\"%s\"�ow\n", +comp�t +-> +dev_�me +); + +74 + } +} + + @cp_gsmmux.h + +15 #i�de� +__CP_GSMMUX_H_ + + +16 + #__CP_GSMMUX_H_ + + + ) + +18 + ~"�_�cmd.h +" + +20 + sgsm_c�fig + + +22 + mad�ti� +; + +23 + m��psu�ti� +; + +24 + m���t� +; + +25 + mt1 +; + +26 + mt2 +; + +27 + mt3 +; + +28 + mn2 +; + +29 + mmru +; + +30 + mmtu +; + +31 + mk +; + +32 + mi +; + +33 + munu�d +[8]; + +36 + #GSMIOC_GETCONF + + `_IOR +('G', 0, +gsm_c�fig +) + + ) + +37 + #GSMIOC_SETCONF + + `_IOW +('G', 1, +gsm_c�fig +) + + ) + +39 + #N_GSM0710 + 21 + + ) + +41 +��ch_gsm0710 +( +COM_PORT + * +comp�t +); + + @cp_hal.c + +15 + ~"�_h�.h +" + +17 + $h�_tu�_�d_� +( +�d +) + +19 +fd + = -1; + +21 if(( +fd += + `ݒ +( +DEV_LED_PATH +, +O_RDWR +)) < 0) + +26 + `io�l +( +fd +, +LED_ON +, +�d +); + +28 + `�o� +( +fd +); + +30 + } +} + +32 + $h�_tu�_�d_off +( +�d +) + +34 +fd + = -1; + +36 if(( +fd += + `ݒ +( +DEV_LED_PATH +, +O_RDWR +)) < 0) + +41 + `io�l +( +fd +, +LED_OFF +, +�d +); + +43 + `�o� +( +fd +); + +45 + } +} + +47 + $h�_tu�_�d_bl�k +( +�d +, +mode +) + +49 +fd + = -1; + +50 +�g + = +�d +|( +mode +<<3); + +52 if(( +fd += + `ݒ +( +DEV_LED_PATH +, +O_RDWR +)) < 0) + +57 + `io�l +( +fd +, +LED_BLINK +, +�g +); + +59 + `�o� +( +fd +); + +61 + } +} + +68 + $h�_tu�_g�s_pow� +( +��us +) + +70 +fd + = -1; + +71 +rv + = 0; + +73 if(( +fd += + `ݒ +( +DEV_GSM_PATH +, +O_RDWR +)) < 0) + +78 if�( +rv += + `io�l +( +fd +, +GSM_SET_POWER +, +��us +)) < 0) + +80 + `�o� +( +fd +); + +84 + `�o� +( +fd +); + +85 +rv +; + +86 + } +} + +92 + $h�_g�_g�s_pow� +() + +94 +fd + = -1; + +95 +��us +; + +97 if(( +fd += + `ݒ +( +DEV_GSM_PATH +, +O_RDWR +)) < 0) + +102 if�( +��us += + `io�l +( +fd +, +GSM_GET_POWER +, 0)) < 0) + +104 + `�o� +( +fd +); + +108 + `�o� +( +fd +); + +109 +��us +; + +110 + } +} + +116 + $h�_tu�_gps_pow� +( +��us +) + +118 +fd + = -1; + +119 +rv + = 0; + +121 if(( +fd += + `ݒ +( +DEV_GPS_PATH +, +O_RDWR +)) < 0) + +126 if�( +rv += + `io�l +( +fd +, +GPS_SET_POWER +, +��us +)) < 0) + +128 + `�o� +( +fd +); + +132 + `�o� +( +fd +); + +133 +rv +; + +134 + } +} + +140 + $h�_g�_gps_pow� +() + +142 +fd + = -1; + +143 +��us +; + +145 if(( +fd += + `ݒ +( +DEV_GPS_PATH +, +O_RDWR +)) < 0) + +150 if�( +��us += + `io�l +( +fd +, +GPS_GET_POWER +, 0)) < 0) + +152 + `�o� +( +fd +); + +156 + `�o� +( +fd +); + +157 +��us +; + +158 + } +} + +164 + $h�_��t_zigb� +() + +166 +fd + = -1; + +168 if(( +fd += + `ݒ +( +DEV_ZIGBEE_PATH +, +O_RDWR +)) < 0) + +173 if� + `io�l +( +fd +, +ZIGBEE_RESET +, 0) < 0) + +175 + `�o� +( +fd +); + +179 + `�o� +( +fd +); + +181 + } +} + +186 + $h�_g�_zigb�_��us +() + +188 +fd + = -1; + +189 +��us +; + +191 if(( +fd += + `ݒ +( +DEV_ZIGBEE_PATH +, +O_RDWR +)) < 0) + +196 if�( +��us += + `io�l +( +fd +, +ZIGBEE_STATUS +, 0)) < 0) + +198 + `�o� +( +fd +); + +202 + `�o� +( +fd +); + +203 +��us +; + +204 + } +} + +212 + $h�_�t_gmtube +( +��us +) + +214 +fd + = -1; + +215 +do� + = 0; + +217 if(( +fd += + `ݒ +( +DEV_GMTUBE_PATH +, +O_RDWR +)) < 0) + +222 if�( +do� += + `io�l +( +fd +, +GM_SET_MEASURE_RADI +, +��us +)) < 0) + +224 + `�o� +( +fd +); + +228 + `�o� +( +fd +); + +229 +do� +; + +230 + } +} + +238 + $h�_g�_gmtube_do� +() + +240 +fd + = -1; + +241 +do� + = 0; + +243 if(( +fd += + `ݒ +( +DEV_GMTUBE_PATH +, +O_RDWR +)) < 0) + +248 if�( +do� += + `io�l +( +fd +, +GM_GET_MEASURE_DOSE +, 0)) < 0) + +250 + `�o� +( +fd +); + +254 + `�o� +( +fd +); + +255 +do� +; + +256 + } +} + + @cp_hal.h + +13 #i�de� +__CP_HAL_H + + +14 + #__CP_HAL_H + + + ) + +16 + ~<uni�d.h +> + +17 + ~<�dio.h +> + +18 + ~<�dlib.h +> + +19 + ~<�r�g.h +> + +20 + ~<��o.h +> + +21 + ~<f��.h +> + +22 + ~<sys/ty�s.h +> + +23 + ~<sys/��.h +> + +25 + ~"�91_io�l.h +" + +27 + #DEV_LED_PATH + "/dev/�d" + + ) + +28 + #DEV_GSM_PATH + "/dev/g�s" + + ) + +29 + #DEV_GPS_PATH + "/dev/gps" + + ) + +30 + #DEV_ZIGBEE_PATH + "/dev/zigb�" + + ) + +31 + #DEV_GMTUBE_PATH + "/dev/gmtube" + + ) + +33 + #OFF + 0 + + ) + +34 + #ON + 1 + + ) + +35 + #BLINK + 2 + + ) + +36 + #RESET + 2 + + ) + +38 + #MODE_SLOW + 0 + + ) + +39 + #MODE_FAST + 1 + + ) + +41 + #START + 1 + + ) + +42 + #STOP + 0 + + ) + +44 + #LED_SYS + 0 + + ) + +46 +h�_tu�_�d_� +( +�d +); + +47 +h�_tu�_�d_off +( +�d +); + +48 +h�_tu�_�d_bl�k +( +�d +, +mode +); + +50 +h�_tu�_g�s_pow� +( +��us +); + +51 +h�_g�_g�s_pow� +(); + +53 +h�_tu�_gps_pow� +( +��us +); + +54 +h�_g�_gps_pow� +(); + + @cp_iniparser.c + +10 + ~<�y�.h +> + +11 + ~"�_����r.h +" + +14 + #ASCIILINESZ + (1024) + + ) + +15 + #INI_INVALID_KEY + ((*)-1) + + ) + +23 + e_l�e_��us_ + { + +24 + mLINE_UNPROCESSED +, + +25 + mLINE_ERROR +, + +26 + mLINE_EMPTY +, + +27 + mLINE_COMMENT +, + +28 + mLINE_SECTION +, + +29 + mLINE_VALUE + + +30 } + tl�e_��us + ; + +44 * + $��wc +(cڡ * +s +) + +46 +l +[ +ASCIILINESZ ++1]; + +47 +i + ; + +49 i�( +s +== +NULL +) NULL ; + +50 + `mem�t +( +l +, 0, +ASCIILINESZ ++1); + +51 +i +=0 ; + +52 +s +[ +i +] && i< +ASCIILINESZ +) { + +53 +l +[ +i +] = () + `t�ow� +(() +s +[i]); + +54 +i +++ ; + +56 +l +[ +ASCIILINESZ +]=()0; + +57 +l + ; + +58 + } +} + +74 * + $�r�r� +(cڡ * +s +) + +76 +l +[ +ASCIILINESZ ++1]; + +77 * +ϡ + ; + +79 i�( +s +== +NULL +) NULL ; + +81 + `is�a� +(()* +s +) && *s) s++; + +82 + `mem�t +( +l +, 0, +ASCIILINESZ ++1); + +83 + `�r�y +( +l +, +s +); + +84 +ϡ + = +l + + + `��� +(l); + +85 +ϡ + > +l +) { + +86 i�(! + `is�a� +(()*( +ϡ +-1))) + +88 +ϡ + -- ; + +90 * +ϡ + = ()0; + +91 (*) +l + ; + +92 + } +} + +112 + $����r_g�n�c +( +di�iڬy + * +d +) + +114 +i + ; + +115 +n�c + ; + +117 i�( +d +== +NULL +) -1 ; + +118 +n�c +=0 ; + +119 +i +=0 ; i< +d +-> +size + ; i++) { + +120 i�( +d +-> +key +[ +i +]== +NULL +) + +122 i�( + `�rchr +( +d +-> +key +[ +i +], ':')== +NULL +) { + +123 +n�c + ++ ; + +126 +n�c + ; + +127 + } +} + +143 * + $����r_g���ame +( +di�iڬy + * +d +, +n +) + +145 +i + ; + +146 +found�c + ; + +148 i�( +d +== +NULL + || +n +<0) NULL ; + +149 +found�c +=0 ; + +150 +i +=0 ; i< +d +-> +size + ; i++) { + +151 i�( +d +-> +key +[ +i +]== +NULL +) + +153 i�( + `�rchr +( +d +-> +key +[ +i +], ':')== +NULL +) { + +154 +found�c +++ ; + +155 i�( +found�c +> +n +) + +159 i�( +found�c +<= +n +) { + +160 +NULL + ; + +162 +d +-> +key +[ +i +] ; + +163 + } +} + +178 + $����r_dump +( +di�iڬy + * +d +, +FILE + * +f +) + +180 +i + ; + +182 i�( +d +== +NULL + || +f +==NULL) ; + +183 +i +=0 ; i< +d +-> +size + ; i++) { + +184 i�( +d +-> +key +[ +i +]== +NULL +) + +186 i�( +d +-> +v� +[ +i +]!= +NULL +) { + +187 + `�r�tf +( +f +, "[%s]=[%s]\n", +d +-> +key +[ +i +], d-> +v� +[i]); + +189 + `�r�tf +( +f +, "[%s]=UNDEF\n", +d +-> +key +[ +i +]); + +193 + } +} + +206 + $����r_dump_�i +( +di�iڬy + * +d +, +FILE + * +f +) + +208 +i + ; + +209 +n�c + ; + +210 * +��ame + ; + +212 i�( +d +== +NULL + || +f +==NULL) ; + +214 +n�c + = + `����r_g�n�c +( +d +); + +215 i�( +n�c +<1) { + +217 +i +=0 ; i< +d +-> +size + ; i++) { + +218 i�( +d +-> +key +[ +i +]== +NULL +) + +220 + `�r�tf +( +f +, "%��%s\n", +d +-> +key +[ +i +], d-> +v� +[i]); + +224 +i +=0 ; i< +n�c + ; i++) { + +225 +��ame + = + `����r_g���ame +( +d +, +i +) ; + +226 + `����r_dump��i�_�i +( +d +, +��ame +, +f +) ; + +228 + `�r�tf +( +f +, "\n"); + +230 + } +} + +244 + $����r_dump��i�_�i +( +di�iڬy + * +d +, * +s +, +FILE + * +f +) + +246 +j + ; + +247 +keym +[ +ASCIILINESZ ++1]; + +248 +��� + ; + +250 i�( +d +== +NULL + || +f +==NULL) ; + +251 i�(! + `����r_f�d_��y +( +d +, +s +)) ; + +253 +��� + = () + `��� +( +s +); + +254 + `�r�tf +( +f +, "\n[%s]\n", +s +); + +255 + `�r�tf +( +keym +, "%s:", +s +); + +256 +j +=0 ; j< +d +-> +size + ; j++) { + +257 i�( +d +-> +key +[ +j +]== +NULL +) + +259 i�(! + `��cmp +( +d +-> +key +[ +j +], +keym +, +��� ++1)) { + +260 + `�r�tf +( +f +, + +262 +d +-> +key +[ +j +]+ +��� ++1, + +263 +d +-> +v� +[ +j +] ? d->val[j] : ""); + +266 + `�r�tf +( +f +, "\n"); + +268 + } +} + +278 + $����r_g���keys +( +di�iڬy + * +d +, * +s +) + +280 +��� +, +nkeys + ; + +281 +keym +[ +ASCIILINESZ ++1]; + +282 +j + ; + +284 +nkeys + = 0; + +286 i�( +d +== +NULL +� +nkeys +; + +287 i�(! + `����r_f�d_��y +( +d +, +s +)� +nkeys +; + +289 +��� + = () + `��� +( +s +); + +290 + `�r�tf +( +keym +, "%s:", +s +); + +292 +j +=0 ; j< +d +-> +size + ; j++) { + +293 i�( +d +-> +key +[ +j +]== +NULL +) + +295 i�(! + `��cmp +( +d +-> +key +[ +j +], +keym +, +��� ++1)) + +296 +nkeys +++; + +299 +nkeys +; + +301 + } +} + +317 ** + $����r_g��ckeys +( +di�iڬy + * +d +, * +s +) + +320 ** +keys +; + +322 +i +, +j + ; + +323 +keym +[ +ASCIILINESZ ++1]; + +324 +��� +, +nkeys + ; + +326 +keys + = +NULL +; + +328 i�( +d +== +NULL +� +keys +; + +329 i�(! + `����r_f�d_��y +( +d +, +s +)� +keys +; + +331 +nkeys + = + `����r_g���keys +( +d +, +s +); + +333 +keys + = (**� + `m�loc +( +nkeys +*(*)); + +335 +��� + = () + `��� +( +s +); + +336 + `�r�tf +( +keym +, "%s:", +s +); + +338 +i + = 0; + +340 +j +=0 ; j< +d +-> +size + ; j++) { + +341 i�( +d +-> +key +[ +j +]== +NULL +) + +343 i�(! + `��cmp +( +d +-> +key +[ +j +], +keym +, +��� ++1)) { + +344 +keys +[ +i +] = +d +-> +key +[ +j +]; + +345 +i +++; + +349 +keys +; + +351 + } +} + +368 * + $����r_g��r�g +( +di�iڬy + * +d +, cڡ * +key +, * +def +) + +370 * +lc_key + ; + +371 * +sv� + ; + +373 i�( +d +== +NULL + || +key +==NULL) + +374 +def + ; + +376 +lc_key + = + `��wc +( +key +); + +377 +sv� + = + `di�iڬy_g� +( +d +, +lc_key +, +def +); + +378 +sv� + ; + +379 + } +} + +408 + $����r_g��t +( +di�iڬy + * +d +, cڡ * +key +, +n�found +) + +410 * +�r + ; + +412 +�r + = + `����r_g��r�g +( +d +, +key +, +INI_INVALID_KEY +); + +413 i�( +�r +== +INI_INVALID_KEY +� +n�found + ; + +414 () + `��� +( +�r +, +NULL +, 0); + +415 + } +} + +417 + $����r_g�l�g +( +di�iڬy + * +d +, cڡ * +key +, +n�found +) + +419 * +�r + ; + +421 +�r + = + `����r_g��r�g +( +d +, +key +, +INI_INVALID_KEY +); + +422 i�( +�r +== +INI_INVALID_KEY +� +n�found + ; + +423 + `��� +( +�r +, +NULL +, 0); + +424 + } +} + +438 + $����r_g�doub� +( +di�iڬy + * +d +, cڡ * +key +, +n�found +) + +440 * +�r + ; + +442 +�r + = + `����r_g��r�g +( +d +, +key +, +INI_INVALID_KEY +); + +443 i�( +�r +== +INI_INVALID_KEY +� +n�found + ; + +444 + `�of +( +�r +); + +445 + } +} + +479 + $����r_g�boޗn +( +di�iڬy + * +d +, cڡ * +key +, +n�found +) + +481 * +c + ; + +482 +�t + ; + +484 +c + = + `����r_g��r�g +( +d +, +key +, +INI_INVALID_KEY +); + +485 i�( +c +== +INI_INVALID_KEY +� +n�found + ; + +486 i�( +c +[0]=='y' || c[0]=='Y' || c[0]=='1' || c[0]=='t' || c[0]=='T') { + +487 +�t + = 1 ; + +488 } i�( +c +[0]=='n' || c[0]=='N' || c[0]=='0' || c[0]=='f' || c[0]=='F') { + +489 +�t + = 0 ; + +491 +�t + = +n�found + ; + +493 +�t +; + +494 + } +} + +508 + $����r_f�d_��y +( + +509 +di�iڬy + * +�i +, + +510 cڡ * +��y + + +513 +found +=0 ; + +514 i�( + `����r_g��r�g +( +�i +, +��y +, +INI_INVALID_KEY +)!=INI_INVALID_KEY) { + +515 +found + = 1 ; + +517 +found + ; + +518 + } +} + +533 + $����r_�t +( +di�iڬy + * +�i +, cڡ * +��y +, cڡ * +v� +) + +535 + `di�iڬy_�t +( +�i +, + `��wc +( +��y +), +v� +) ; + +536 + } +} + +548 + $����r_un�t +( +di�iڬy + * +�i +, cڡ * +��y +) + +550 + `di�iڬy_un�t +( +�i +, + `��wc +( +��y +)); + +551 + } +} + +563 +l�e_��us + + $����r_l�e +( + +564 * +�put_l�e +, + +565 * +��i� +, + +566 * +key +, + +567 * +v�ue +) + +569 +l�e_��us + +�a + ; + +570 +l�e +[ +ASCIILINESZ ++1]; + +571 +��_l�e +[ +ASCIILINESZ ++1]; + +572 +�n +, +off�t + ; + +574 + `�r�y +( +l�e +, + `�r�r� +( +�put_l�e +)); + +575 +�n + = () + `��� +( +l�e +); + +577 +�a + = +LINE_UNPROCESSED + ; + +578 i�( +�n +<1) { + +580 +�a + = +LINE_EMPTY + ; + +581 + `mem�t +( +�put_l�e +, 0, +�n +); + +582 } i�( +l�e +[0]=='#' ||�ine[0]==';') { + +584 +�a + = +LINE_COMMENT + ; + +585 + `mem�t +( +�put_l�e +, 0, +�n +); + +586 } i�( +l�e +[0]=='[') { + +588 + `ss�nf +( +l�e +, "[%[^]]", +��i� +); + +589 + `�r�y +( +��i� +, + `�r�r� +(section)); + +590 + `�r�y +( +��i� +, + `��wc +(section)); + +593 +off�t + = + `��� +( +��i� +) + 2; + +594 + `�r�y +� +��_l�e +, + `�r�r� +(&( +l�e +[ +off�t +])) ); + +595 + `�r�y +� +��_l�e +, + `�r�r� +(left_line)); + +597 if� + `��� +( +��_l�e +) > 0) + +599 + `�r�y +( +�put_l�e +, +��_l�e +); + +600 + `�r�t +( +�put_l�e +, "\n"); + +604 + `mem�t +( +�put_l�e +, 0, +�n +); + +606 +�a + = +LINE_SECTION + ; + +607 } i�( + `ss�nf + ( +l�e +, "%[^=] = \"%[^\"]\"", +key +, +v�ue +) == 2 + +608 || + `ss�nf + ( +l�e +, "%[^=] = '%[^\']'", +key +, +v�ue +) == 2 + +609 || + `ss�nf + ( +l�e +, "%[^=] = %[^;#]", +key +, +v�ue +) == 2) { + +610 * +�r + = +NULL +; + +613 + `�r�y +( +key +, + `�r�r� +(key)); + +614 + `�r�y +( +key +, + `��wc +(key)); + +615 + `�r�y +( +v�ue +, + `�r�r� +(value)); + +620 i�(! + `��cmp +( +v�ue +, "\"\"", 2) || (!strncmp(value, "''", 2)) ) { + +621 +v�ue +[0]=0 ; + +624 +�r + = + `�rchr +( +l�e +, '='); + +625 if('\''==*( +�r ++1) || '\"'==*(ptr+1)) + +627 +off�t + = + `��� +( +key +)+���( +v�ue +) + 1 + 2; + +631 +off�t + = + `��� +( +key +)+���( +v�ue +) + 1; + +633 + `�r�y +� +��_l�e +, + `�r�r� +(&( +l�e +[ +off�t +])) ); + +635 if� + `��� +( +��_l�e +) > 0) + +637 + `�r�y +( +�put_l�e +, +��_l�e +); + +638 + `�r�t +( +�put_l�e +, "\n"); + +642 + `mem�t +( +�put_l�e +, 0, +�n +); + +644 +�a + = +LINE_VALUE + ; + +645 } i�( + `ss�nf +( +l�e +, "%[^=] = %[;#]", +key +, +v�ue +)==2 + +646 || + `ss�nf +( +l�e +, "%[^=] %[=]", +key +, +v�ue +) == 2) { + +653 + `�r�y +( +key +, + `�r�r� +(key)); + +654 + `�r�y +( +key +, + `��wc +(key)); + +655 +v�ue +[0]=0 ; + +656 +�a + = +LINE_VALUE + ; + +659 +�a + = +LINE_ERROR + ; + +660 + `mem�t +( +�put_l�e +, 0, +�n +); + +662 +�a + ; + +663 + } +} + +679 +di�iڬy + * + $����r_l�d +(cڡ * +��ame +) + +681 +FILE + * +� + ; + +683 +l�e + [ +ASCIILINESZ ++1] ; + +684 +��i� + [ +ASCIILINESZ ++1] ; + +685 +key + [ +ASCIILINESZ ++1] ; + +686 +tmp + [ +ASCIILINESZ ++1] ; + +687 +v� + [ +ASCIILINESZ ++1] ; + +689 +ϡ +=0 ; + +690 +�n + ; + +691 +l��o +=0 ; + +692 +�rs +=0; + +694 +di�iڬy + * +di� + ; + +696 i�(( +� += + `fݒ +( +��ame +, "r"))== +NULL +) { + +697 + `�r�tf +( +�d�r +, "����r: c�n� o��%s\n", +��ame +); + +698 +NULL + ; + +701 +di� + = + `di�iڬy_�w +(0) ; + +702 i�(! +di� +) { + +703 + `f�o� +( +� +); + +704 +NULL + ; + +707 + `mem�t +( +l�e +, 0, +ASCIILINESZ +); + +708 + `mem�t +( +��i� +, 0, +ASCIILINESZ +); + +709 + `mem�t +( +key +, 0, +ASCIILINESZ +); + +710 + `mem�t +( +v� +, 0, +ASCIILINESZ +); + +711 +ϡ +=0 ; + +713 + `fg�s +( +l�e ++ +ϡ +, +ASCIILINESZ +-ϡ, +� +)!= +NULL +) { + +714 +l��o +++ ; + +715 +CONTINUE_PARSER +: + +716 +�n + = () + `��� +( +l�e +)-1; + +717 i�( +�n +==0) + +720 i�( +l�e +[ +�n +]!='\n') { + +721 + `�r�tf +( +�d�r +, + +723 +��ame +, + +724 +l��o +); + +725 + `di�iڬy_d� +( +di� +); + +726 + `f�o� +( +� +); + +727 +NULL + ; + +730 ( +�n +>=0) && + +731 (( +l�e +[ +�n +]=='\n'�|| ( + `is�a� +(line[len])))) { + +732 +l�e +[ +�n +]=0 ; + +733 +�n +-- ; + +736 i�( +l�e +[ +�n +]=='\\') { + +738 +ϡ += +�n + ; + +741 +ϡ +=0 ; + +744 + `����r_l�e +( +l�e +, +��i� +, +key +, +v� +) ) { + +745 +LINE_EMPTY +: + +746 +LINE_COMMENT +: + +749 +LINE_SECTION +: + +750 +�rs + = + `di�iڬy_�t +( +di� +, +��i� +, +NULL +); + +753 +LINE_VALUE +: + +754 + `�r�tf +( +tmp +, "%s:%s", +��i� +, +key +); + +755 +�rs + = + `di�iڬy_�t +( +di� +, +tmp +, +v� +) ; + +758 +LINE_ERROR +: + +759 + `�r�tf +( +�d�r +, "iniparser: syntax�rror in %s (%d):\n", + +760 +��ame +, + +761 +l��o +); + +762 + `�r�tf +( +�d�r +, "-> %s\n", +l�e +); + +763 +�rs +++ ; + +770 if� + `��� +( +l�e +) > 0) + +772 +CONTINUE_PARSER +; + +775 + `mem�t +( +l�e +, 0, +ASCIILINESZ +); + +776 +ϡ +=0; + +777 i�( +�rs +<0) { + +778 + `�r�tf +( +�d�r +, "iniparser: memory�llocation failure\n"); + +782 i�( +�rs +) { + +783 + `di�iڬy_d� +( +di� +); + +784 +di� + = +NULL + ; + +786 + `f�o� +( +� +); + +787 +di� + ; + +788 + } +} + +802 + $����r_�di� +( +di�iڬy + * +d +) + +804 + `di�iڬy_d� +( +d +); + +805 + } +} + + @cp_iniparser.h + +10 #i�de� +_CP_INIPARSER_H_ + + +11 + #_CP_INIPARSER_H_ + + + ) + +17 + ~<�dio.h +> + +18 + ~<�dlib.h +> + +19 + ~<�r�g.h +> + +28 + ~"�_di�iڬy.h +" + +49 +����r_g�n�c +( +di�iڬy + * +d +); + +67 * +����r_g���ame +( +di�iڬy + * +d +, +n +); + +82 +����r_dump_�i +( +di�iڬy + * +d +, +FILE + * +f +); + +97 +����r_dump��i�_�i +( +di�iڬy + * +d +, * +s +, +FILE + * +f +); + +112 +����r_dump +( +di�iڬy + * +d +, +FILE + * +f +); + +122 +����r_g���keys +( +di�iڬy + * +d +, * +s +); + +138 ** +����r_g��ckeys +( +di�iڬy + * +d +, * +s +); + +155 * +����r_g��r�g +( +di�iڬy + * +d +, cڡ * +key +, * +def +); + +184 +����r_g��t +( +di�iڬy + * +d +, cڡ * +key +, +n�found +); + +185 +����r_g�l�g +( +di�iڬy + * +d +, cڡ * +key +, +n�found +); + +200 +����r_g�doub� +( +di�iڬy + * +d +, cڡ * +key +, +n�found +); + +234 +����r_g�boޗn +( +di�iڬy + * +d +, cڡ * +key +, +n�found +); + +250 +����r_�t +( +di�iڬy + * +�i +, cڡ * +��y +, cڡ * +v� +); + +263 +����r_un�t +( +di�iڬy + * +�i +, cڡ * +��y +); + +277 +����r_f�d_��y +( +di�iڬy + * +�i +, cڡ * +��y +) ; + +293 +di�iڬy + * +����r_l�d +(cڡ * +��ame +); + +306 +����r_�di� +( +di�iڬy + * +d +); + + @cp_klist.h + +14 #i�de� +_LINUX_LIST_H + + +15 + #_LINUX_LIST_H + + + ) + +17 + ~<l�ux/�ddef.h +> + +27 #unde� +off�tof + + +28 + #off�tof +( +TYPE +, +MEMBER +�(( +size_t +�&((TYPE *)0)->MEMBER) + + ) + +29 + #cڏ��_of +( +�r +, +ty� +, +memb� +) ({ \ + +30 cڡ + `ty�of +�(( +ty� + *)0)-> +memb� + ) * +__m�r + = ( +�r +); \ + +31 ( +ty� + *)�(*) +__m�r + - + `off�tof +�y�, +memb� +�);}) + + ) + +39 #ifde� +CONFIG_ILLEGAL_POINTER_VALUE + + +40 + #POISON_POINTER_DELTA + + `_AC +( +CONFIG_ILLEGAL_POINTER_VALUE +, +UL +) + + ) + +42 + #POISON_POINTER_DELTA + 0 + + ) + +50 + #LIST_POISON1 + ((*�0x00100100 + +POISON_POINTER_DELTA +) + + ) + +51 + #LIST_POISON2 + ((*�0x00200200 + +POISON_POINTER_DELTA +) + + ) + +53 #i�de� +ARCH_HAS_PREFETCH + + +54 + #ARCH_HAS_PREFETCH + + + ) + +55 +�l�e + + $�e�tch +(cڡ * +x +�{; + } +} + +68 + sli�_h�d + { + +69 +li�_h�d + * + m�xt +, * + m�ev +; + +72 + #LIST_HEAD_INIT +( +�me +�{ &�ame), &�ame�} + + ) + +74 + #LIST_HEAD +( +�me +) \ + +75 +li�_h�d + +�me + = + `LIST_HEAD_INIT +�ame) + + ) + +77 +�l�e + + $INIT_LIST_HEAD +( +li�_h�d + * +li� +) + +79 +li� +-> +�xt + =�ist; + +80 +li� +-> +�ev + =�ist; + +81 + } +} + +89 +�l�e + + $__li�_add +( +li�_h�d + * +�w +, + +90 +li�_h�d + * +�ev +, + +91 +li�_h�d + * +�xt +) + +93 +�xt +-> +�ev + = +�w +; + +94 +�w +-> +�xt + =�ext; + +95 +�w +-> +�ev + =�rev; + +96 +�ev +-> +�xt + = +�w +; + +97 + } +} + +107 +�l�e + + $li�_add +( +li�_h�d + * +�w +, li�_h�d * +h�d +) + +109 + `__li�_add +( +�w +, +h�d +, h�d-> +�xt +); + +110 + } +} + +120 +�l�e + + $li�_add_�� +( +li�_h�d + * +�w +, li�_h�d * +h�d +) + +122 + `__li�_add +( +�w +, +h�d +-> +�ev +, head); + +123 + } +} + +132 +�l�e + + $__li�_d� +( +li�_h�d + * +�ev +, li�_h�d * +�xt +) + +134 +�xt +-> +�ev + =�rev; + +135 +�ev +-> +�xt + =�ext; + +136 + } +} + +144 +�l�e + + $li�_d� +( +li�_h�d + * +��y +) + +146 + `__li�_d� +( +��y +-> +�ev +,��ry-> +�xt +); + +147 +��y +-> +�xt + = +LIST_POISON1 +; + +148 +��y +-> +�ev + = +LIST_POISON2 +; + +149 + } +} + +158 +�l�e + + $li�_��a� +( +li�_h�d + * +�d +, + +159 +li�_h�d + * +�w +) + +161 +�w +-> +�xt + = +�d +->next; + +162 +�w +-> +�xt +-> +�ev + =�ew; + +163 +�w +-> +�ev + = +�d +->prev; + +164 +�w +-> +�ev +-> +�xt + =�ew; + +165 + } +} + +167 +�l�e + + $li�_��a�_�� +( +li�_h�d + * +�d +, + +168 +li�_h�d + * +�w +) + +170 + `li�_��a� +( +�d +, +�w +); + +171 + `INIT_LIST_HEAD +( +�d +); + +172 + } +} + +178 +�l�e + + $li�_d�_�� +( +li�_h�d + * +��y +) + +180 + `__li�_d� +( +��y +-> +�ev +,��ry-> +�xt +); + +181 + `INIT_LIST_HEAD +( +��y +); + +182 + } +} + +189 +�l�e + + $li�_move +( +li�_h�d + * +li� +, li�_h�d * +h�d +) + +191 + `__li�_d� +( +li� +-> +�ev +,�i�-> +�xt +); + +192 + `li�_add +( +li� +, +h�d +); + +193 + } +} + +200 +�l�e + + $li�_move_�� +( +li�_h�d + * +li� +, + +201 +li�_h�d + * +h�d +) + +203 + `__li�_d� +( +li� +-> +�ev +,�i�-> +�xt +); + +204 + `li�_add_�� +( +li� +, +h�d +); + +205 + } +} + +212 +�l�e + + $li�_is_ϡ +(cڡ +li�_h�d + * +li� +, + +213 cڡ +li�_h�d + * +h�d +) + +215 +li� +-> +�xt + =� +h�d +; + +216 + } +} + +222 +�l�e + + $li�_em�y +(cڡ +li�_h�d + * +h�d +) + +224 +h�d +-> +�xt + == head; + +225 + } +} + +240 +�l�e + + $li�_em�y_��ful +(cڡ +li�_h�d + * +h�d +) + +242 +li�_h�d + * +�xt + = +h�d +->next; + +243 ( +�xt + =� +h�d +�&& (�x�=�h�d-> +�ev +); + +244 + } +} + +250 +�l�e + + $li�_is_s�gu�r +(cڡ +li�_h�d + * +h�d +) + +252 ! + `li�_em�y +( +h�d +�&& (h�d-> +�xt + =�h�d-> +�ev +); + +253 + } +} + +255 +�l�e + + $__li�_cut_pos�i� +( +li�_h�d + * +li� +, + +256 +li�_h�d + * +h�d +, li�_h�d * +��y +) + +258 +li�_h�d + * +�w_f�� + = +��y +-> +�xt +; + +259 +li� +-> +�xt + = +h�d +->next; + +260 +li� +-> +�xt +-> +�ev + =�ist; + +261 +li� +-> +�ev + = +��y +; + +262 +��y +-> +�xt + = +li� +; + +263 +h�d +-> +�xt + = +�w_f�� +; + +264 +�w_f�� +-> +�ev + = +h�d +; + +265 + } +} + +281 +�l�e + + $li�_cut_pos�i� +( +li�_h�d + * +li� +, + +282 +li�_h�d + * +h�d +, li�_h�d * +��y +) + +284 i�( + `li�_em�y +( +h�d +)) + +286 i�( + `li�_is_s�gu�r +( +h�d +) && + +287 ( +h�d +-> +�xt + !� +��y + && head !=�ntry)) + +289 i�( +��y + =� +h�d +) + +290 + `INIT_LIST_HEAD +( +li� +); + +292 + `__li�_cut_pos�i� +( +li� +, +h�d +, +��y +); + +293 + } +} + +295 +�l�e + + $__li�_�li� +(cڡ +li�_h�d + * +li� +, + +296 +li�_h�d + * +�ev +, + +297 +li�_h�d + * +�xt +) + +299 +li�_h�d + * +f�� + = +li� +-> +�xt +; + +300 +li�_h�d + * +ϡ + = +li� +-> +�ev +; + +302 +f�� +-> +�ev + =�rev; + +303 +�ev +-> +�xt + = +f�� +; + +305 +ϡ +-> +�xt + =�ext; + +306 +�xt +-> +�ev + = +ϡ +; + +307 + } +} + +314 +�l�e + + $li�_�li� +(cڡ +li�_h�d + * +li� +, + +315 +li�_h�d + * +h�d +) + +317 i�(! + `li�_em�y +( +li� +)) + +318 + `__li�_�li� +( +li� +, +h�d +, h�d-> +�xt +); + +319 + } +} + +326 +�l�e + + $li�_�li�_�� +( +li�_h�d + * +li� +, + +327 +li�_h�d + * +h�d +) + +329 i�(! + `li�_em�y +( +li� +)) + +330 + `__li�_�li� +( +li� +, +h�d +-> +�ev +, head); + +331 + } +} + +340 +�l�e + + $li�_�li�_�� +( +li�_h�d + * +li� +, + +341 +li�_h�d + * +h�d +) + +343 i�(! + `li�_em�y +( +li� +)) { + +344 + `__li�_�li� +( +li� +, +h�d +, h�d-> +�xt +); + +345 + `INIT_LIST_HEAD +( +li� +); + +347 + } +} + +357 +�l�e + + $li�_�li�_��_�� +( +li�_h�d + * +li� +, + +358 +li�_h�d + * +h�d +) + +360 i�(! + `li�_em�y +( +li� +)) { + +361 + `__li�_�li� +( +li� +, +h�d +-> +�ev +, head); + +362 + `INIT_LIST_HEAD +( +li� +); + +364 + } +} + +372 + #li�_��y +( +�r +, +ty� +, +memb� +) \ + +373 + `cڏ��_of +( +�r +, +ty� +, +memb� +) + + ) + +383 + #li�_f��_��y +( +�r +, +ty� +, +memb� +) \ + +384 + `li�_��y +(( +�r +)-> +�xt +, +ty� +, +memb� +) + + ) + +391 + #li�_f�_�ch +( +pos +, +h�d +) \ + +392 +pos + = ( +h�d +)-> +�xt +; + `�e�tch +(pos->next),�os != (head); \ + +393 +pos + =�os-> +�xt +) + + ) + +405 + #__li�_f�_�ch +( +pos +, +h�d +) \ + +406 +pos + = ( +h�d +)-> +�xt +;�o�!�(h�d);�o��pos->�xt) + + ) + +413 + #li�_f�_�ch_�ev +( +pos +, +h�d +) \ + +414 +pos + = ( +h�d +)-> +�ev +; + `�e�tch +(pos->prev),�os != (head); \ + +415 +pos + =�os-> +�ev +) + + ) + +423 + #li�_f�_�ch_�� +( +pos +, +n +, +h�d +) \ + +424 +pos + = ( +h�d +)-> +�xt +, +n + =�os->next;�os != (head); \ + +425 +pos + = +n +,� =�os-> +�xt +) + + ) + +433 + #li�_f�_�ch_�ev_�� +( +pos +, +n +, +h�d +) \ + +434 +pos + = ( +h�d +)-> +�ev +, +n + =�os->prev; \ + +435 + `�e�tch +( +pos +-> +�ev +),�o�!�( +h�d +); \ + +436 +pos + = +n +,� =�os-> +�ev +) + + ) + +444 + #li�_f�_�ch_��y +( +pos +, +h�d +, +memb� +) \ + +445 +pos + = + `li�_��y +(( +h�d +)-> +�xt +, + `ty�of +(*pos), +memb� +); \ + +446 + `�e�tch +( +pos +-> +memb� +. +�xt +), &pos->memb� !�( +h�d +); \ + +447 +pos + = + `li�_��y +�os-> +memb� +. +�xt +, + `ty�of +(*pos), memb�)) + + ) + +455 + #li�_f�_�ch_��y_�v�� +( +pos +, +h�d +, +memb� +) \ + +456 +pos + = + `li�_��y +(( +h�d +)-> +�ev +, + `ty�of +(*pos), +memb� +); \ + +457 + `�e�tch +( +pos +-> +memb� +. +�ev +), &pos->memb� !�( +h�d +); \ + +458 +pos + = + `li�_��y +�os-> +memb� +. +�ev +, + `ty�of +(*pos), memb�)) + + ) + +468 + #li�_���e_��y +( +pos +, +h�d +, +memb� +) \ + +469 (( +pos +�? : + `li�_��y +( +h�d +, + `ty�of +(*pos), +memb� +)) + + ) + +480 + #li�_f�_�ch_��y_c�t�ue +( +pos +, +h�d +, +memb� +) \ + +481 +pos + = + `li�_��y +�os-> +memb� +. +�xt +, + `ty�of +(*pos), member); \ + +482 + `�e�tch +( +pos +-> +memb� +. +�xt +), &pos->memb� !�( +h�d +); \ + +483 +pos + = + `li�_��y +�os-> +memb� +. +�xt +, + `ty�of +(*pos), memb�)) + + ) + +494 + #li�_f�_�ch_��y_c�t�ue_�v�� +( +pos +, +h�d +, +memb� +) \ + +495 +pos + = + `li�_��y +�os-> +memb� +. +�ev +, + `ty�of +(*pos), member); \ + +496 + `�e�tch +( +pos +-> +memb� +. +�ev +), &pos->memb� !�( +h�d +); \ + +497 +pos + = + `li�_��y +�os-> +memb� +. +�ev +, + `ty�of +(*pos), memb�)) + + ) + +507 + #li�_f�_�ch_��y_�om +( +pos +, +h�d +, +memb� +) \ + +508 ; + `�e�tch +( +pos +-> +memb� +. +�xt +), &pos->memb� !�( +h�d +); \ + +509 +pos + = + `li�_��y +�os-> +memb� +. +�xt +, + `ty�of +(*pos), memb�)) + + ) + +518 + #li�_f�_�ch_��y_�� +( +pos +, +n +, +h�d +, +memb� +) \ + +519 +pos + = + `li�_��y +(( +h�d +)-> +�xt +, + `ty�of +(*pos), +memb� +), \ + +520 +n + = + `li�_��y +( +pos +-> +memb� +. +�xt +, + `ty�of +(*pos), member); \ + +521 & +pos +-> +memb� + !�( +h�d +); \ + +522 +pos + = +n +,� = + `li�_��y +�-> +memb� +. +�xt +, + `ty�of +(*n), memb�)) + + ) + +534 + #li�_f�_�ch_��y_��_c�t�ue +( +pos +, +n +, +h�d +, +memb� +) \ + +535 +pos + = + `li�_��y +�os-> +memb� +. +�xt +, + `ty�of +(*pos), member), \ + +536 +n + = + `li�_��y +( +pos +-> +memb� +. +�xt +, + `ty�of +(*pos), member); \ + +537 & +pos +-> +memb� + !�( +h�d +); \ + +538 +pos + = +n +,� = + `li�_��y +�-> +memb� +. +�xt +, + `ty�of +(*n), memb�)) + + ) + +550 + #li�_f�_�ch_��y_��_�om +( +pos +, +n +, +h�d +, +memb� +) \ + +551 +n + = + `li�_��y +( +pos +-> +memb� +. +�xt +, + `ty�of +(*pos), member); \ + +552 & +pos +-> +memb� + !�( +h�d +); \ + +553 +pos + = +n +,� = + `li�_��y +�-> +memb� +. +�xt +, + `ty�of +(*n), memb�)) + + ) + +565 + #li�_f�_�ch_��y_��_�v�� +( +pos +, +n +, +h�d +, +memb� +) \ + +566 +pos + = + `li�_��y +(( +h�d +)-> +�ev +, + `ty�of +(*pos), +memb� +), \ + +567 +n + = + `li�_��y +( +pos +-> +memb� +. +�ev +, + `ty�of +(*pos), member); \ + +568 & +pos +-> +memb� + !�( +h�d +); \ + +569 +pos + = +n +,� = + `li�_��y +�-> +memb� +. +�ev +, + `ty�of +(*n), memb�)) + + ) + +578 + shli�_h�d + { + +579 +hli�_node + * + mf�� +; + +582 + shli�_node + { + +583 +hli�_node + * + m�xt +, ** + m��v +; + +586 + #HLIST_HEAD_INIT + { . +f�� + = +NULL + } + + ) + +587 + #HLIST_HEAD +( +�me +� +hli�_h�d +�am��{ . +f�� + = +NULL + } + + ) + +588 + #INIT_HLIST_HEAD +( +�r +�(Ռ)-> +f�� + = +NULL +) + + ) + +589 +�l�e + + $INIT_HLIST_NODE +( +hli�_node + * +h +) + +591 +h +-> +�xt + = +NULL +; + +592 +h +-> +��v + = +NULL +; + +593 + } +} + +595 +�l�e + + $hli�_unhashed +(cڡ +hli�_node + * +h +) + +597 ! +h +-> +��v +; + +598 + } +} + +600 +�l�e + + $hli�_em�y +(cڡ +hli�_h�d + * +h +) + +602 ! +h +-> +f�� +; + +603 + } +} + +605 +�l�e + + $__hli�_d� +( +hli�_node + * +n +) + +607 +hli�_node + * +�xt + = +n +->next; + +608 +hli�_node + ** +��v + = +n +->pprev; + +609 * +��v + = +�xt +; + +610 i�( +�xt +) + +611 +�xt +-> +��v + =�prev; + +612 + } +} + +614 +�l�e + + $hli�_d� +( +hli�_node + * +n +) + +616 + `__hli�_d� +( +n +); + +617 +n +-> +�xt + = +LIST_POISON1 +; + +618 +n +-> +��v + = +LIST_POISON2 +; + +619 + } +} + +621 +�l�e + + $hli�_d�_�� +( +hli�_node + * +n +) + +623 i�(! + `hli�_unhashed +( +n +)) { + +624 + `__hli�_d� +( +n +); + +625 + `INIT_HLIST_NODE +( +n +); + +627 + } +} + +629 +�l�e + + $hli�_add_h�d +( +hli�_node + * +n +, +hli�_h�d + * +h +) + +631 +hli�_node + * +f�� + = +h +->first; + +632 +n +-> +�xt + = +f�� +; + +633 i�( +f�� +) + +634 +f�� +-> +��v + = & +n +-> +�xt +; + +635 +h +-> +f�� + = +n +; + +636 +n +-> +��v + = & +h +-> +f�� +; + +637 + } +} + +640 +�l�e + + $hli�_add_bef�e +( +hli�_node + * +n +, + +641 +hli�_node + * +�xt +) + +643 +n +-> +��v + = +�xt +->pprev; + +644 +n +-> +�xt + =�ext; + +645 +�xt +-> +��v + = & +n +->next; + +646 *( +n +-> +��v +) =�; + +647 + } +} + +649 +�l�e + + $hli�_add_a� +( +hli�_node + * +n +, + +650 +hli�_node + * +�xt +) + +652 +�xt +->�x�� +n +->next; + +653 +n +-> +�xt + =�ext; + +654 +�xt +-> +��v + = & +n +->next; + +656 if( +�xt +->next) + +657 +�xt +->�xt-> +��v + = &next->next; + +658 + } +} + +660 + #hli�_��y +( +�r +, +ty� +, +memb� +� + `cڏ��_of +Ռ,ty�,memb�) + + ) + +662 + #hli�_f�_�ch +( +pos +, +h�d +) \ + +663 +pos + = ( +h�d +)-> +f�� +;�o�&& ({ + `�e�tch +�os-> +�xt +); 1; }); \ + +664 +pos + =�os-> +�xt +) + + ) + +666 + #hli�_f�_�ch_�� +( +pos +, +n +, +h�d +) \ + +667 +pos + = ( +h�d +)-> +f�� +;�o�&& ({ +n + =�os-> +�xt +; 1; }); \ + +668 +pos + = +n +) + + ) + +677 + #hli�_f�_�ch_��y +( +�os +, +pos +, +h�d +, +memb� +) \ + +678 +pos + = ( +h�d +)-> +f�� +; \ + +679 +pos + && ({ + `�e�tch +�os-> +�xt +); 1;}) && \ + +680 ({ +�os + = + `hli�_��y +( +pos +, + `ty�of +(*�os), +memb� +); 1;}); \ + +681 +pos + =�os-> +�xt +) + + ) + +689 + #hli�_f�_�ch_��y_c�t�ue +( +�os +, +pos +, +memb� +) \ + +690 +pos + = (pos)-> +�xt +; \ + +691 +pos + && ({ + `�e�tch +�os-> +�xt +); 1;}) && \ + +692 ({ +�os + = + `hli�_��y +( +pos +, + `ty�of +(*�os), +memb� +); 1;}); \ + +693 +pos + =�os-> +�xt +) + + ) + +701 + #hli�_f�_�ch_��y_�om +( +�os +, +pos +, +memb� +) \ + +702 ; +pos + && ({ + `�e�tch +�os-> +�xt +); 1;}) && \ + +703 ({ +�os + = + `hli�_��y +( +pos +, + `ty�of +(*�os), +memb� +); 1;}); \ + +704 +pos + =�os-> +�xt +) + + ) + +714 + #hli�_f�_�ch_��y_�� +( +�os +, +pos +, +n +, +h�d +, +memb� +) \ + +715 +pos + = ( +h�d +)-> +f�� +; \ + +716 +pos + && ({ +n + =�os-> +�xt +; 1; }) && \ + +717 ({ +�os + = + `hli�_��y +( +pos +, + `ty�of +(*�os), +memb� +); 1;}); \ + +718 +pos + = +n +) + + ) + + @cp_logger.c + +14 + ~"�_logg�.h +" + +15 + ~"�_comm�.h +" + +17 + #PRECISE_TIME_FACTOR + 1000 + + ) + +19 + glog_r�lback_size + = +LOG_ROLLBACK_NONE +; + +21 +�_logg� + * + glogg� + = +NULL +; + +23 * + glog_�r +[ +LOG_LEVEL_MAX + + 1] = { "", "F", "E", "W", "N", "D", "I", "T", "M" }; + +25 * + g�_time_f�m� + = +DEFAULT_TIME_FORMAT +; + +27 + $�_log_�t_time_f�m� +(* +time_f�m� +) + +29 +�_time_f�m� + = +time_f�m� +; + +30 + } +} + +32 + $�_log_de�u�_sig�l_h�d�r +( +sig +) + +34 if(! +logg� +) + +37 i�( +sig + =� +SIGHUP +) + +39 + `sig�l +( +SIGHUP +, +�_log_de�u�_sig�l_h�d�r +); + +40 + `log_�l +("SIGHUP�e�ived -�eݒn�g�og f��[%s]", +logg� +-> +f�e +); + +41 + `�_log_�ݒ +(); + +43 + } +} + +45 + $log_b��r +(* +�efix +) + +47 if(! +logg� +) + +50 + `�r�tf +( +logg� +-> +� +, "%s�og \"%s\" on�evel [%s] size [%lu],�og system version %s\n", + +51 +�efix +, +logg� +-> +f�e +, +log_�r +[logg�-> +�v� +], +log_r�lback_size + / 1024, +LOG_VERSION_STR +); + +52 #ifde� +LOG_FILE_LINE + + +53 + `�r�tf +( +logg� +-> +� +, " [Date] [Time] [Level] [PID/TID] [File/Line] [Content]\n"); + +55 + `�r�tf +( +logg� +-> +� +, " [Date] [Time] [Level] [PID/TID] [Content]\n"); + +57 + `�r�tf +( +logg� +-> +� +, "-------------------------------------------------------------\n"); + +58 + } +} + +60 + $check_�d_r�lback +() + +62 if(! +logg� +) + +65 i�( +log_r�lback_size + !� +LOG_ROLLBACK_NONE +) + +67 +_curOff�t + = + `�l +( +logg� +-> +� +); + +69 i�(( +_curOff�t + !�-1�&& (_curOff��>� +log_r�lback_size +)) + +71 +cmd +[512]; + +73 + `���tf +( +cmd +, (cmd), "� -�%�%s.r�l", +logg� +-> +f�e +,�ogger->file); + +74 + `sy�em +( +cmd +); + +76 i�(-1 =� + `f�ek +( +logg� +-> +� +, 0L, +SEEK_SET +)) + +77 + `�r�tf +( +logg� +-> +� +, "log�ollback fseek failed \n"); + +79 + `�w�d +( +logg� +-> +� +); + +81 + `�un�� +( +logg� +-> +f�e +, 0); + +82 + `log_b��r +("Already�ollback"); + +85 + } +} + +87 +�_logg� + * + $�_log_�� +( +�_logg� + * +log +, * +f��ame +, +�v� +, +log_size +) + +89 if( +NULL + =� +log +) + +91 +logg� + = + `t_m�loc +(( +�_logg� +)); + +92 + `mem�t +( +logg� +, 0, ( +�_logg� +)); + +93 +logg� +-> +�ag + |� +CP_LOGGER_MALLOC +; + +97 +logg� + = +log +; + +98 + `mem�t +( +logg� +, 0, ( +�_logg� +)); + +99 +logg� +-> +�ag + |� +CP_LOGGER_ARGUMENT +; + +102 if( +NULL + =� +logg� +) + +104 +NULL +; + +107 + `���y +( +logg� +-> +f�e +, +f��ame +, +FILENAME_LEN +); + +108 +logg� +-> +�v� + =�evel; + +109 +logg� +-> +size + = +log_size +; + +111 +logg� +; + +112 + } +} + +114 + $�_log_ݒ +() + +116 +siga�i� + +a� +; + +117 * +f�emode +; + +119 if(! +logg� +) + +124 +log_r�lback_size + = +logg� +-> +size + <�0 ? +LOG_ROLLBACK_NONE + :�ogger->size*1024; + +126 i�('\0' =� +logg� +-> +f�e +) + +129 i�(! + `�rcmp +( +logg� +-> +f�e +, +DBG_LOG_FILE +)) + +131 +logg� +-> +� + = +�d�r +; + +132 +log_r�lback_size + = +LOG_ROLLBACK_NONE +; + +133 +logg� +-> +�ag + |� +CP_LOGGER_CONSOLE +; + +134 +OUT +; + +138 +f�emode + = "a+"; + +140 +logg� +-> +� + = + `fݒ +�ogg�-> +f�e +, +f�emode +); + +141 i�( +NULL + =� +logg� +-> +� +) + +143 + `�r�tf +( +�d�r +, "O��log f��\"%s\" i�%��u�\n", +logg� +-> +f�e +, +f�emode +); + +147 +a� +. +�_h�d�r + = +�_log_de�u�_sig�l_h�d�r +; + +148 + `sigem�y�t +(& +a� +. +�_mask +); + +149 +a� +. +�_�ags + = 0; + +150 + `siga�i� +( +SIGHUP +, & +a� +, +NULL +); + +152 +OUT +: + +153 + `log_b��r +("Initialize"); + +156 + } +} + +158 + $�_log_�o� +() + +160 i�(! +logg� + || !logg�-> +� + ) + +163 + `log_b��r +("\nTerminate"); + +164 + `�_log_�w +("\n\n\n\n"); + +166 + `f�ush +( +logg� +-> +� +); + +168 + `f�o� +( +logg� +-> +� +); + +169 +logg� +-> +� + = +NULL +; + +172 + } +} + +174 + $�_log_�ݒ +() + +176 +rc + = 0; + +177 * +f�emode +; + +179 if�! +logg� + ) + +182 i�( +logg� +-> +�ag + & +CP_LOGGER_CONSOLE + ) + +184 + `f�ush +( +logg� +-> +� +); + +185 +logg� +-> +� + = +�d�r +; + +189 i�( +logg� +-> +� +) + +191 + `�_log_�o� +(); + +193 +f�emode + = "a+"; + +194 +logg� +-> +� + = + `fݒ +�ogg�-> +f�e +, +f�emode +); + +196 i�( +logg� +-> +� + =� +NULL +) + +197 +rc + = -2; + +201 +rc + = -3; + +204 i�(! +rc +) + +206 + `log_b��r +("\nReopen"); + +208 +rc +; + +209 + } +} + +211 + $�_log_�rm +() + +213 if(! +logg� +) + +216 + `�_log_�o� +(); + +218 i�( +logg� +-> +�ag + & +CP_LOGGER_MALLOC + ) + +220 + `t_� +( +logg� +); + +222 +logg� + = +NULL +; + +223 + } +} + +225 + $�_log_�w +(cڡ * +fmt +, ...) + +227 +va_li� + +�gp +; + +229 i�(! +logg� + || !logg�-> +� +) + +232 + `check_�d_r�lback +(); + +234 + `va_��t +( +�gp +, +fmt +); + +235 + `v�r�tf +( +logg� +-> +� +, +fmt +, +�gp +); + +236 + `va_�d +( +�gp +); + +237 + } +} + +239 + $�_��tout +(* +�v� +, * +fmt +, +va_li� + +�gp +) + +241 +buf +[ +MAX_LOG_MESSAGE_LEN +]; + +242 +tm + * +lo�l +; + +243 +timev� + +now +; + +244 +time�r +[256]; + +246 if(! +logg� +) + +249 +�h�ad_t + +tid +; + +251 + `check_�d_r�lback +(); + +253 #ifde� +MULTHREADS + + +254 +tid + = + `�h�ad_�lf +(); + +256 +tid + = + `g�pid +(); + +259 + `g�timeofday +(& +now +, +NULL +); + +260 +lo�l + = + `lo��ime +(& +now +. +tv_�c +); + +262 + `�r�ime +( +time�r +, 256, +�_time_f�m� +, +lo�l +); + +263 + `v���tf +( +buf +, +MAX_LOG_MESSAGE_LEN +, +fmt +, +�gp +); + +265 #ifde� +DUMPLICATE_OUTPUT + + +266 + `��tf +("%s.%03ld [%s] [%06lu]: %s", + +267 +time�r +, +now +. +tv_u�c + / +PRECISE_TIME_FACTOR +, +�v� +, +tid +, +buf +); + +270 i�( +logg� +-> +� +) + +271 + `�r�tf +( +logg� +-> +� +, "%s.%03ld [%s] [%06lu]: %s", +time�r +, +now +. +tv_u�c + / +PRECISE_TIME_FACTOR +, + +272 +�v� +, +tid +, +buf +); + +274 i�( +logg� +-> +� +) + +275 + `f�ush +( +logg� +-> +� +); + +276 + } +} + +278 + $�_��tout_l�e +(* +�v� +, * +fmt +, * +f�e +, +l�e +, +va_li� + +�gp +) + +280 +buf +[ +MAX_LOG_MESSAGE_LEN +]; + +281 +tm + * +lo�l +; + +282 +timev� + +now +; + +283 +time�r +[256]; + +285 if(! +logg� +) + +288 +�h�ad_t + +tid +; + +290 + `check_�d_r�lback +(); + +292 #ifde� +MULTHREADS + + +293 +tid + = + `�h�ad_�lf +(); + +295 +tid + = + `g�pid +(); + +298 + `g�timeofday +(& +now +, +NULL +); + +299 +lo�l + = + `lo��ime +(& +now +. +tv_�c +); + +301 + `�r�ime +( +time�r +, 256, +�_time_f�m� +, +lo�l +); + +302 + `v���tf +( +buf +, +MAX_LOG_MESSAGE_LEN +, +fmt +, +�gp +); + +304 #ifde� +DUMPLICATE_OUTPUT + + +305 + `��tf +("%s.%03ld [%s] [%06lu] (%s [%04d]) : %s", + +306 +time�r +, +now +. +tv_u�c + / +PRECISE_TIME_FACTOR +, +�v� +, +tid +, +f�e +, +l�e +, +buf +); + +309 i�( +logg� +-> +� +) + +310 + `�r�tf +( +logg� +-> +� +, "%s.%03ld [%s] [%06lu] (%s [%04d]) : %s", + +311 +time�r +, +now +. +tv_u�c + / +PRECISE_TIME_FACTOR +, +�v� +, +tid +, +f�e +, +l�e +, +buf +); + +313 i�( +logg� +-> +� +) + +314 + `f�ush +( +logg� +-> +� +); + +315 + } +} + +317 + $�_log +( +�v� +, * +fmt +, ...) + +319 +va_li� + +�gp +; + +321 i�(! +logg� + || +�v� +>logger->level) + +324 + `va_��t +( +�gp +, +fmt +); + +325 + `�_��tout +( +log_�r +[ +�v� +], +fmt +, +�gp +); + +326 + `va_�d +( +�gp +); + +327 + } +} + +329 + $�_log_l�e +( +�v� +, * +f�e +, +l�e +, * +fmt +, ...) + +331 +va_li� + +�gp +; + +333 i�(! +logg� + || +�v� +>logger->level) + +336 + `va_��t +( +�gp +, +fmt +); + +337 + `�_��tout_l�e +( +log_�r +[ +�v� +], +fmt +, +f�e +, +l�e +, +�gp +); + +339 + `va_�d +( +�gp +); + +340 + } +} + +342 + #LINELEN + 81 + + ) + +343 + #CHARS_PER_LINE + 16 + + ) + +344 * + g��t_ch� + = + +362 + $�_log_dump +( +�v� +, * +buf +, +�n +) + +364 +rc +; + +365 +idx +; + +366 +�n +[ +LINELEN +]; + +367 +l� +[ +CHARS_PER_LINE + + 2]; + +368 +hc +[4]; + +369 +l�e_d�e + = 1; + +371 i�(! +logg� + || +�v� +>logger->level) + +374 +rc + = +�n +; + +375 +idx + = 0; + +376 +l� +[ +CHARS_PER_LINE +] = '\0'; + +378 +rc + > 0) + +380 i�( +l�e_d�e +) + +381 + `���tf +( +�n +, +LINELEN +, "%08X: ", +idx +); + +385 +c + = +buf +[ +idx +]; + +386 + `���tf +( +hc +, 4, "%02X ", +c +); + +387 + `���t +( +�n +, +hc +, +LINELEN +); + +389 +l� +[ +idx + % +CHARS_PER_LINE +] = +��t_ch� +[ +c +]; + +391 -- +rc + > 0 && (++ +idx + % +CHARS_PER_LINE + != 0)); + +393 +l�e_d�e + = ( +idx + % +CHARS_PER_LINE +) == 0; + +394 i�( +l�e_d�e +) + +396 #ifde� +DUMPLICATE_OUTPUT + + +397 + `��tf +("%� %s\n", +�n +, +l� +); + +399 i�( +logg� +-> +� +) + +400 + `�r�tf +( +logg� +-> +� +, "%� %s\n", +�n +, +l� +); + +404 i�(! +l�e_d�e +) + +406 +ldx + = +idx + % +CHARS_PER_LINE +; + +407 +l� +[ +ldx +++] = +��t_ch� +[() +buf +[ +idx +]]; + +408 +l� +[ +ldx +] = '\0'; + +410 (++ +idx + % +CHARS_PER_LINE +) != 0) + +411 + `���t +( +�n +, " ", +LINELEN +); + +413 #ifde� +DUMPLICATE_OUTPUT + + +414 + `��tf +("%� %s\n", +�n +, +l� +); + +416 i�( +logg� +-> +� +) + +417 + `�r�tf +( +logg� +-> +� +, "%� %s\n", +�n +, +l� +); + +420 + } +} + + @cp_logger.h + +14 #i�de� +__CP_LOG_H + + +15 + #__CP_LOG_H + + + ) + +17 + ~<�d�g.h +> + +18 + ~<�dio.h +> + +19 + ~<�dlib.h +> + +20 + ~<�r�g.h +> + +21 + ~<uni�d.h +> + +22 + ~<sig�l.h +> + +23 + ~<time.h +> + +24 + ~<��o.h +> + +26 + ~<�h�ad.h +> + +27 + ~<sys/ty�s.h +> + +28 + ~<sys/time.h +> + +30 + #LOG_VERSION_STR + "1.0.0" + + ) + +32 #i�de� +FILENAME_LEN + + +33 + #FILENAME_LEN + 64 + + ) + +36 + #DEFAULT_LOGFILE + "�_logg�.log" + + ) + +37 + #DBG_LOG_FILE + "c�s�e" + + ) + +39 + #LOG_ROLLBACK_SIZE + 512 + + ) + +40 + #LOG_ROLLBACK_NONE + 0 + + ) + +42 + #DEFAULT_TIME_FORMAT + "%Y-%m-%d %H:%M:%S" + + ) + +43 + #MAX_LOG_MESSAGE_LEN + 0x1000 + + ) + +46 + #LOG_FILE_LINE + + + ) + +50 + mLOG_LEVEL_DISB + = 0, + +51 + mLOG_LEVEL_FATAL +, + +52 + mLOG_LEVEL_ERROR +, + +53 + mLOG_LEVEL_WARN +, + +54 + mLOG_LEVEL_NRML +, + +55 + mLOG_LEVEL_DEBUG +, + +56 + mLOG_LEVEL_INFO +, + +57 + mLOG_LEVEL_TRACE +, + +58 + mLOG_LEVEL_MAX +, + +61 + #CP_LOGGER_MALLOC + 1<<0 + + ) + +62 + #CP_LOGGER_ARGUMENT + 0<<0 + + ) + +64 + #CP_LOGGER_CONSOLE + 1<<1 + + ) + +65 + #CP_LOGGER_FILE + 0<<1 + + ) + +67 + #CP_LOGGER_LEVEL_OPT + 1<<2 + + ) + +68 + s_�_logg� + + +70 + m�ag +; + +71 + mf�e +[ +FILENAME_LEN +]; + +72 + m�v� +; + +73 + msize +; + +75 +FILE + * + m� +; + +76 } + t�_logg� +; + +78 * +log_�r +[]; + +80 +�_logg� + * +�_log_�� +(�_logg� * +log +, * +f��ame +, +�v� +, +log_size +); + +81 +�_log_ݒ +(); + +82 +�_log_�t_time_f�m� +(* +time_f�m� +); + +83 +�_log_�ݒ +(); + +84 +�_log_�rm +(); + +85 +�_log_�w +(cڡ * +fmt +, ...); + +86 +�_log +( +�v� +, * +fmt +, ...); + +87 +�_log_l�e +( +�v� +, * +f�e +, +l�e +, * +fmt +, ...); + +89 +�_log_dump +( +�v� +, * +buf +, +�n +); + +91 #ifde� +LOG_FILE_LINE + + +92 + #log_�a� +( +fmt +, ...� + `�_log_l�e +( +LOG_LEVEL_TRACE +, +__FILE__ +, +__LINE__ +, fmt, ## +__VA_ARGS__ +) + + ) + +93 + #log_�fo +( +fmt +, ...� + `�_log_l�e +( +LOG_LEVEL_INFO +, +__FILE__ +, +__LINE__ +, fmt, ## +__VA_ARGS__ +) + + ) + +94 + #log_dbg +( +fmt +, ...� + `�_log_l�e +( +LOG_LEVEL_DEBUG +, +__FILE__ +, +__LINE__ +, fmt, ## +__VA_ARGS__ +) + + ) + +95 + #log_�ml +( +fmt +, ...� + `�_log_l�e +( +LOG_LEVEL_NRML +, +__FILE__ +, +__LINE__ +, fmt, ## +__VA_ARGS__ +) + + ) + +96 + #log_w�n +( +fmt +, ...� + `�_log_l�e +( +LOG_LEVEL_WARN +, +__FILE__ +, +__LINE__ +, fmt, ## +__VA_ARGS__ +) + + ) + +97 + #log_�r +( +fmt +, ...� + `�_log_l�e +( +LOG_LEVEL_ERROR +, +__FILE__ +, +__LINE__ +, fmt, ## +__VA_ARGS__ +) + + ) + +98 + #log_�l +( +fmt +, ...� + `�_log_l�e +( +LOG_LEVEL_FATAL +, +__FILE__ +, +__LINE__ +, fmt, ## +__VA_ARGS__ +) + + ) + +100 + #log_�a� +( +fmt +, ...� + `�_log +( +LOG_LEVEL_TRACE +, fmt, ## +__VA_ARGS__ +) + + ) + +101 + #log_�fo +( +fmt +, ...� + `�_log +( +LOG_LEVEL_INFO +, fmt, ## +__VA_ARGS__ +) + + ) + +102 + #log_dbg +( +fmt +, ...� + `�_log +( +LOG_LEVEL_DEBUG +, fmt, ## +__VA_ARGS__ +) + + ) + +103 + #log_�ml +( +fmt +, ...� + `�_log +( +LOG_LEVEL_NRML +, fmt, ## +__VA_ARGS__ +) + + ) + +104 + #log_w�n +( +fmt +, ...� + `�_log +( +LOG_LEVEL_WARN +, fmt, ## +__VA_ARGS__ +) + + ) + +105 + #log_�r +( +fmt +, ...� + `�_log +( +LOG_LEVEL_ERROR +, fmt, ## +__VA_ARGS__ +) + + ) + +106 + #log_�l +( +fmt +, ...� + `�_log +( +LOG_LEVEL_FATAL +, fmt, ## +__VA_ARGS__ +) + + ) + + @cp_network.c + +13 + ~<�t��/�.h +> + +14 + ~<�t/if.h +> + +15 + ~<�t/if_�p.h +> + +16 + ~<��/��.h +> + +18 + ~"�_sock.h +" + +19 + ~"�_fds.h +" + +20 + ~"�_�tw�k.h +" + +21 + ~"�_�tw�k.h +" + +22 + ~"�_�oc.h +" + +29 + $nic_�tw�k_c�fig +(* +nic +, * +mac +, * +� +) + +31 if(! +nic +) + +35 if( +mac + && 17== + `��� +(mac)) + +38 + `exec_sy�em_cmd +("ifc�fig %�down", +nic +,�ic); + +39 + `��p +(1); + +40 + `exec_sy�em_cmd +("ifc�fig %�hw�th� %�up", +nic +, +mac +); + +44 if( +� + && + `��_addr +(ip)) + +46 + `exec_sy�em_cmd +("ifc�fig %�dow�&& ifc�fig %�0.0.0.0", +nic +,�ic); + +47 + `��p +(2); + +48 + `exec_sy�em_cmd +("ifc�fig %�%�up", +nic +, +� +); + +52 + } +} + +55 + $nic_g�_�addr +(* +nic +, * +�addr +) + +57 +fd +; + +58 +i�eq + +i� +; + +59 +sockaddr_� + * +s� +; + +61 if�! +nic + || ! +�addr + ) + +64 +fd + = + `sock� +( +AF_INET +, +SOCK_DGRAM +, 0); + +65 + `�r�y +( +i� +. +i�_�me +, +nic +); + +67 i�(( + `io�l +( +fd +, +SIOCGIFADDR +, ( +�ddr_t +)& +i� +, ( +i�eq +))) < 0) + +69 + `log_�l +("Sy�em c��io�l(�w�h SIOCGIFADDR g� %�IP�dd�s��u�.\n", +nic +); + +73 +s� + = ( +sockaddr_� + *)& +i� +. +i�_addr +; + +74 + `�r�y +( +�addr +, (cڡ *) + `��_�� +( +s� +-> +s�_addr +)); + +76 + `log_dbg +("G� %�lo��IP�dd�ss: %s\n", +nic +, +�addr +); + +79 + } +} + +81 + $nic_g�_��ddr +(* +nic +, * +��ddr +) + +83 +fd +; + +84 +i�eq + +i� +; + +85 +sockaddr_� + * +s� +; + +87 +fd + = + `sock� +( +AF_INET +, +SOCK_DGRAM +, 0); + +88 + `�r�y +( +i� +. +i�_�me +, +nic +); + +90 i�(( + `io�l +( +fd +, +SIOCGIFDSTADDR +, ( +�ddr_t +�& +i� +, ( +i�eq +))) < 0) + +92 + `log_�l +("Sy�em c��io�l(�w�h SIOCGIFDSTADDR g� %�IP�dd�s��u�.\n", +nic +); + +96 +s� + = ( +sockaddr_� + *)& +i� +. +i�_d�addr +; + +97 + `�r�y +( +��ddr +, (cڡ *) + `��_�� +( +s� +-> +s�_addr +)); + +98 + `log_dbg +("G� %��mِIP�dd�ss: %s\n", +nic +, +��ddr +); + +101 + } +} + +111 + $�tw�k_p�g_�� +(* +�om +, * +p�g_� +) + +113 +FILE + * +� +; + +114 +cmd +[256]; + +115 +buf +[512]; + +116 +lo�_�r�� + = 100; + +117 +tx_�ck�s + = 0; + +118 +rx_�ck�s + = 0; + +120 + `mem�t +( +cmd +, 0, (cmd)); + +121 if( +�om +) + +123 + `���tf +( +cmd +, (cmd), "p�g -W1 -c5 -s4 %�-I %s", +p�g_� +, +�om +); + +127 + `���tf +( +cmd +, (cmd), "p�g -W1 -c5 -s4 %s", +p�g_� +); + +130 i�( +NULL + =�( +� + = + `pݒ +( +cmd +, "r"))) + +135 +NULL + !� + `fg�s +( +buf +, (buf), +� +)) + +137 i�( + `�r�r +( +buf +, "transmitted")) + +139 + `�l�_�r�g_to_v�ue +( +buf +, "%l,%l,%d", & +tx_�ck�s +, & +rx_�ck�s +, & +lo�_�r�� +); + +144 + `p�o� +( +� +); + +145 +lo�_�r�� +; + +146 + } +} + +149 + $�_sock_ac��_�gi� +( +CP_SOCK + * +�rv_sock +) + +151 +CP_SOCK + * +�w_sock + = +NULL +; + +152 +rv + = 0; + +154 if(! +�rv_sock +) + +156 + `log_�r +("Invalude input�rguments\n"); + +160 + `log_dbg +("Accept�nd�egist�ew client from server [%d] on [%s:%d]�ow\n", + +161 +�rv_sock +-> +fd +, s�v_sock-> +�ddr +, s�v_sock-> +��t +); + +163 if( +�rv_sock +-> +ac��_�t + >�rv_sock-> +max_��� +) + +165 + `log_�r +("N�mܐ����esour��v�b� o��rv� sock� [%d]\n", +�rv_sock +-> +fd +); + +166 +ex�_out +; + +169 if�!( +�w_sock += + `�_sock_�� +( +NULL +, +CP_SOCK_RCVBUF +, +CP_SOCK_SNDBUF +, +CP_SOCK_KEEPINTVL +, +CP_SOCK_KEEPCNT +)) ) + +171 + `log_�r +("Create��ew socket contex for�ccept�ew client failed.\n"); + +172 +ex�_out +; + +175 +�w_sock +-> +�rv_sock + = serv_sock; + +176 +�w_sock +-> +fds + = +�rv_sock +->fds; + +177 +�w_sock +-> +�ivt + = +�rv_sock +->privt; + +178 +�w_sock +-> +cbfunc + = +�rv_sock +-> +���_func +; + +179 +�w_sock +-> +mode + = +CP_SOCK_MODE_ACCEPT +; + +182 if� + `�_fds_add_sock_�gi�ry +( +�w_sock +) ) + +184 +rv + = -2; + +185 +�rm_sock +; + +189 if� + `�_sock_ac�� +( +�rv_sock +, +�w_sock +) ) + +191 +rv + = -3; + +192 +d�_�gi� +; + +195 if� + `�_add_��l_ev�t +( +�w_sock +) ) + +197 +rv + = -4; + +198 +d�_�gi� +; + +201 + `log_dbg +("Accept�nd�egist�ew client from server [%d] on [%s:%d] ok\n", + +202 +�rv_sock +-> +fd +, s�v_sock-> +�ddr +, s�v_sock-> +��t +); + +206 +d�_�gi� +: + +207 + `�_fds_d�_sock_�gi�ry +( +�w_sock +); + +209 +�rm_sock +: + +210 if( +�w_sock +) + +211 + `�_sock_�rm_��r +( +�w_sock +); + +213 +ex�_out +: + +214 + `log_�r +("Accept�nd�egist�ew client from server [%d] on [%s:%d] failed\n", + +215 +�rv_sock +-> +fd +, s�v_sock-> +�ddr +, s�v_sock-> +��t +); + +217 + `�_fds_d�_sock_�sk +( +�rv_sock +); + +218 +rv +; + +219 + } +} + +221 +CP_SOCK + * + $�_sock_c���_�gi� +( +CP_FDS + * +fds +, +CP_SOCK + * +sock +, * +�ddr +, +��t +, +��t +, +CP_SOCK_EVENT_CALLBACK + +�rvi�_rou� +) + +223 if(! +fds + || ! +�ddr + || +��t +<0) + +225 + `log_�r +("Invalude input�rguments\n"); + +226 +ex�_out +; + +229 if�! +sock + && !(sock= + `�_sock_�� +(sock, +CP_SOCK_RCVBUF +, +CP_SOCK_SNDBUF +, +CP_SOCK_KEEPINTVL +, +CP_SOCK_KEEPCNT +)) ) + +231 +ex�_out +; + +234 if� +SOCK_STAT_CONNECTED + =� +sock +-> +��us + ) + +235 +sock +; + +237 if�!( +sock +-> +�ag +& +FLAG_SOCK_REGISTRY +) ) + +239 +sock +-> +fds + = fds; + +240 +sock +-> +cbfunc + = +�rvi�_rou� +; + +241 +sock +-> +mode + = +CP_SOCK_MODE_CONNECT +; + +242 + `���y +( +sock +-> +�ddr +, "0.0.0.0", (sock->laddr)); + +243 + `log_dbg +("C����nd�egi� sock��ػmِ[%s:%d]�ow\n", +�ddr +, +��t +); + +245 if� + `�_fds_add_sock_�gi�ry +� +sock +) ) + +246 +�rm_sock +; + +249 i�� + `�_sock_c��� +( +sock +, +�ddr +, +��t +, +��t +) ) + +251 + `log_dbg +("sock� [%d] c��� fa�ed, s���ػmov��gi�ry i�now.\n", +sock +-> +fd +); + +252 +d�_�gi� +; + +256 if� + `�_add_��l_ev�t +( +sock +) ) + +257 +d�_�gi� +; + +260 +sock +; + +262 +d�_�gi� +: + +263 + `�_fds_d�_sock_�gi�ry +( +sock +); + +265 +�rm_sock +: + +266 + `�_fds_d�_sock_�sk +( +sock +); + +267 if( +sock +) + +268 + `�_sock_�rm +( +sock +); + +270 +ex�_out +: + +271 + `log_�r +("C����nd�egi��ew sock��ػmِ�rv� [%s:%d] fa�ed\n", +�ddr +, +��t +); + +272 +NULL +; + +273 + } +} + +275 +CP_SOCK + * + $�_sock_�rv�_�gi� +( +CP_FDS + * +fds +, * +addr +, +p�t +, +max_��� +, +CP_SOCK_EVENT_CALLBACK + +�rvi�_rou� +, * +d�a +) + +277 +rv + = 0; + +279 +CP_SOCK + * +sock + = +NULL +; + +281 + `log_dbg +("Regi� sock� s�v��i�� o�[%s:%d]�ow\n", +addr +?addr:"lo�l", +p�t +); + +283 if(! +fds + || +p�t + < 0) + +285 +rv + = -1; + +286 + `log_�r +("Invalude input�rguments\n"); + +287 +ex�_out +; + +290 if�!( +sock += + `�_sock_�� +( +NULL +, +CP_SOCK_RCVBUF +, +CP_SOCK_SNDBUF +, +CP_SOCK_KEEPINTVL +, +CP_SOCK_KEEPCNT +)) ) + +292 +rv + = -2; + +293 +ex�_out +; + +296 + `INIT_LIST_HEAD +(& +sock +-> +ac��_li� +); + +297 +sock +-> +fds + = fds; + +298 +sock +-> +cbfunc + = +�_sock_ac��_�gi� +; + +299 +sock +-> +���_func + = +�rvi�_rou� +; + +300 +sock +-> +�ivt + = +d�a +; + +301 +sock +-> +mode + = +CP_SOCK_MODE_LISTEN +; + +303 if� + `�_fds_add_sock_�gi�ry +( +sock +) ) + +305 +rv + = -3; + +306 +�rm_sock +; + +310 +sock +-> +max_��� + = max_���<=0 ? +CP_DEF_MAX_CLIENTS + : max_client; + +313 +sock +-> +max_��� + = max_���< +fds +-> +max_ev�t + ? sock->max_��� : +CP_DEF_MAX_CLIENTS +; + +315 if� + `�_sock_li�� +( +sock +, +addr +, +p�t +, sock-> +max_��� +) ) + +317 +rv + = -4; + +318 +d�_�gi� +; + +322 if� + `�_add_��l_ev�t +( +sock +) ) + +324 +rv + = -5; + +325 +d�_�gi� +; + +328 + `log_�ml +("Regi��sock�[%d] s�v��i�� o�[%s:%d] ok.\n", +sock +-> +fd +, sock-> +�ddr +, sock-> +��t +); + +329 +sock +; + +331 +d�_�gi� +: + +332 + `�_fds_d�_sock_�gi�ry +( +sock +); + +334 +�rm_sock +: + +335 + `�_fds_d�_sock_�sk +( +sock +); + +336 if( +sock +) + +337 + `�_sock_�rm_��r +( +sock +); + +339 +ex�_out +: + +340 + `log_�r +("Regi��sock� s�v��i�� o�[%s:%d] fa�ed.\n", +addr +, +p�t +); + +341 +NULL +; + +342 + } +} + +344 + $�_sock_�rm_�l_�rvi� +( +CP_FDS + * +fds +) + +346 if(! +fds +) + +349 + `log_dbg +("Terminate�ll�he service�ow\n"); + +351 + `�_sock_�rm_�l_�sk +( +fds +); + +352 + `�_sock_�rm_�l_�rv� +( +fds +); + +353 + `�_sock_�rm_�l_��� +( +fds +); + +355 + `�_fds_�rm +( +fds +); + +356 + `log_w�n +("Terminate�ll�he service ok\n"); + +357 + } +} + + @cp_network.h + +13 #i�de� +__CP_NETWORK_H + + +14 + #__CP_NETWORK_H + + + ) + +16 + ~"�_fds.h +" + +17 + ~"�_sock.h +" + +19 + #CP_DEF_MAX_CLIENTS + 1024 + + ) + +20 + #CP_DEF_TIMEOUT + 10 + + ) + +22 +nic_�tw�k_c�fig +(* +nic +, * +mac +, * +� +); + +23 +nic_g�_�addr +(* +nic +, * +�addr +); + +24 +nic_g�_��ddr +(* +nic +, * +��ddr +); + +25 +�tw�k_p�g_�� +(* +�om +, * +p�g_� +); + +27 +�_sock_ac��_�gi� +( +CP_SOCK + * +�rv_sock +); + +29 +CP_SOCK + * +�_sock_c���_�gi� +( +CP_FDS + * +fds +, CP_SOCK * +sock +, * +�ddr +, +��t +, +��t +, +CP_SOCK_EVENT_CALLBACK + +�rvi�_rou� +); + +31 +CP_SOCK + * +�_sock_�rv�_�gi� +( +CP_FDS + * +fds +, * +addr +, +p�t +, +max_��� +, +CP_SOCK_EVENT_CALLBACK + +�rvi�_rou� +, * +d�a +); + +33 +�_sock_�rm_�l_�rvi� +( +CP_FDS + * +fds +); + +34 + #�_sock_�rm_�l_�rvi�_��r +( +fds +�{ + `�_sock_�rm_�l_�rvi� +(fds); fds= +NULL +;} + + ) + + @cp_ppp.c + +13 + ~<sys/io�l.h +> + +14 + ~<�t��/�.h +> + +15 + ~<�t/if.h +> + +16 + ~<�t/if_�p.h +> + +17 + ~<��/��.h +> + +18 + ~"�_�p.h +" + +19 + ~"�_�r�g.h +" + +20 + ~"�_����r.h +" + +21 + ~"�_�tw�k.h +" + +31 + $check_�p_��r�� +(* +�p_dev +) + +33 +fd + = -1; + +34 +�tv� + = -1; + +35 +buf +[512]; + +37 i�(( +fd + = + `ݒ +("/�oc/�t/dev", +O_RDONLY +, 0666)) < 0) + +42 + `�ad +( +fd +, +buf +, (buf)) > 0) + +44 i�( +NULL + !� + `�r�r +( +buf +, +�p_dev +)) + +46 +�tv� + = 0; + +51 + `�o� +( +fd +); + +52 +�tv� +; + +53 + } +} + +55 + $check_�p_�addr +( +PPPD_INFO + * +�pd_�fo +, * +�p_dev +) + +57 +fd +; + +58 +i�eq + +i� +; + +59 +sockaddr_� + * +s� +; + +61 if( + `check_�p_��r�� +( +�p_dev +)) + +64 +fd + = + `sock� +( +AF_INET +, +SOCK_DGRAM +, 0); + +65 + `�r�y +( +i� +. +i�_�me +, +�p_dev +); + +67 i�(( + `io�l +( +fd +, +SIOCGIFADDR +, ( +�ddr_t +�& +i� +, ( +i�eq +))) < 0) + +69 + `log_�l +("Sy�em c��io�l(�w�h SIOCGIFADDR fa�u�.\n", +�p_dev +); + +73 +s� + = ( +sockaddr_� + *)& +i� +. +i�_addr +; + +74 + `�r�y +( +�pd_�fo +-> +Ïddr +, (cڡ *) + `��_�� +( +s� +-> +s�_addr +)); + +75 + `log_�ml +("G� %�lo��IP�dd�ss: %s\n", +�p_dev +, +�pd_�fo +-> +Ïddr +); + +77 i�(( + `io�l +( +fd +, +SIOCGIFDSTADDR +, ( +�ddr_t +�& +i� +, ( +i�eq +))) < 0) + +79 + `log_�l +("Sy�em c��io�l(�w�h SIOCGIFDSTADDR fa�u�.\n", +�p_dev +); + +82 +s� + = ( +sockaddr_� + *)& +i� +. +i�_d�addr +; + +83 + `�r�y +( +�pd_�fo +-> +��ddr +, (cڡ *) + `��_�� +( +s� +-> +s�_addr +)); + +84 + `log_�ml +("G� %��mِIP�dd�ss: %s\n", +�p_dev +, +�pd_�fo +-> +��ddr +); + +87 + } +} + +89 + $check_�p_�� +( +PPP_STAT + * +�p_�� +, * +�p_dev +) + +91 +�tv� +; + +92 +FILE + * +� +; + +93 * +�r +; + +94 +buf +[512]; + +96 if� +NULL + =�( +� += + `fݒ +( +PPP_PROC_NET_DEV +, "r")) ) + +98 + `log_�r +("C��� o��%s.\n", +PPP_PROC_NET_DEV +); + +102 + `fg�s +( +buf +, (buf), +� +); + +103 + `fg�s +( +buf +, (buf), +� +); + +105 + `fg�s +( +buf +, (buf), +� +)) + +107 +�r += + `�r�r +( +buf +, +�p_dev +); + +108 if( +NULL + =� +�r +) + +110 + `log_�r +("C��� f�d %���r�� s�ti�i�d��� %s\n", +�p_dev +, +PPP_PROC_NET_DEV +); + +111 +�tv� + = -1; + +116 +�r + = + `�rchr +(ptr, ':'); + +117 +�r +++; + +118 + `ss�nf +( +�r +, "%llu%llu%lu%lu%lu%lu%lu%lu%llu%llu%lu%lu%lu%lu%lu%lu", + +119 &( +�p_�� +-> +u�Rx_By�s +), + +120 &( +�p_�� +-> +u�Rx_Pack�s +), + +121 &( +�p_�� +-> +ulRx_E��s +), + +122 &( +�p_�� +-> +ulRx_Drݳd +), + +123 &( +�p_�� +-> +ulRx_FIFO_E��s +), + +124 &( +�p_�� +-> +ulRx_F�me_E��s +), + +125 &( +�p_�� +-> +ulRx_Com�es�d +), + +126 &( +�p_�� +-> +ulRx_Mu�i�� +), + +127 &( +�p_�� +-> +u�Tx_By�s +), + +128 &( +�p_�� +-> +u�Tx_Pack�s +), + +129 &( +�p_�� +-> +ulTx_E��s +), + +130 &( +�p_�� +-> +ulTx_Drݳd +), + +131 &( +�p_�� +-> +ulTx_FIFO_E��s +), + +132 &( +�p_�� +-> +ulC�lisi�s +), + +133 &( +�p_�� +-> +ulTx_C�r�r_E��s +), + +134 &( +�p_�� +-> +ulTx_Com�es�d +) + +136 +�tv� + = 0; + +141 if(0 =� +�tv� + ) + +142 + `log_dbg +("Check PPP��w�k��ffic: Tx %�u by�s, Rx %�u by�s.\n", +�p_�� +-> +u�Tx_By�s +,��_��-> +u�Rx_By�s +); + +143 + `f�o� +( +� +); + +144 +�tv� +; + +145 + } +} + +147 + $k�l_�pd_�o�ss +( +COM_PORT + * +comp�t +) + +149 +pid + = -1; + +151 ( +pid += + `check_�pd_pid +( +comp�t +-> +dev_�me +)) > 0) + +153 + `log_�ml +("T�m����pd�ro�s�[pid=%d]\n", +pid +); + +154 + `k�l +( +pid +, +SIGTERM +); + +155 + `��p +(1); + +159 + } +} + +161 + $��_�p_c��� +( +PPP_CTX + * +�p_�x +) + +163 + `log_w�n +("Stop PPP connection�ow.\n"); + +165 if( + `check_�p_��r�� +( +�p_�x +-> +dev +)) + +168 + `k�l_�pd_�o�ss +( +�p_�x +-> +comp�t +); + +170 if( +�p_�x +-> +comp�t +) + +172 + `�_gsm_d���t +("��_�p_c���()", +�p_�x +-> +modu� +, &յ_�x-> +comp�t +)); + +175 + } +} + +177 + $g�_�n_c�f +(* +�i_�me +, * +�i_key +, +APN_ACCOUNT + * +�n +, +ty� +) + +179 +di�iڬy + * +�i + ; + +180 +tmp +[64]; + +181 * +�r +; + +183 if( +NULL +== +�i_�me + || NULL== +�i_key + || NULL== +�n +) + +188 +�i + = + `����r_l�d +( +�i_�me +); + +189 i�( +�i +== +NULL +) + +191 + `log_�r +("��ن�d de�u� APN c�figu� f�e: %s\n", +�i_�me +); + +194 + `log_dbg +("P���de�u� APN c�figu� f��%s\n", +�i_�me +); + +197 + `���tf +( +tmp +, 64, "%s:%s", +�i_key +, +APN_3G +== +ty� +?"3g_apn":"apn"); + +198 if�!( +�r += + `����r_g��r�g +( +�i +, +tmp +, +NULL +)) ) + +200 + `log_�r +("��� f�d APN s�t�g f� SIM [%s] i�f�e: %s\n", +�i_key +, +�i_�me +); + +201 + `mem�t +( +�n +, 0, ( +APN_ACCOUNT +)); + +206 + `���y +( +�n +->�n, +�r +, +APN_LEN +); + +210 + `���tf +( +tmp +, 64, "%s:%s", +�i_key +, +APN_3G +== +ty� +?"3g_uid":"uid"); + +211 +�r + = + `����r_g��r�g +( +�i +, +tmp +, +NULL +); + +212 + `���y +( +�n +-> +uid +, +�r +, +UID_LEN +); + +216 + `���tf +( +tmp +, 64, "%s:%s", +�i_key +, +APN_3G +== +ty� +?"3g_pwd":"pwd"); + +217 +�r + = + `����r_g��r�g +( +�i +, +tmp +, +NULL +); + +218 + `���y +( +�n +-> +pwd +, +�r +, +PWD_LEN +); + +220 + `����r_�di� +( +�i +); + +222 + } +} + +225 + $���_�n +( +PPP_CTX + * +�p_�x +, * +key +) + +227 +�tv� +; + +228 +ty� + = +APN_2G +; + +230 + `log_�ml +("GPRS module work on GPRS mode, select APN�ow.\n"); + +232 +�tv� + = + `g�_�n_c�f +( +APN_DEF_CONF_FILE +, +key +, &( +�p_�x +-> +�n +), +ty� +); + +233 if(! +�tv� +) + +235 + `log_�r +("G� de�u� APN [%s] from %�ok\n", +�p_�x +-> +�n +.�n, +APN_DEF_CONF_FILE +); + +240 + } +} + +242 + #PPPD_CMD_LEN + 512 + + ) + +243 + $��t_�p_d�l_cmd +( +COM_PORT + * +comp�t +, +APN_ACCOUNT + * +�n +, * +�p_dev +) + +245 +tmp +[64]; + +246 +�pd_cmd +[ +PPPD_CMD_LEN +]; + +247 +pid_t + +pid +; + +249 if�! +comp�t + || !comp�t-> +is_c��ed + ) + +251 + `log_�r +("GPRS modu� d��p܈%�i�n� o��d.\n", +comp�t +-> +dev_�me +); + +255 if�! +�n + || + `��� +(apn->apn)<=0 ) + +257 + `log_�r +("No valid APN was set.\n"); + +261 + `log_�ml +("S�� PPP c���i� w�h APN \"%s\"�ow.\n", +�n +->apn); + +263 + `mem�t +( +�pd_cmd +, 0, +PPPD_CMD_LEN +); + +264 + `���tf +( +�pd_cmd +, +PPPD_CMD_LEN +, "%�-d %�", +PPPD_DIAL_SCRIPTS +, +comp�t +-> +dev_�me +); + +266 + `���tf +( +tmp +, �mp), " -�%�", +�n +->apn); + +267 + `���t +( +�pd_cmd +, +tmp +, +PPPD_CMD_LEN +); + +269 if� + `��� +( +�n +-> +uid +) > 0 ) + +271 + `���tf +( +tmp +, �mp), " -u %�", +�n +-> +uid +); + +272 + `���t +( +�pd_cmd +, +tmp +, +PPPD_CMD_LEN +); + +275 if� + `��� +( +�n +-> +pwd +) > 0 ) + +277 + `���tf +( +tmp +, �mp), " -�%�", +�n +-> +pwd +); + +278 + `���t +( +�pd_cmd +, +tmp +, +PPPD_CMD_LEN +); + +281 if� + `��� +( +�n +-> +auth +) > 0 ) + +283 + `���tf +( +tmp +, �mp), " -v %�", +�n +-> +auth +); + +284 + `���t +( +�pd_cmd +, +tmp +, +PPPD_CMD_LEN +); + +287 + `���t +( +�pd_cmd +, +�p_dev +, +PPPD_CMD_LEN +); + +289 + `log_�ml +("��d��u�comm�d: %s\n", +�pd_cmd +); + +291 +pid + = + `f�k +(); + +292 if�0 =� +pid + ) + +294 + `sy�em +( +�pd_cmd +); + +295 + `ex� +(0); + +297 i�( +pid + < 0) + +299 + `log_�r +("Create�ew�rocess failure.\n"); + +304 + `log_dbg +("pppd�rogram�lready�unning.\n"); + +305 + `mi�o_�c�d_��p +(1000); + +309 + } +} + +311 + $check_�pd_pid +(* +f�d_key +) + +313 +buf +[10]; + +314 +cmd +[128]; + +315 +FILE + * +� + = +NULL +; + +316 +pid + = -1; + +318 + `���tf +( +cmd +, (cmd), "p�| g��-v g��| g���pd | g��%�|�wk '{���$1}'", +f�d_key +); + +320 +� + = + `pݒ +( +cmd +, "r"); + +321 if( +NULL + =� +� +) + +323 + `log_�l +("popen()�o check�he�ppd�rocess ID failure.\n"); + +327 + `mem�t +( +buf +, 0, (buf)); + +328 + `fg�s +( +buf +, (buf), +� +); + +330 +pid + = + `�oi +( +buf +); + +332 if( +pid + <= 1) + +334 + `log_�r +("Get�ppd�rogram�unning�id failure\n"); + +335 +pid + = -1; + +340 + `log_�a� +("�pd�rog�m�ug�id i�[%d]\n", +pid +); + +344 + `p�o� +( +� +); + +345 +pid +; + +346 + } +} + +348 + $�t_�p_disc��� +( +PPP_CTX + * +�p_�x +) + +350 +�p_�x +-> +��us + = +DISCONNECT +; + +351 +�p_�x +-> +�pd_�fo +. +��t_time + = 0; + +353 + `mem�t +(&( +�p_�x +-> +�pd_�fo +), 0, ( +PPPD_INFO +)); + +354 + `mem�t +(&( +�p_�x +-> +�p_�� +), 0, ( +PPP_STAT +)); + +355 +�p_�x +-> +�tw�k + = +PPP_STOP +; + +356 + } +} + +359 + $�p_cڋxt_�� +( +PPP_CTX + * +�p_�x +, +MODULE_INFO + * +modu� +) + +361 + `mem�t +( +�p_�x +, 0, (*ppp_ctx)); + +363 +�p_�x +-> +th�ad_id + = + `�h�ad_�lf +(); + +364 +�p_�x +-> +modu� + = module; + +365 + `���y +( +�p_�x +-> +dev +, +PPP_INTERFACE_NAME +, (ppp_ctx->dev)); + +366 + `���y +( +�p_�x +-> +p�g_� +, +DEF_PING_DST +, (ppp_ctx->ping_ip)); + +367 +�p_�x +-> +p�g_��rv� + = +PING_INTERVAL_TIME +; + +368 + `�t_�p_disc��� +( +�p_�x +); + +370 + `log_�ml +("Initialize PPP�hread context ok\n"); + +372 + } +} + +374 + $�p_cڋxt_�rm +( +PPP_CTX + * +�p_�x +) + +376 + `��_�p_c��� +( +�p_�x +); + +377 + `�t_�p_disc��� +( +�p_�x +); + +379 + `log_�ml +("Terminate PPP�hread context ok\n"); + +380 + } +} + +382 + $��t_�p_c��� +( +PPP_CTX + * +�p_�x +) + +384 +�tv� +; + +385 +MODULE_INFO + * +modu� + = +�p_�x +->module; + +387 if�! +�p_�x +-> +comp�t + ) + +389 +�p_�x +-> +comp�t += + `�loc_gsm_d���t +("��t_�p_c���()",��_�x-> +modu� +); + +390 if(! +�p_�x +-> +comp�t +) + +393 + `log_dbg +("PPP�h�ad��o�GPRS d��܈%s=>[fd:%d]\n", +�p_�x +-> +comp�t +-> +dev_�me +,��_�x->comp�t-> +fd +); + +397 +�p_�x +-> +��us +) + +399 +DISCONNECT +: + +400 + `�t_�p_disc��� +( +�p_�x +); + +401 +�tv� + = + `���_�n +( +�p_�x +, +modu� +-> +�g +. +loc +. +mcc_mnc +); + +402 if(! +�tv� +) + +404 + `log_�ml +("Select APN successfully, go�o�ext stage.\n"); + +405 +�p_�x +-> +�_�t + = 0; + +406 +�p_�x +-> +��us +++; + +410 + `log_w�n +("Select APN failure,�equest�o�eset GPRS module\n"); + +411 +�p_�x +-> +�_�t + ++; + +412 + `�t_modu�_ev�t +( +modu� +, +REQ_POWER_RESET +); + +416 +SELECTED_APN +: + +417 + `log_w�n +("Run�ppd�rogram�o start PPP connection�ow\n"); + +418 +�p_�x +-> +�tw�k + = +PPP_CONN +; + +419 + `��t_�p_d�l_cmd +( +�p_�x +-> +comp�t +, &յ_�x-> +�n +),��_�x-> +dev +); + +420 +�p_�x +-> +��us +++; + +425 + } +} + +427 + $��e�_�tw�k_��us +( +PPP_CTX + * +�p_�x +) + +429 +PPPD_INFO + * +�pd_�fo + = &( +�p_�x +->pppd_info); + +430 +PPP_STAT + * +�p_�� + = &( +�p_�x +->ppp_stat); + +431 +lo�_�r�� +; + +432 +ϡ_tx_by�s +� +�p_�� +-> +u�Tx_By�s +; + +433 +ϡ_rx_by�s +� +�p_�� +-> +u�Rx_By�s +; + +435 if� +CONNECTED + !� +�p_�x +-> +��us +) + +437 +�p_�x +-> +�pd_�fo +. +p�g_time + = 0; + +438 + `mem�t +( +�p_�� +, 0, ( +PPP_STAT +)); + +440 +�pd_�fo +-> +pid + = + `check_�pd_pid +( +�p_�x +-> +comp�t +-> +dev_�me +); + +441 if( +�pd_�fo +-> +pid + <= 0) + +444 if( + `time_���d +( +�pd_�fo +-> +��t_time +�>� +PPPD_DIAL_TIMEOUT +) + +447 + `mi�o_�c�d_��p +(2000); + +448 + `log_�r +("pppd�rocess�xit when do�pp dialing, set status�o DISCONNECT.\n"); + +449 + `�t_�p_disc��� +( +�p_�x +); + +454 if( + `��� +( +�pd_�fo +-> +Ïddr +) <=0 ) + +456 + `check_�p_�addr +( +�pd_�fo +, +�p_�x +-> +dev +); + +457 + `log_dbg +("�pd�ug�ro�s�ID [%d].\n", +�pd_�fo +-> +pid +); + +462 if� + `time_���d +( +�pd_�fo +-> +p�g_time +�>� +�p_�x +-> +p�g_��rv� +*1000 ) + +464 if( +�p_�x +-> +�_�t + >� +MAX_PPP_FAIL_CNT +) + +467 + `mi�o_�c�d_��p +(2000); + +468 + `log_w�n +("PPP�etwork inspect status failure, set status�o DISCONNECT.\n"); + +469 + `�t_�p_disc��� +( +�p_�x +); + +473 +lo�_�r�� + = + `�tw�k_p�g_�� +( +�p_�x +-> +dev +,��_�x-> +p�g_� +); + +474 +�p_�x +-> +�tw�k + = +lo�_�r�� +<=60 ? +PPP_GOOD + : +PPP_BAD +; + +476 if( +lo�_�r�� + <= 80) + +478 + `check_�p_�� +( +�p_�� +, +�p_�x +-> +dev +); + +479 if( +ϡ_tx_by�s +== +�p_�� +-> +u�Tx_By�s + || +ϡ_rx_by�s +=��_��-> +u�Rx_By�s +) + +481 + `log_w�n +("PPP interface�raffic�ot increased, maybe�pp disconnected?\n"); + +482 +�p_�x +-> +�_�t +++; + +486 + `log_�ml +("Set PPP connection status�o CONNECTED.\n"); + +487 + `�t_�p_disc��� +( +�p_�x +); + +488 +�p_�x +-> +�_�t +=0; + +493 +�p_�x +-> +�_�t +++; + +495 +�p_�x +-> +�pd_�fo +. +p�g_time + = + `time_now +(); + +499 + } +} + +502 * + $�p_th�ad_w�kbody +(* +th�ad_�g +) + +504 +PPP_CTX + +�p_�x +; + +506 +MODULE_INFO + * +modu� +; + +508 +modu� + = ( +MODULE_INFO + *) +th�ad_�g +; + +509 + `�p_cڋxt_�� +(& +�p_�x +, +modu� +); + +511 + `log_�ml +("GPRS PPP�hread start�unning\n"); + +513 ! +g_�_sig�l +. +�� + ) + +515 if( +ALL_READY + !� +modu� +-> +�ady +) + +517 if( +�p_�x +. +��us +>= +CONNECTING +) + +519 + `log_�ml +("Stop�xist PPP connection�nd free TTY data�ort\n"); + +520 + `��_�p_c��� +(& +�p_�x +); + +524 + `mi�o_�c�d_��p +(200); + +529 if( +�p_�x +. +��us +>= +CONNECTING +) + +531 + `��e�_�tw�k_��us +(& +�p_�x +); + +535 + `��t_�p_c��� +(& +�p_�x +); + +539 + `��p +(1); + +542 + `�p_cڋxt_�rm +(& +�p_�x +); + +543 + `�h�ad_ex� +(0); + +544 +NULL +; + +545 + } +} + +547 + $��t_th�ad_�p +( +MODULE_INFO + * +modu� +) + +549 +�h�ad_t + +tid +; + +551 + `th�ad_��t +(& +tid +, +�p_th�ad_w�kbody +, +modu� +); + +552 + } +} + + @cp_ppp.h + +13 #i�de� +__PPP_H + + +14 + #__PPP_H + + + ) + +16 + ~<�t��/�.h +> + +18 + ~"�_comp�t.h +" + +19 + ~"�_�oc.h +" + +20 + ~"�_g�s.h +" + +22 + #PPPD_DIAL_TIMEOUT + 20000 + + ) + +23 + #PING_INTERVAL_TIME + 10000 + + ) + +25 + #DEFAULT_PING_INTERVAL + 30 + + ) + +26 + #APN_LEN + 128 + + ) + +27 + #UID_LEN + 64 + + ) + +28 + #PWD_LEN + 64 + + ) + +30 + #APN_3G + 3 + + ) + +31 + #APN_2G + 2 + + ) + +33 + #PPPD_DIAL_SCRIPTS + "/�ps/to�s/ifup-�p" + + ) + +34 + #PPP_INTERFACE_NAME + "�p10" + + ) + +35 + #PPP_PROC_NET_DEV + "/�oc/�t/dev" + + ) + +37 + #DEF_PING_DST + "4.2.2.2" + + ) + +39 + #APN_DEF_CONF_FILE + "/�ps/�c/�p/de�u�_�n.c�f" + + ) + +43 + mDISCONNECT + = 0, + +44 + mSELECTED_APN +, + +45 + mCONNECTING +, + +46 + mCONNECTED +, + +50 + s__APN_ACCOUNT + + +52 + m�n +[ +APN_LEN +]; + +53 + muid +[ +UID_LEN +]; + +54 + mpwd +[ +PWD_LEN +]; + +55 + mauth +[10]; + +56 } + tAPN_ACCOUNT +; + +58 + s__PPPD_INFO + + +60 + mÏddr +[ +INET_ADDRSTRLEN +]; + +61 + m��ddr +[ +INET_ADDRSTRLEN +]; + +62 + m��t_time +; + +63 + mp�g_time +; + +64 +pid_t + + mpid +; + +65 } + tPPPD_INFO +; + +67 + s__PPP_STAT + + +69 + mu�Rx_Pack�s +; + +70 + mu�Tx_Pack�s +; + +71 + mu�Rx_By�s +; + +72 + mu�Tx_By�s +; + +74 + mulRx_E��s +; + +75 + mulTx_E��s +; + +76 + mulRx_Drݳd +; + +77 + mulTx_Drݳd +; + +78 + mulRx_Mu�i�� +; + +79 + mulRx_Com�es�d +; + +80 + mulTx_Com�es�d +; + +81 + mulC�lisi�s +; + +84 + mulRx_L�gth_E��s +; + +85 + mulRx_Ov�_E��s +; + +86 + mulRx_CRC_E��s +; + +87 + mulRx_F�me_E��s +; + +88 + mulRx_FIFO_E��s +; + +89 + mulRx_Mis�d_E��s +; + +92 + mulTx_Ab܋d_E��s +; + +93 + mulTx_C�r�r_E��s +; + +94 + mulTx_FIFO_E��s +; + +95 + mulTx_H��b�t_E��s +; + +96 + mulTx_W�dow_E��s +; + +97 } + tPPP_STAT +; + +99 + #MAX_PPP_FAIL_CNT + 3 + + ) + +101 + #PPP_STOP + 0 + + ) + +102 + #SIG_WEAK + 1 + + ) + +103 + #PPP_CONN + 2 + + ) + +104 + #PPP_BAD + 3 + + ) + +105 + #PPP_GOOD + 4 + + ) + +106 + s__PPP_CTX + + +108 + m�ab� +; + +109 + m��us +; + +110 + m�tw�k +; + +111 + mdev +[10]; + +113 +�h�ad_t + + mth�ad_id +; + +115 +PPPD_INFO + + m�pd_�fo +; + +116 +PPP_STAT + + m�p_�� +; + +117 + m�_�t +; + +119 +APN_ACCOUNT + + m�n +; + +121 + mp�g_� +[ +INET_ADDRSTRLEN +]; + +122 + mp�g_��rv� +; + +124 +COM_PORT + * + mcomp�t +; + +125 +MODULE_INFO + * + mmodu� +; + +126 } + tPPP_CTX +; + +128 +g�_�n_c�f +(* +�i_�me +, * +�i_key +, +APN_ACCOUNT + * +�n +, +ty� +); + +129 +check_�pd_pid +(* +f�d_key +); + +130 +check_�p_��r�� +(* +�p_�f +); + +131 +��t_�p_d�l_cmd +( +COM_PORT + * +comp�t +, +APN_ACCOUNT + * +�n +, * +�p_�f +); + +132 +check_�p_�addr +( +PPPD_INFO + * +�pd_�fo +, * +�p_�f +); + +133 +check_�p_�� +( +PPP_STAT + * +�p_�� +, * +�p_�f +); + +134 +��_�p_c��� +( +PPP_CTX + * +�p_�x +); + +136 +��t_th�ad_�p +( +MODULE_INFO + * +modu� +); + + @cp_proc.c + +14 + ~<�dio.h +> + +15 + ~<�dlib.h +> + +16 + ~<uni�d.h +> + +17 + ~<libg�.h +> + +18 + ~<f��.h +> + +19 + ~<sys/ty�s.h +> + +20 + ~<sys/��.h +> + +22 + ~"�_�oc.h +" + +23 + ~"�_logg�.h +" + +25 +CP_PROC_SIG + + gg_�_sig�l +={0}; + +27 + $�_�oc_sigh�d�r +( +sig +) + +29 +sig +) + +31 +SIGINT +: + +32 + `log_w�n +("SIGINT - stopping\n"); + +33 +g_�_sig�l +. +�� + = 1; + +36 +SIGTERM +: + +38 +g_�_sig�l +. +�� + = 1; + +41 +SIGSEGV +: + +42 + `log_�r +("SIGSEGV - stopping\n"); + +43 if( +g_�_sig�l +. +�� +) + +44 + `ex� +(0); + +46 +g_�_sig�l +. +�� + = 1; + +50 +SIGPIPE +: + +51 + `log_w�n +("SIGPIPE - warnning\n"); + +52 +g_�_sig�l +. +�� + = 1; + +58 + } +} + +61 + $�_���l_�oc_sig�l +() + +63 +siga�i� + +siga� +, +sigign +; + +65 + `log_�ml +("Install default signal handler.\n"); + +68 + `sigem�y�t +(& +siga� +. +�_mask +); + +69 +siga� +. +�_�ags + = 0; + +70 +siga� +. +�_h�d�r + = +�_�oc_sigh�d�r +; + +73 + `sigem�y�t +(& +sigign +. +�_mask +); + +74 +sigign +. +�_�ags + = 0; + +75 +sigign +. +�_h�d�r + = +SIG_IGN +; + +77 + `siga�i� +( +SIGTERM +, & +siga� +, 0); + +78 + `siga�i� +( +SIGINT +, & +siga� +, 0); + +80 + `siga�i� +( +SIGPIPE +, & +siga� +, 0); + +82 + `siga�i� +( +SIGCHLD +, & +siga� +, 0); + +83 + `siga�i� +( +SIGUSR2 +, & +siga� +, 0); + +85 + } +} + +96 + $d�m�ize +( +nochd� +, +no�o� +) + +98 +�tv� +, +fd +; + +99 +i +; + +102 i�(1 =� + `g��id +()) + +106 +�tv� + = + `f�k +(); + +107 i�( +�tv� + < 0� + `ex� +(1); + +110 i�( +�tv� + > 0) + +111 + `ex� +(0); + +114 + `�tsid +(); + +116 i�(! +no�o� +) + +119 +i + = + `g�d�b�size +(); i >= 0; --i) + +122 + `�o� +( +i +); + +126 +fd + = + `ݒ +("/dev/nu�", +O_RDWR +); + +129 + `dup +( +fd +); + +132 + `dup +( +fd +); + +135 + `umask +(0); + +137 i�(! +nochd� +) + +138 + `chd� +("/"); + +141 + } +} + +150 + $�c�d_d�m�_pid +(cڡ * +pid_f�e +) + +152 +�� + +fS�tBuf +; + +153 +fd + = -1; + +154 +mode + = +S_IROTH + | +S_IXOTH + | +S_IRGRP + | +S_IXGRP + | +S_IRWXU +; + +155 +�c_d� +[64] = { 0 }; + +157 + `���y +( +�c_d� +, +pid_f�e +, 64); + +160 + `d��me +( +�c_d� +); + +163 i�( + `�� +( +�c_d� +, & +fS�tBuf +) < 0) + +165 i�( + `mkd� +( +�c_d� +, +mode +) < 0) + +167 + `log_�l +("��� c���%s: %s\n", +�c_d� +, + `���� +( +��o +)); + +171 () + `chmod +( +�c_d� +, +mode +); + +175 +mode + = +S_IRUSR + | +S_IWUSR + | +S_IRGRP + | +S_IROTH +; + +176 i�(( +fd + = + `ݒ +( +pid_f�e +, +O_RDWR + | +O_CREAT + | +O_TRUNC +, +mode +)) >= 0) + +178 +pid +[ +PID_ASCII_SIZE +]; + +179 + `���tf +( +pid +, �id), "%u\n", () + `g�pid +()); + +180 + `wr�e +( +fd +, +pid +, + `��� +(pid)); + +181 + `�o� +( +fd +); + +183 + `log_dbg +("Rec�d PID<%u>��f��%s.\n", + `g�pid +(), +pid_f�e +); + +187 + `log_�l +("��� c���%s: %s\n", +pid_f�e +, + `���� +( +��o +)); + +192 + } +} + +201 +pid_t + + $g�_d�m�_pid +(cڡ * +pid_f�e +) + +203 +FILE + * +f +; + +204 +pid_t + +pid +; + +206 i�(( +f + = + `fݒ +( +pid_f�e +, "rb")�!� +NULL +) + +208 +pid_ascii +[ +PID_ASCII_SIZE +]; + +209 () + `fg�s +( +pid_ascii +, +PID_ASCII_SIZE +, +f +); + +210 () + `f�o� +( +f +); + +211 +pid + = + `�oi +( +pid_ascii +); + +215 + `log_�l +("C�'�ݒ PID�ec�d f��%s: %s\n", +pid_f�e +, + `���� +( +��o +)); + +218 +pid +; + +219 + } +} + +228 + $check_d�m�_rug +(cڡ * +pid_f�e +) + +230 +�tV� + = -1; + +231 +�� + +fS�tBuf +; + +233 +�tV� + = + `�� +( +pid_f�e +, & +fS�tBuf +); + +234 i�(0 =� +�tV� +) + +236 +pid_t + +pid + = -1; + +237 + `��tf +("PID�ec�d f��\"%s\"�xi�.\n", +pid_f�e +); + +239 +pid + = + `g�_d�m�_pid +( +pid_f�e +); + +240 i�( +pid + > 0) + +242 i�(( +�tV� + = + `k�l +( +pid +, 0)) == 0) + +244 + `��tf +("Prog�m w�h PID[%d] s�m�rug.\n", +pid +); + +249 + `��tf +("Prog�m w�h PID[%d] s�m�ex�.\n", +pid +); + +250 + `�move +( +pid_f�e +); + +254 i�(0 =� +pid +) + +256 + `��tf +("Can�ot�ead�rogram PID form�ecord file.\n"); + +257 + `�move +( +pid_f�e +); + +262 + `��tf +("R�d�ec�d f��\"%s\" fa�u�, mayb��og�m st��rug.\n", +pid_f�e +); + +268 + } +} + +278 + $�t_d�m�_rug +(cڡ * +pid_f�e +) + +280 + `d�m�ize +(0, 1); + +281 + `log_�ml +("Prog�m�ug��d�m� [PID:%d].\n", + `g�pid +()); + +283 i�( + `�c�d_d�m�_pid +( +pid_f�e +) < 0) + +285 + `log_�l +("Rec�d PID��f��\"%s\" fa�u�.\n", +pid_f�e +); + +290 + } +} + +293 + $th�ad_��t +( +�h�ad_t + * +th�ad_id +, +THREAD_BODY + * +th�ad_w�kbody +, * +th�ad_�g +) + +295 +�tv� + = 0; + +297 +�h�ad_��_t + +th�ad_�� +; + +300 +�tv� + = + `�h�ad_��_�� +(& +th�ad_�� +); + +301 if( +�tv� +) + +305 +�tv� + = + `�h�ad_��_�t�acksize +(& +th�ad_�� +, 120 * 1024); + +306 if( +�tv� +) + +307 +C˪Up +; + +310 +�tv� + = + `�h�ad_��_�td�ach��e +(& +th�ad_�� +, +PTHREAD_CREATE_DETACHED +); + +311 if( +�tv� +) + +312 +C˪Up +; + +315 +�tv� + = + `�h�ad_��� +( +th�ad_id +, & +th�ad_�� +, +th�ad_w�kbody +, +th�ad_�g +); + +316 if( +�tv� +) + +317 +C˪Up +; + +319 +C˪Up +: + +321 + `�h�ad_��_de�roy +(& +th�ad_�� +); + +322 +�tv� +; + +323 + } +} + +326 + $exec_sy�em_cmd +(cڡ * +f�m� +, ...) + +328 +cmd +[256]; + +329 +va_li� + +�gs +; + +330 +d�e +; + +332 + `mem�t +( +cmd +, 0, (cmd)); + +334 + `va_��t +( +�gs +, +f�m� +); + +335 +d�e + = + `v���tf +( +cmd +, (cmd), +f�m� +, +�gs +); + +336 + `va_�d +( +�gs +); + +338 + `sy�em +( +cmd +); + +339 + } +} + + @cp_proc.h + +14 #i�de� +__CP_PROC_H + + +15 + #__CP_PROC_H + + + ) + +17 + ~<sig�l.h +> + +19 + #PID_ASCII_SIZE + 11 + + ) + +21 + s__CP_PROC_SIG + + +23 + msig�l +; + +24 + m�� +; + +25 } + tCP_PROC_SIG +; + +27 *( + tTHREAD_BODY +�(* + tth�ad_�g +); + +29 +CP_PROC_SIG + +g_�_sig�l +; + +30 +�_���l_�oc_sig�l +(); + +32 +d�m�ize +( +nochd� +, +no�o� +); + +33 +�c�d_d�m�_pid +(cڡ * +pid_f�e +); + +34 +pid_t + +g�_d�m�_pid +(cڡ * +pid_f�e +); + +35 +check_d�m�_rug +(cڡ * +pid_f�e +); + +36 +�t_d�m�_rug +(cڡ * +pid_f�e +); + +38 +exec_sy�em_cmd +(cڡ * +f�m� +, ...); + +40 +th�ad_��t +( +�h�ad_t + * +th�ad_id +, +THREAD_BODY + * +th�ad_w�kbody +, * +th�ad_�g +); + + @cp_queue.c + +14 + ~"�_queue.h +" + +15 + ~"�_comm�.h +" + +17 +CP_QUEUE + * + $�_queue_�� +( +CP_QUEUE + * +queue +, +size +) + +19 if(! +queue +) + +21 +queue + = + `t_m�loc +((*queue)); + +23 + `mem�t +( +queue +, 0, (*queue)); + +25 +queue +-> +size + = size; + +26 +queue +-> +�ems + = 0; + +27 +queue +-> +�� + = queue-> +��t + = +NULL +; + +29 +queue +; + +30 + } +} + +32 * + $�_�queue +( +CP_QUEUE + * +queue +, * +d�a +) + +34 +CP_QNODE + * +node +; + +36 if(! +queue + || + `�_queue_is_fu� +(queue)) + +38 +NULL +; + +41 +node + = + `t_m�loc +((*node)); + +42 if( +NULL + =� +node +) + +44 +NULL +; + +47 +node +-> +�em + = +d�a +; + +48 +node +-> +�xt + = +NULL +; + +50 if( + `�_queue_is_em�y +( +queue +)) + +52 +queue +-> +��t + = +node +; + +56 +queue +-> +�� +-> +�xt + = +node +; + +59 +queue +-> +�� + = +node +; + +60 +queue +-> +�ems +++; + +62 +d�a +; + +63 + } +} + +65 + $�_�av�_queue +( +CP_QUEUE + * +queue +) + +67 +CP_QNODE + * +node +; + +69 +node += +queue +-> +��t +;�ode!= +NULL +;�ode�ode-> +�xt +) + +71 + `��tf +("queu�node[%p] sav�d��[%p]\n", +node +,�ode-> +�em +); + +73 + } +} + +75 * + $�_rmqueue +( +CP_QUEUE + * +queue +, * +d�a +) + +77 +CP_QNODE + * +node +, * +tmp +; + +79 if(! +queue + || + `�_queue_is_em�y +(queue)) + +81 +NULL +; + +85 if( +queue +-> +��t +-> +�em +== +d�a +) + +87 +tmp + = +queue +-> +��t +; + +88 +queue +-> +��t + = queue->��t-> +�xt +; + +89 +queue +-> +�ems + -= 1; + +90 + `t_� +( +tmp +); + +91 +d�a +; + +94 +node += +queue +-> +��t +;�ode!= +NULL +;�ode�ode-> +�xt +) + +96 if( +node +-> +�xt +-> +�em + =� +d�a +) + +98 +tmp + = +node +-> +�xt +; + +99 +queue +-> +�ems + -= 1; + +101 if( +node +-> +�xt + !� +queue +-> +�� +) + +102 +node +-> +�xt + =�ode->next->next; + +105 +queue +-> +�� + = +node +; + +106 +queue +-> +�� +-> +�xt + = +NULL +; + +109 + `t_� +( +tmp +); + +110 +d�a +; + +114 +d�a +; + +115 + } +} + +117 * + $�_dequeue +( +CP_QUEUE + * +queue +) + +119 +CP_QNODE + * +node +; + +120 * +�em +; + +122 if(! +queue + || + `�_queue_is_em�y +(queue)) + +124 +NULL +; + +127 +node + = +queue +-> +��t +; + +128 +queue +-> +��t + = queue->��t-> +�xt +; + +130 +�em + = +node +->item; + +131 + `t_� +( +node +); + +133 +queue +-> +�ems +--; + +135 if( +queue +-> +�ems + == 0) + +136 +queue +-> +�� + = +NULL +; + +138 +�em +; + +139 + } +} + +141 + $�_queue_de�roy +( +CP_QUEUE + * +queue +) + +143 if(! +queue +) + +146 ! + `�_queue_is_em�y +( +queue +) ) + +148 + `�_dequeue +( +queue +); + +151 + `t_� +( +queue +); + +154 + } +} + + @cp_queue.h + +13 #i�de� +__CP_QUEUE + + +14 + #__CP_QUEUE + + + ) + +16 + ~<�dio.h +> + +17 + ~<uni�d.h +> + +18 + ~<�dlib.h +> + +19 + ~<�r�g.h +> + +21 + s_CP_QNODE + + +23 * + m�em +; + +24 +_CP_QNODE + * + m�xt +; + +25 } + tCP_QNODE +; + +28 + s_CP_QUEUE + + +30 +CP_QNODE + * + m��t +; + +31 +CP_QNODE + * + m�� +; + +32 + m�ems +; + +33 + msize +; + +34 } + tCP_QUEUE +; + +36 + #�_queue_is_fu� +( +pq +���q)-> +size +==�q)-> +�ems + ? 1 :0 ) + + ) + +37 + #�_queue_is_em�y +( +pq +��0==�q)-> +�ems + ? 1 : 0) + + ) + +38 + #�_queue_cou� +( +pq +���q)-> +�ems + ) + + ) + +39 + #�_queue_size +( +pq +���q)-> +size + ) + + ) + +41 +CP_QUEUE + * +�_queue_�� +(CP_QUEUE * +queue +, +size +); + +42 * +�_�queue +( +CP_QUEUE + * +queue +, * +d�a +); + +43 +�_�av�_queue +( +CP_QUEUE + * +queue +); + +44 * +�_rmqueue +( +CP_QUEUE + * +queue +, * +d�a +); + +45 * +�_dequeue +( +CP_QUEUE + * +queue +); + +46 +�_queue_de�roy +( +CP_QUEUE + * +queue +); + +47 + #�_queue_de�roy_��r +( +queue +�{ + `�_queue_de�roy +(queue); queue= +NULL +;} + + ) + + @cp_ringbuf.c + +22 + ~<�r�g.h +> + +23 + ~<as��.h +> + +24 + ~"�_r�gbuf.h +" + +26 + $rb_�� + ( +r�g_buf�r + * +r�g +, +u_ch� +* +buff +, +size +) { + +27 + `mem�t + ( +r�g +, 0, ( +r�g_buf�r +)); + +28 +r�g +-> +rd_po��r + = 0; + +29 +r�g +-> +wr_po��r + = 0; + +30 +r�g +-> +buf�r +� +buff +; + +31 +r�g +-> +size + = size; + +32 + } +} + +35 + $rb_wr�e + ( +r�g_buf�r + * +rb +, +u_ch� + * +buf +, +�n +) + +37 +tٮ +; + +38 +i +; + +41 +tٮ + = + `rb_�_size +( +rb +); + +42 if( +�n + > +tٮ +) + +43 +�n + = +tٮ +; + +45 +tٮ + = +�n +; + +47 +i + = +rb +-> +wr_po��r +; + +48 if( +i + + +�n + > +rb +-> +size +) + +50 + `mem�y +( +rb +-> +buf�r + + +i +, +buf +,�b-> +size + - i); + +51 +buf + +� +rb +-> +size + - +i +; + +52 +�n + -� +rb +-> +size + - +i +; + +53 +i + = 0; + +55 + `mem�y +( +rb +-> +buf�r + + +i +, +buf +, +�n +); + +56 +rb +-> +wr_po��r + = +i + + +�n +; + +57 +tٮ +; + +58 + } +} + +60 + $rb_�_size + ( +r�g_buf�r + * +rb +){ + +61 ( +rb +-> +size + - 1 - + `rb_d�a_size +(rb)); + +62 + } +} + +64 + $rb_�ad + ( +r�g_buf�r + * +rb +, +u_ch� + * +buf +, +max +) { + +65 +tٮ +; + +66 +i +; + +68 +tٮ + = + `rb_d�a_size +( +rb +); + +70 if( +max + > +tٮ +) + +71 +max + = +tٮ +; + +73 +tٮ + = +max +; + +75 +i + = +rb +-> +rd_po��r +; + +76 if( +i + + +max + > +rb +-> +size +) + +78 + `mem�y +( +buf +, +rb +-> +buf�r + + +i +,�b-> +size + - i); + +79 +buf + +� +rb +-> +size + - +i +; + +80 +max + -� +rb +-> +size + - +i +; + +81 +i + = 0; + +83 + `mem�y +( +buf +, +rb +-> +buf�r + + +i +, +max +); + +84 +rb +-> +rd_po��r + = +i + + +max +; + +86 +tٮ +; + +87 + } +} + +89 + $rb_d�a_size + ( +r�g_buf�r + * +rb +) { + +90 (( +rb +-> +wr_po��r + -�b-> +rd_po��r +�& (rb-> +size +-1)); + +91 + } +} + +93 + $rb_��r + ( +r�g_buf�r + * +rb +) { + +94 + `mem�t +( +rb +-> +buf�r +,0,rb-> +size +); + +95 +rb +-> +rd_po��r +=0; + +96 +rb +-> +wr_po��r +=0; + +97 + } +} + +99 +u_ch� + + $rb_�ek +( +r�g_buf�r +* +rb +, +�dex +) { + +100 + `as�� +( +�dex + < + `rb_d�a_size +( +rb +)); + +102 +rb +-> +buf�r +[(�b-> +rd_po��r + + +�dex +�%�b-> +size +)]; + +103 + } +} + + @cp_ringbuf.h + +21 #i�de� +__CP_RINGBUF_H_ + + +22 + #__CP_RINGBUF_H_ + + + ) + +24 + ~<sys/ty�s.h +> + +26 + sr�g_buf�r + { + +27 +u_ch� + * + mbuf�r +; + +28 + mwr_po��r +; + +29 + mrd_po��r +; + +30 + msize +; + +34 +rb_�� + ( +r�g_buf�r + * +r�g +, +u_ch� +* +buff +, +size +) ; + +40 +rb_wr�e + ( +r�g_buf�r + * +rb +, +u_ch� + * +buf +, +�n +) ; + +43 +rb_�_size + ( +r�g_buf�r + * +rb +); + +46 +rb_�ad + ( +r�g_buf�r + * +rb +, +u_ch� + * +buf +, +max +); + +49 +u_ch� + +rb_�ek +( +r�g_buf�r +* +rb +, +�dex +); + +52 +rb_d�a_size + ( +r�g_buf�r + *); + +55 +rb_��r + ( +r�g_buf�r + * +rb +) ; + + @cp_sock.c + +14 + ~"�_sock.h +" + +15 + ~"�_logg�.h +" + +16 + ~"�_comm�.h +" + +17 + ~"�_time.h +" + +19 +CP_SOCK + * + $�_sock_�� +( +CP_SOCK + * +sock +, +rsize +, +ssize +, +k�p�tvl +, +k�p�t +) + +21 if(! +sock +) + +23 if�!( +sock +=( +CP_SOCK + *) + `t_m�loc +((*sock))) ) + +25 + `log_�r +("sock� cڋx�m�lo��ed: %s\n", + `���� +( +��o +)); + +26 +�ed +; + +30 + `mem�t +( +sock +, 0, (*sock)); + +31 +sock +-> +�ag + |� +FLAG_SOCK_MALLOC +; + +36 + `mem�t +( +sock +, 0, (*sock)); + +39 if�!( +sock +-> +rbuf += + `�_�r�g_���_em�y +( +CP_DEF_RCVBUF_SIZE +)) ) + +41 + `log_�r +("socket context create�ecv buffer failed\n"); + +42 + `�_sock_�rm +( +sock +); + +43 +�ed +; + +46 if�!( +sock +-> +sbuf += + `�_�r�g_���_em�y +( +CP_DEF_SNDBUF_SIZE +)) ) + +48 + `log_�r +("socket context create send buffer failed\n"); + +49 + `�_sock_�rm +( +sock +); + +50 +�ed +; + +53 + `log_dbg +("sock� cڋx�[%p] in��li� ok\n", +sock +); + +54 +sock +-> +rsize + =�size; + +55 +sock +-> +ssize + = ssize; + +56 +sock +-> +k�p�tvl + = keepintvl; + +57 +sock +-> +k�p�t + = keepcnt; + +58 +sock +-> +id�_timeout + = +CP_SOCK_DEF_IDLE_TIMEOUT +; + +59 +sock +-> +msg_timeout + = +CP_SOCK_DEF_MSG_TIMEOUT +; + +60 +sock +-> +fd + = -1; + +61 +sock +-> +�dex + = -1; + +62 +sock +-> +a�v_time + = + `time_now +(); + +64 +sock +-> +�ag + |� +FLAG_SOCK_INIT +; + +66 +sock +; + +68 +�ed +: + +69 + `log_�r +("socket context initialize failed\n"); + +70 +NULL +; + +71 + } +} + +73 + $�_sock_�rm +( +CP_SOCK + * +sock +) + +75 if(! +sock +) + +78 + `log_dbg +("�rm���sock� [%p:%d]�ow\n", +sock +, sock-> +fd +); + +80 if( +sock +-> +�ag + & +FLAG_SOCK_INIT +) + +81 + `�_sock_�o� +( +sock +); + +83 if( +sock +-> +rbuf +) + +85 + `�_�r�g_de�roy +( +sock +-> +rbuf +); + +88 if( +sock +-> +�ivt + && sock-> +�ivt_� +) + +90 +sock +-> + `�ivt_� +(); + +93 if( +sock +-> +sbuf +) + +95 + `�_�r�g_de�roy +( +sock +-> +sbuf +); + +98 if( +sock +-> +�ag + & +FLAG_SOCK_MALLOC +) + +101 + `t_� +( +sock +); + +106 +sock +-> +fd + = -1; + +109 + } +} + +111 + $�_sock_�o� +( +CP_SOCK + * +sock +) + +113 +rv + = 0; + +114 +f�� + = 0; + +116 if(! +sock +) + +119 if( +sock +-> +fd +>0) + +121 + `log_dbg +("Clo� sock�[%d] b�d [%s:%d]\n", +sock +-> +fd +, sock-> +�ddr +, sock-> +��t +); + +122 if( +f�� +) + +129 +l�g� + +so_l�g� +; + +131 +so_l�g� +. +l_�off + = 1; + +132 +so_l�g� +. +l_l�g� + = 0; + +134 + `�tsock�t + ( +sock +-> +fd +, +SOL_SOCKET +, +SO_LINGER +, (*�& +so_l�g� +, ( +l�g� +)); + +137 if( +CP_SOCK_MODE_ACCEPT + =� +sock +-> +mode + || +CP_SOCK_MODE_CONNECT + == sock->mode) + +139 + `shutdown + ( +sock +-> +fd +, +SHUT_RDWR +); + +142 if�( +rv += + `�o� +( +sock +-> +fd +)) ) + +148 +sock +-> +fd + = -1; + +149 +rv +; + +150 + } +} + +153 + $�_sock_li�� +( +CP_SOCK + * +sock +, * +�ddr +, +��t +, +backlog +) + +155 +rv + = 0; + +156 +fd + = -1; + +157 +�rvi� +[20]; + +158 +addr�fo + +h�ts +, * +� +; + +159 +addr�fo + * +�s + = +NULL +; + +160 +�_addr + +�addr +; + +162 if(! +sock + || !(sock-> +�ag +& +FLAG_SOCK_INIT +�|| +��t +<=0 || +backlog + <=0) + +164 + `log_�r +("Invalide input�rguments\n"); + +165 +rv + = -1; + +166 +��nup +; + +169 + `���y +( +sock +-> +�ddr +, (!laddr?"0.0.0.0":laddr), (sock->laddr)); + +170 + `log_dbg +("C���sock��i�� o�[%s:%d]�ow\n", +sock +-> +�ddr +, +��t +); + +172 + `�_sock_�o� +( +sock +); + +174 + `mem�t +(& +h�ts +, 0, ( +addr�fo +)); + +175 +h�ts +. +ai_�m�y + = +AF_INET +; + +176 +h�ts +. +ai_sockty� + = +SOCK_STREAM +; + +177 +h�ts +. +ai_��oc� + = +IPPROTO_TCP +; + +178 +h�ts +. +ai_�ags + = +AI_PASSIVE +; + +181 if( +�ddr + && + `��_�� +�addr, & +�addr +)) + +183 + `log_�fo +("%�i��v�id IP�dd�ss, d�'�u��am��s�uti�.\n", +�ddr +); + +184 +h�ts +. +ai_�ags + |� +AI_NUMERICHOST +; + +188 + `���tf +( +�rvi� +, (�rvi�), "%d", +��t +); + +189 if�( +rv += + `g�addr�fo +( +�ddr +, +�rvi� +, & +h�ts +, & +�s +)) ) + +191 + `log_�r +("g�addr�fo(�r��[%s:%s] fa�ed: %s\n", +�ddr +, +�rvi� +, + `gai_���� +( +rv +)); + +192 +rv + = -2; + +193 +��nup +; + +199 +sock +-> +fd + = -1; + +200 +� += +�s +;�p!= +NULL +;�p�p-> +ai_�xt +) + +203 if�( +fd += + `sock� +( +� +-> +ai_�m�y +,�p-> +ai_sockty� +,�p-> +ai_��oc� +)) < 0) + +205 + `log_�r +("sock�(���� fa�ed: %s\n", + `���� +( +��o +)); + +206 +rv + = -3; + +210 + `�_sock_�t_�u�addr +( +fd +); + +211 + `�_sock_�t_k��live +( +fd +, +sock +-> +k�p�tvl +, sock-> +k�p�t +); + +212 + `�_sock_�t_n�block +( +fd +); + +214 if�0== + `b�d +( +fd +, +� +-> +ai_addr +,�p-> +ai_add�� +) ) + +216 +sockaddr_� + * +�ddr + = (sockaddr_� *) +� +-> +ai_addr +; + +217 +sock +-> +fd + = fd; + +218 +sock +-> +��t + =�port; + +220 + `���y + ( +sock +-> +�ddr +, + `��_�� + ( +�ddr +-> +s�_addr +), (sock->laddr)-1); + +221 + `log_dbg +("B�d sock�[%d] ok\n", +fd +); + +222 +rv + = 0; + +227 +rv + = -4; + +228 + `log_�r +("B�d sock�[%d] fa�ed: %s\n", +fd +, + `���� +( +��o +)); + +231 + `�o� +( +fd +); + +235 if( +sock +-> +fd + < 0) + +237 + `�o� +( +fd +); + +238 +��nup +; + +241 if( + `li�� +( +sock +-> +fd +, +backlog +)) + +243 + `log_�r +("Li�� o�sock�[%d] fa�ed: %s\n", +sock +-> +fd +, + `���� +( +��o +)); + +244 +rv + = -6; + +245 +��nup +; + +248 +sock +-> +mode + = +CP_SOCK_MODE_LISTEN +; + +249 +sock +-> +��t + = 0; + +250 + `mem�t +(& +sock +-> +�ddr +, 0, (sock->raddr)); + +252 +��nup +: + +253 if� +rv + ) + +255 + `log_�r +("C���sock��i�� o�[%s:%d] fa�ed\n", +sock +-> +�ddr +, +��t +); + +256 if( +sock +-> +fd + > 0) + +257 + `�o� +( +sock +-> +fd +); + +261 +sock +-> +a�v_time + = + `time_now +(); + +262 +sock +-> +��us + = +SOCK_STAT_LISTENED +; + +263 + `log_�ml +("C���sock�[%p:%d]�i�� [%s:%d] ok\n", +sock +, sock-> +fd +, sock-> +�ddr +, +��t +); + +266 if( +�s +) + +267 + `�addr�fo +( +�s +); + +268 +rv +; + +269 + } +} + +272 + $�_sock_ac�� +( +CP_SOCK + * +�rv_sock +, CP_SOCK * +�w_sock +) + +274 +sockaddr_� + +�ddr +; + +275 +sock�n_t + +�n + = ( +�ddr +); + +276 +fd + = -1; + +277 +rv + = 0; + +279 if(! +�rv_sock + || ! +�w_sock + || s�v_sock-> +fd +<0 ) + +281 + `log_�r +("Invalide input�rguments\n"); + +282 +rv + = -1; + +283 +��nup +; + +286 + `log_dbg +("ac���ew cl�� from s�v� [fd=%d %s:%d]�ow\n", +�rv_sock +-> +fd +, s�v_sock-> +�ddr +, s�v_sock-> +��t +); + +288 if�( +fd += + `ac�� +( +�rv_sock +->fd, ( +sockaddr + *)& +�ddr +, & +�n +)) < 0 ) + +290 + `log_�r +("Accept�ew client from server [fd=%d %s:%d] failed: %s\n", + +291 +�rv_sock +-> +fd +, s�v_sock-> +�ddr +, s�v_sock-> +��t +, + `���� +( +��o +)); + +292 +rv + = -2; + +293 +��nup +; + +297 + `�_sock_�t_buf�r +( +fd +, +�w_sock +-> +rsize +,�ew_sock-> +ssize +); + +299 + `�_sock_�t_k��live +( +fd +, +�w_sock +-> +k�p�tvl +,�ew_sock-> +k�p�t +); + +300 + `�_sock_�t_n�block +( +fd +); + +302 +�w_sock +-> +fd + = fd; + +303 +�w_sock +-> +mode + = +CP_SOCK_MODE_ACCEPT +; + +305 + `���y + ( +�w_sock +-> +�ddr +, + `��_�� +( +�ddr +. +s�_addr +), (new_sock->raddr)-1); + +306 +�w_sock +-> +��t + = + `�ohs +( +�ddr +. +s�_p�t +); + +309 +�n + = ( +�ddr +); + +310 i�( + `g�sock�me + ( +�w_sock +-> +fd +, ( +sockaddr + *�& +�ddr +, ( +sock�n_t + *�& +�n +)) + +312 + `���y +( +�w_sock +-> +�ddr +, +�rv_sock +->laddr, (new_sock->laddr)-1); + +313 +�w_sock +-> +��t + = +�rv_sock +->lport; + +317 + `���y + ( +�w_sock +-> +�ddr +, + `��_�� + ( +�ddr +. +s�_addr +), (new_sock->laddr) - 1); + +318 +�w_sock +-> +��t + = + `�ohs + ( +�ddr +. +s�_p�t +); + +321 +��nup +: + +322 if(! +rv +) + +324 +�w_sock +-> +��us + = +SOCK_STAT_ACCEPTED +; + +325 +�w_sock +-> +a�v_time + = + `time_now +(); + +326 + `log_�ml +("Accept�ew client socket [%d %s:%d] <== [%s:%d]\n", + +327 +�w_sock +-> +fd +,�ew_sock-> +�ddr +,�ew_sock-> +��t +,�ew_sock-> +�ddr +,�ew_sock-> +��t +); + +331 + `log_�r +("Accept�ew client from server [%d] on [%s:%d] failed\n", + +332 +�rv_sock +-> +fd +, s�v_sock-> +�ddr +, s�v_sock-> +��t +); + +333 + `�o� +( +fd +); + +336 +rv +; + +337 + } +} + +349 + $�_sock_c��� +( +CP_SOCK + * +sock +, * +�ddr +, +��t +, +��t +) + +351 +rv + = 0; + +352 +fd + = -1; + +353 +�rvi� +[20]; + +354 +addr�fo + +h�ts +, * +� +; + +355 +addr�fo + * +�s + = +NULL +; + +356 +�_addr + +�addr +; + +357 +sockaddr_� + +�ddr +; + +358 +�n + = ( +�ddr +); + +360 if(! +sock + || !(sock-> +�ag +& +FLAG_SOCK_INIT +�|| ! +�ddr + || +��t +<=0) + +362 + `log_�r +("Invalide input�rguments\n"); + +363 +rv + = -1; + +364 +�ed +; + +367 if( +SOCK_STAT_CONNECTED + =� +sock +-> +��us +) + +371 if( +SOCK_STAT_CONNECTING + =� +sock +-> +��us +) + +373 +c����g +; + +376 + `log_dbg +("��� sock� c����ػmِ�rv� [%s:%d]�ow\n", +�ddr +, +��t +); + +378 + `mem�t +(& +h�ts +, 0, ( +addr�fo +)); + +379 +h�ts +. +ai_�m�y + = +AF_INET +; + +380 +h�ts +. +ai_sockty� + = +SOCK_STREAM +; + +381 +h�ts +. +ai_��oc� + = +IPPROTO_TCP +; + +382 +h�ts +. +ai_�ags + = +AI_PASSIVE +; + +385 if( +�ddr + && + `��_�� +�addr, & +�addr +)) + +387 + `log_�fo +("%�i��v�id IP�dd�ss, d�'�u��am��s�uti�.\n", +�ddr +); + +388 +h�ts +. +ai_�ags + |� +AI_NUMERICHOST +; + +392 + `���tf +( +�rvi� +, (�rvi�), "%d", +��t +); + +393 if�( +rv += + `g�addr�fo +( +�ddr +, +�rvi� +, & +h�ts +, & +�s +)) ) + +395 + `log_�r +("g�addr�fo(�r��[%s:%s] fa�ed: %s\n", +�ddr +, +�rvi� +, + `gai_���� +( +rv +)); + +396 +rv + = -2; + +397 +�ed +; + +400 + `�_sock_�o� +( +sock +); + +401 +sock +-> +fd + = -1; + +405 +� += +�s +;�p!= +NULL +;�p�p-> +ai_�xt +) + +407 +fd + = + `sock� +( +� +-> +ai_�m�y +,�p-> +ai_sockty� +,�p-> +ai_��oc� +); + +410 if� +fd + < 0) + +412 + `log_�r +("sock�(���� fa�ed: %s\n", + `���� +( +��o +)); + +413 +rv + = -3; + +416 + `log_�a� +("��� sock�[%p:%d] w�h c��� mod�ok\n", +sock +, +fd +); + +419 if( +��t + > 0) + +421 + `mem�t +(& +�ddr +, 0, +�n +); + +422 +�ddr +. +s�_�m�y + = +AF_INET +; + +423 +�ddr +. +s�_p�t + = + `ht�s + (( +u_sh�t +� +��t +); + +425 i�� + `b�d +( +fd +, ( +sockaddr + *)& +�ddr +, +�n +) ) + +427 +rv + = -4; + +428 + `�o� +( +fd +); + +429 + `log_�r +("B�d��t[%d]��c��� sock� [%d] fa�ed: %s\n", +��t +, +fd +, + `���� +( +��o +)); + +434 +sock +-> +��t + =�port; + +435 +rv + = 0; + +436 + `log_dbg +("B�d��t[%d]��c��� sock� [%d] OK\n", +��t +, +fd +); + +441 + `�_sock_�t_buf�r +( +fd +, +sock +-> +rsize +, sock-> +ssize +); + +442 + `�_sock_�t_k��live +( +fd +, +sock +-> +k�p�tvl +, sock-> +k�p�t +); + +443 + `�_sock_�t_n�block +( +fd +); + +446 if(0== + `c��� +( +fd +, +� +-> +ai_addr +,�p-> +ai_add�� +)) + +449 +sock +-> +fd + = fd; + +450 +sock +-> +��us + = +SOCK_STAT_CONNECTING +; + +452 + `mem�y +(& +sock +-> +�ddr +, & +� +-> +ai_addr +, (sock->saddr)); + +454 +rv + = 0; + +455 +c���ed +; + +459 if( +EINPROGRESS + =� +��o +) + +462 +sock +-> +fd + = fd; + +463 +sock +-> +��us + = +SOCK_STAT_CONNECTING +; + +464 + `mem�y +(& +sock +-> +�ddr +, & +� +-> +ai_addr +, (sock->saddr)); + +466 +rv + = 0; + +467 +c����g +; + +472 + `�o� +( +fd +); + +473 +rv + = -5; + +474 + `log_�r +("c���(�tأrv� fa�ed: %s\n", + `���� +( +��o +)); + +475 +�ed +; + +479 + `�o� +( +fd +); + +483 if( +sock +-> +fd + < 0) + +485 + `�o� +( +fd +); + +486 +�ed +; + +490 +c����g +: + +491 if( +SOCK_STAT_CONNECTING + =� +sock +-> +��us +) + +494 +�n + = ( +sock +-> +�ddr +); + +496 +��o + = 0; + +497 if�! + `c��� +( +sock +-> +fd +, &sock-> +�ddr +, +�n +) ) + +500 +sock +-> +��us + = +SOCK_STAT_CONNECTED +; + +501 +rv + = 0; + +502 +c���ed +; + +506 +��o +) + +508 +EISCONN +: + +509 +sock +-> +��us + = +SOCK_STAT_CONNECTED +; + +510 +rv + = 0; + +511 +c���ed +; + +513 +EALREADY +: + +514 +EINPROGRESS +: + +515 + `log_dbg +("sock�[%d] c����ػmِ[%s:%d] i��og�ss\n", +sock +-> +fd +, +�ddr +, +��t +); + +516 +rv + = 0; + +517 +��nup +; + +520 + `log_�r +("sock�[%d] c����ػmِ[%s:%d] fa�ed: %s\n", +sock +-> +fd +, +�ddr +, +��t +, + `���� +( +��o +)); + +521 +sock +-> +��us + = +SOCK_STAT_DISCONNECT +; + +522 +rv + = -7; + +527 +c���ed +: + +528 if( +SOCK_STAT_CONNECTED + =� +sock +-> +��us +) + +530 +rv + = 0; + +532 + `log_�ml +("sock�[%d] c���ed�ػmِ�rv� [%s:%d]\n", +sock +-> +fd +, +�ddr +, +��t +); + +534 +sock +-> +��t +=rport; + +535 + `���y + ( +sock +-> +�ddr +,�addr, (sock->raddr)-1); + +536 +sock +-> +a�v_time + = + `time_now +(); + +539 + `mem�t +(& +�ddr +, 0, +�n +); + +540 +�n + = ( +�ddr +); + +542 i�(! + `g�sock�me + ( +sock +-> +fd +, ( +sockaddr + *�& +�ddr +, ( +sock�n_t + *�& +�n +)) + +544 + `���y + ( +sock +-> +�ddr +, + `��_�� + ( +�ddr +. +s�_addr +), (sock->laddr) - 1); + +545 +sock +-> +��t + = + `�ohs + ( +�ddr +. +s�_p�t +); + +549 + `mem�t +(& +sock +-> +�ddr +, 0, (sock->laddr)); + +550 +sock +-> +��t + =�port; + +552 +��nup +; + +556 +�ed +: + +557 + `log_�r +("C���sock� c�����[%s:%d] fa�ed\n", +�ddr +, +��t +); + +558 if( +sock + && sock-> +fd + >= 0) + +559 + `�o� +( +sock +-> +fd +); + +561 +��nup +: + +562 if( +�s +) + +563 + `�addr�fo +( +�s +); + +565 +rv +; + +566 + } +} + +569 + $�_sock_�cv +( +CP_SOCK + * +sock +) + +571 +rv +, +�� +; + +572 +�ag +; + +573 +�_�r�g + * +rbuf +; + +575 if(! +sock + || !sock-> +rbuf + || !sock->rbuf-> +d�a + || sock-> +fd +<0) + +577 + `log_�r +("Invalide input�rguments\n"); + +581 +rbuf + = +sock +->rbuf; + +582 +�� + = +rbuf +-> +size +-rbuf-> +�n +; + +583 +�ag + = +�� + ? 0 : +MSG_PEEK +; + +585 if( +�� + <= 0) + +588 +rv += + `�cv +( +sock +-> +fd +, & +rbuf +-> +d�a +[rbuf-> +�n +], +�� +, +�ag +); + +589 if� +rv + > 0) + +591 +rbuf +-> +�n + +� +rv +; + +593 if( +rv +<0) + +595 if( +EAGAIN +== +��o + || +EINPROGRESS +==errno) + +597 + `log_w�n +("sock� [%d]��a��ecv d��aga�: %s\n", +sock +-> +fd +, + `���� +( +��o +)); + +598 +rv + = 0; + +602 + `log_�r +("sock� [%d]�ecv d���ed: %s\n", +sock +-> +fd +, + `���� +( +��o +)); + +603 +rv + = -2; + +607 if( +rv + > 0) + +609 +sock +-> +a�v_time + = sock-> +msg_time + = + `time_now +(); + +611 +rv +; + +612 + } +} + +614 + $�_sock_�nd +( +CP_SOCK + * +sock +) + +616 +rv +; + +617 +p�lfd + +sock_p�l +; + +619 if(! +sock + || sock-> +fd +<0 || !sock-> +sbuf +-> +d�a + || sock->sbuf-> +�n +<=0) + +621 + `log_�r +("Invalide input�rguments\n"); + +625 +sock_p�l +. +ev�ts + = +POLLOUT +; + +626 +sock_p�l +. +fd + = +sock +->fd; + +628 if�( +rv += + `p�l +(& +sock_p�l +, 1, 0)) > 0 ) + +630 if�!( +POLLOUT + & +sock_p�l +. +ev�ts +) ) + +635 i��( +rv += + `�nd +( +sock +-> +fd +, sock-> +sbuf +-> +d�a +, sock->sbuf-> +�n +, +MSG_NOSIGNAL +)) < 0) + +637 i�( +EAGAIN + =� +��o +) + +639 + `log_w�n +("sock� [%d]��a� s�d d��aga�: %s\n", +sock +-> +fd +, + `���� +( +��o +)); + +644 + `log_�r +("sock� [%d] s�d d���ed: %s\n", +sock +-> +fd +, + `���� +( +��o +)); + +650 +sock +-> +sbuf +-> +�n + -� +rv +; + +651 +sock +-> +a�v_time + = + `time_now +(); + +652 + `memmove + ( +sock +-> +sbuf +-> +d�a +, sock->sbuf->d�a+ +rv +, sock->sbuf-> +�n +); + +653 +rv +; + +658 + `log_�r +("�nd d���om sock� [%d]����ed: %s\n", +sock +-> +fd +, + `���� +( +��o +)); + +663 + } +} + +665 + $�_sock_�t_n�block +( +sockfd +) + +667 +�ts +; + +695 +�ts + = + `f�� +( +sockfd +, +F_GETFL +); + +696 i�( +�ts + < 0) + +698 + `log_w�n +("f��(�g� sock� o�iڠ�u�: %s\n", + `���� +( +��o +)); + +702 +�ts + |� +O_NONBLOCK +; + +704 i�( + `f�� +( +sockfd +, +F_SETFL +, +�ts +) < 0) + +706 + `log_w�n +("f��(裈sock� o�iڠ�u�: %s\n", + `���� +( +��o +)); + +710 + `log_dbg +("S� sock�[%d]�ڐblock�g\n", +sockfd +); + +711 +�ts +; + +712 + } +} + +714 + $�_sock_�t_buf�r +( +sockfd +, +rsize +, +ssize +) + +716 +�t +; + +717 +sock�n_t + +ݎ� + = ( +�t +); + +719 if( +sockfd + < 0) + +723 i�( + `g�sock�t + ( +sockfd +, +SOL_SOCKET +, +SO_RCVBUF +, (*�& +�t +, & +ݎ� +)) + +725 + `log_w�n +("g�sock�t(�g��e�iv�buf��u�: %s\n", + `���� +( +��o +)); + +730 if( +rsize + > +�t +) + +732 +�t + = (� +rsize +; + +733 i�( + `�tsock�t + ( +sockfd +, +SOL_SOCKET +, +SO_RCVBUF +, (*�& +�t +, +ݎ� +)) + +735 + `log_w�n +("�tsock�t(裈��iv�buf�t�%d fa�u�: %s\n", +�t +, + `���� +( +��o +)); + +741 i�( + `g�sock�t + ( +sockfd +, +SOL_SOCKET +, +SO_SNDBUF +, (*�& +�t +, & +ݎ� +)) + +743 + `log_w�n +("g�sock�t(�g� s�d buf��u�: %s\n", + `���� +( +��o +)); + +748 if( +ssize + > +�t +) + +750 +�t + = (� +ssize +; + +751 i�( + `�tsock�t + ( +sockfd +, +SOL_SOCKET +, +SO_SNDBUF +, (*�& +�t +, +ݎ� +)) + +753 + `log_w�n +("�tsock�t(裈�nd buf�t�%d fa�u�: %s\n", +�t +, + `���� +( +��o +)); + +758 + `log_�fo +("S� sock�[%d] RCVBUF size:%d SNDBUF size:%d\n", +sockfd +, +rsize +, +ssize +); + +760 + } +} + +762 + $�_sock_�t_�u�addr +( +sockfd +) + +764 +�t + = 1; + +765 +�n + = (); + +767 i�( + `�tsock�t + ( +sockfd +, +SOL_SOCKET +, +SO_REUSEADDR +, (*�& +�t +, +�n +)) + +769 + `log_�r +("S� sock�[%d] o�i� SO_REUSEADDR fa�ed:%s\n", +sockfd +, + `���� +( +��o +)); + +772 + `log_dbg +("S� sock�[%d] o�i� SO_REUSEADDR ok\n", +sockfd +); + +775 + } +} + +786 + $�_sock_�t_k��live +( +sockfd +, +k�p�tvl +, +k�p�t +) + +788 +�t +; + +790 if( +sockfd + < 0) + +794 +�t + = 1; + +795 i�( + `�tsock�t + ( +sockfd +, +SOL_SOCKET +, +SO_KEEPALIVE +, (*�& +�t +, (opt))) + +797 + `log_w�n +("�tsock�t(�ab� SO_KEEPALIVE fa�u�: %s\n", + `���� +( +��o +)); + +801 if( +k�p�tvl + || +k�p�t +) + +810 +�t + = 3; + +811 i�( + `�tsock�t + ( +sockfd +, +SOL_TCP +, +TCP_KEEPIDLE +, (*�& +�t +, (opt))) + +813 + `log_�r +("�tsock�t(裈TCP_KEEPIDLE��%d sec�d��u�: %s\n", +�t +, + `���� +( +��o +)); + +817 if(( +�t += +k�p�tvl +) > 0) + +825 i�( + `�tsock�t + ( +sockfd +, +SOL_TCP +, +TCP_KEEPINTVL +, (*�& +�t +, (opt))) + +827 + `log_�r +("�tsock�t(裈TCP_KEEPINTVL��%d fa�u�: %s\n", +�t +, + `���� +( +��o +)); + +832 if(( +�t += +k�p�t +) > 0) + +842 i�( + `�tsock�t + ( +sockfd +, +SOL_TCP +, +TCP_KEEPCNT +, (*�& +�t +, (opt))) + +844 + `log_�r +("�tsock�t(裈TCP_KEEPCNT��%d fa�u�: %s\n", +�t +, + `���� +( +��o +)); + +850 + `log_dbg +("S� sock�[%d] KEEPINTVL:%d KEEPCNT:%d\n", +sockfd +, +k�p�tvl +, +k�p�t +); + +852 + } +} + + @cp_sock.h + +13 #i�de� +__CP_SOCK_H + + +14 + #__CP_SOCK_H + + + ) + +16 + ~<�dio.h +> + +17 + ~<�dlib.h +> + +18 + ~<�tdb.h +> + +19 + ~<f��.h +> + +20 + ~<uni�d.h +> + +21 + ~<sys/un.h +> + +22 + ~<p�l.h +> + +23 + ~<��o.h +> + +25 + ~<sys/ty�s.h +> + +26 + ~<sys/sock�.h +> + +27 + ~<l�ux/sockios.h +> + +28 + ~<sys/io�l.h +> + +29 + ~<sys/sock�.h +> + +30 + ~<�t��/�.h +> + +31 + ~<�t��/t�.h +> + +32 + ~<��/��.h +> + +34 + ~"�_kli�.h +" + +35 + ~"�_�r�g.h +" + +36 + ~"�_fds.h +" + +39 + #CP_DEF_RCVBUF_SIZE + 2048 + + ) + +40 + #CP_DEF_SNDBUF_SIZE + 2048 + + ) + +42 + #CP_SOCK_RCVBUF + 2048 + + ) + +43 + #CP_SOCK_SNDBUF + 2048 + + ) + +45 + #CP_SOCK_DEF_IDLE_TIMEOUT + 120*1000 + + ) + +46 + #CP_SOCK_DEF_MSG_TIMEOUT + 120*1000 + + ) + +48 + #CP_SOCK_KEEPINTVL + 600 + + ) + +49 + #CP_SOCK_KEEPCNT + 3 + + ) + +51 + #CP_SOCK_MODE_NONE + 0 + + ) + +52 + #CP_SOCK_MODE_ACCEPT + 1 + + ) + +53 + #CP_SOCK_MODE_CONNECT + 2 + + ) + +54 + #CP_SOCK_MODE_LISTEN + 3 + + ) + +58 + mCP_SOCK_EVENT_READ + = +EPOLLIN +, + +59 + mCP_SOCK_EVENT_WRITE + = +EPOLLOUT +, + +60 + mCP_SOCK_EVENT_ERROR + = +EPOLLERR +, + +61 + mCP_SOCK_EVENT_HUP + = +EPOLLHUP +, + +62 + mCP_SOCK_EVENT_IDLE_TIMEOUT + = (1<<16), + +63 + mCP_SOCK_EVENT_MSG_TIMEOUT + = (1<<17), + +66 + g_CP_SOCK +; + +67 + g_CP_FDS +; + +69 (* + tPRIVT_FREE +)(); + +70 (* + tCP_SOCK_EVENT_CALLBACK +)( + t_CP_SOCK + * + tsock +); + +71 + s_CP_SOCK_CALLBACK + + +73 +CP_SOCK_EVENT_CALLBACK + +�r� +; + +74 +CP_SOCK_EVENT_CALLBACK + +�ad +; + +75 +CP_SOCK_EVENT_CALLBACK + +wr�e +; + +76 } + tCP_SOCK_CALLBACK +; + +79 + #FLAG_SOCK_INIT + (1<<0) + + ) + +80 + #FLAG_SOCK_MALLOC + (1<<1) + + ) + +81 + #FLAG_SOCK_EPOLLED + (1<<2) + + ) + +82 + #FLAG_SOCK_REGISTRY + (1<<3) + + ) + +83 + #FLAG_SOCK_INQUEUE + (1<<4) + + ) + +84 + #FLAG_SOCK_TASKED + (1<<5) + + ) + +86 + #SOCK_STAT_INIT + 0 + + ) + +87 + #SOCK_STAT_CONNECTING + 1 + + ) + +88 + #SOCK_STAT_CONNECTED + 2 + + ) + +89 + #SOCK_STAT_LISTENED + 2 + + ) + +90 + #SOCK_STAT_ACCEPTED + 2 + + ) + +91 + #SOCK_STAT_ALREADY + 2 + + ) + +92 + #SOCK_STAT_DISCONNECT + 3 + + ) + +94 + s_CP_SOCK + + +96 +fd +; + +97 +mode +; + +98 +�ag +; + +99 +��us +; + +101 +a�v_time +; + +102 +msg_time +; + +103 +id�_timeout +; + +104 +msg_timeout +; + +106 +k�p�tvl +; + +107 +k�p�t +; + +108 +rsize +; + +109 +ssize +; + +111 +��l_ev�t + +ev�t +; + +113 +�_�r�g + * +sbuf +; + +114 +�_�r�g + * +rbuf +; + +116 +sockaddr + +�ddr +; + +117 +�ddr +[16]; + +118 +��t +; + +119 +�ddr +[16]; + +120 +��t +; + +122 +_CP_FDS + * +fds +; + +123 +CP_SOCK_EVENT_CALLBACK + +cbfunc +; + +124 +CP_SOCK_EVENT_CALLBACK + +���_func +; + +125 +_CP_SOCK + * +�rv_sock +; + +127 +max_��� +; + +128 +ac��_�t +; + +129 +li�_h�d + +ac��_li� +; + +131 * +�ivt +; + +132 +PRIVT_FREE + +�ivt_� +; + +134 +�dex +; + +135 +li�_h�d + +�i� +; + +148 } + tCP_SOCK +; + +151 +�l�e + + $�_sock_�t_id�_timeout +( +CP_SOCK + * +sock +, +timeout +) + +153 +sock +-> +id�_timeout + = +timeout +; + +154 + } +} + +156 +�l�e + + $�_sock_�t_msg_timeout +( +CP_SOCK + * +sock +, +timeout +) + +158 +sock +-> +msg_timeout + = +timeout +; + +159 + } +} + +161 +�l�e + + $�_sock_�t_�iv�e_d�a +( +CP_SOCK + * +sock +, * +d�a +, +PRIVT_FREE + +� +) + +163 +sock +-> +�ivt + = +d�a +; + +164 +sock +-> +�ivt_� + = +� +; + +165 + } +} + +167 +CP_SOCK + * +�_sock_�� +(CP_SOCK * +sock +, +rsize +, +ssize +, +k�p�tvl +, +k�p�t +); + +168 +�_sock_�o� +( +CP_SOCK + * +sock +); + +169 +�_sock_�rm +( +CP_SOCK + * +sock +); + +170 + #�_sock_�rm_��r +( +sock +�{ + `�_sock_�rm +(sock); sock= +NULL +;} + + ) + +172 +�_sock_li�� +( +CP_SOCK + * +sock +, * +�ddr +, +��t +, +backlog +); + +173 +�_sock_c��� +( +CP_SOCK + * +sock +, * +�ddr +, +��t +, +��t +); + +174 +�_sock_ac�� +( +CP_SOCK + * +�rv_sock +, CP_SOCK * +�w_sock +); + +176 +�_sock_�cv +( +CP_SOCK + * +sock +); + +177 +�_sock_�nd +( +CP_SOCK + * +sock +); + +179 +�_sock_�t_�u�addr +( +sockfd +); + +180 +�_sock_�t_k��live +( +sockfd +, +k�p�tvl +, +k�p�t +); + +181 +�_sock_�t_n�block +( +sockfd +); + +182 +�_sock_�t_buf�r +( +sockfd +, +rsize +, +ssize +); + + @cp_string.c + +11 + ~<�dio.h +> + +12 + ~<�dlib.h +> + +13 + ~<�r�g.h +> + +14 + ~<uni�d.h +> + +15 + ~<��o.h +> + +17 + ~"�_�r�g.h +" + +18 + ~"�_comm�.h +" + +20 +�_�r�g + * + $�_�r�g_��� +(* +d�a +, +�n +) + +22 +�_�r�g + * +�r +; + +24 #ifde� +DEBUG + + +25 i�( +�n + < 0) + +27 +NULL +; + +31 +�r + = + `t_m�loc +(( +�_�r�g +)); + +33 i�( +�r +) + +35 +�r +-> +�n + =�en; + +36 +�r +-> +size + = s�-> +�n + + 1; + +37 +�r +-> +d�a + = + `t_m�loc +(�r-> +size + * ()); + +38 i�( +�r +-> +d�a +) + +39 + `mem�y +( +�r +-> +d�a +, d�a, s�-> +�n +); + +42 + `t_� +( +�r +); + +43 +�r + = +NULL +; + +47 +�r +; + +48 + } +} + +50 +�_�r�g + * + $�_�r�g_���_em�y +( +���l_size +) + +52 +�_�r�g + * +�r + = + `t_m�loc +((cp_string)); + +54 i�( +�r +) + +56 +�r +-> +�n + = 0; + +57 +�r +-> +size + = +���l_size +; + +58 +�r +-> +d�a + = (*� + `t_m�loc +(�r-> +size + * ()); + +59 i�( +�r +-> +d�a + =� +NULL +) + +61 + `t_� +( +�r +); + +62 +�r + = +NULL +; + +66 +�r +; + +67 + } +} + +69 + $�_�r�g_de�roy +( +�_�r�g + * +�r +) + +71 i�( +�r +) + +73 i�( +�r +-> +d�a +) + +75 + `t_� +( +�r +-> +d�a +); + +78 + `t_� +( +�r +); + +80 + } +} + +83 + $�_�r�g_��r_d�a +( +�_�r�g + * +�r +) + +85 i�( +�r + && s�-> +d�a +) + +87 + `mem�t +( +�r +-> +d�a +, 0, s�-> +size +); + +88 +�r +-> +�n + = 0; + +90 + } +} + +92 +�_�r�g + * + $�_�r�g_c�r�y +( +�_�r�g + * +�r +, * +c�r +) + +94 i�( +�r +) + +96 +�r +-> +�n + = + `��� +( +c�r +); + +97 i�( +�r +-> +size + < s�-> +�n + + 1) + +99 +�r +-> +size + = s�-> +�n + + 1; + +100 +�r +-> +d�a + = + `t_m�loc +(�r-> +size + * ()); + +102 i�( +�r +-> +d�a +) + +103 + `mem�y +( +�r +-> +d�a +, +c�r +, s�-> +size + * ()); + +106 + `t_� +( +�r +); + +107 +�r + = +NULL +; + +111 +�r +; + +112 + } +} + +114 + $�_�r�g_c�y +( +�_�r�g + * +d� +, cp_�r�g * +�c +) + +116 +�� +; + +117 +size +; + +119 if(! +d� + || !d�-> +d�a + || ! +�c + || !src->data) + +122 +�� += +d� +-> +size + - d�-> +�n +; + +123 +size + = +�� +> +�c +-> +�n + ? src->len :�eft; + +125 + `mem�y +(& +d� +-> +d�a +[d�-> +�n +], +�c +->d�a, +size +); + +126 +d� +-> +�n + +� +size +; + +128 +size +; + +129 + } +} + +131 + $�_�r�g_c�rc�y +( +�_�r�g + * +d� +, * +�r�g +, +�n +) + +133 +�� +; + +134 +size +; + +136 if(! +d� + || !d�-> +d�a + || ! +�r�g + || +�n +<=0) + +139 +�� += +d� +-> +size + - d�-> +�n +; + +140 +size + = +�� +> +�n + ?�en :�eft; + +142 + `mem�y +(& +d� +-> +d�a +[d�-> +�n +], +�r�g +, +size +); + +143 +d� +-> +�n + +� +size +; + +145 +size +; + +146 + } +} + +149 + $�_�r�g_move +( +�_�r�g + * +d� +, cp_�r�g * +�c +) + +151 +�� +; + +152 +size +; + +154 if(! +d� + || !d�-> +d�a + || ! +�c + || !src->data) + +158 +�� += +d� +-> +size + - d�-> +�n +; + +159 +size + = +�� +> +�c +-> +�n + ? src->len :�eft; + +162 + `mem�y +(& +d� +-> +d�a +[d�-> +�n +], +�c +->d�a, +size +); + +163 +d� +-> +�n + +� +size +; + +166 +�c +-> +�n + -� +size +; + +167 + `memmove + ( +�c +-> +d�a +, src->d�a+ +size +, src-> +�n +); + +169 +size +; + +170 + } +} + +172 +�_�r�g + * + $�_�r�g_dup +( +�_�r�g + * +�c +) + +174 +�_�r�g + * +�r + = + `t_m�loc +((cp_string)); + +176 i�( +�r +) + +178 * +�r + = * +�c +; + +179 +�r +-> +d�a + = + `t_m�loc +((�r-> +�n + + 1) * ()); + +180 i�( +�r +-> +d�a +) + +181 + `mem�y +( +�r +-> +d�a +, +�c +->d�a, (�r-> +�n + + 1) * ()); + +184 + `t_� +( +�r +); + +185 +�r + = +NULL +; + +189 +�r +; + +190 + } +} + +192 +�_�r�g + * + $�_�r�g_c�rdup +(* +�c +) + +194 +�_�r�g + * +�r + = + `t_m�loc +((cp_string)); + +196 i�( +�r +) + +198 +�r +-> +�n + = + `��� +( +�c +); + +199 +�r +-> +size + = s�-> +�n + + 1; + +200 +�r +-> +d�a + = + `t_m�loc +(�r-> +size + * ()); + +201 i�( +�r +-> +d�a + =� +NULL +) + +203 + `t_� +( +�r +); + +204 +NULL +; + +206 + `mem�y +( +�r +-> +d�a +, +�c +, s�-> +size +); + +209 +�r +; + +210 + } +} + +212 +�_�r�g + * + $�_�r�g_�t +( +�_�r�g + * +�r +, cp_�r�g * +��ndum +) + +214 +�n + = +�r +->len; + +215 +�r +-> +�n + +� +��ndum +->len; + +216 i�( +�r +-> +�n + + 1 > s�-> +size +) + +218 +�r +-> +size + = s�-> +�n + + 1; + +219 +�r +-> +d�a + = + `��loc +(�r->d�a, s�-> +size + * ()); + +221 i�( +�r +-> +d�a +) + +222 + `mem�y +( +�r +-> +d�a + + +�n + * (), +��ndum +->data, + +223 +��ndum +-> +�n + * ()); + +225 +�r +; + +226 + } +} + +228 +�_�r�g + * + $�_�r�g_c�r�t +( +�_�r�g + * +�r +, * +c�r +) + +230 +�n + = +�r +->len; + +231 +�� + = + `��� +( +c�r +); + +233 +�r +-> +�n + +� +�� + * (); + +234 i�( +�r +-> +�n + + 1 > s�-> +size +) + +237 +�r +-> +size + = s�-> +�n + + 1; + +238 +�r +-> +d�a + = + `��loc +(�r->d�a, s�-> +size + * ()); + +240 i�( +�r +-> +d�a +) + +241 + `mem�y +( +�r +-> +d�a + + +�n + * (), +c�r +, +�� +); + +243 +�r +; + +244 + } +} + +246 +�_�r�g + * + $�_�r�g_��nd_ch� +( +�_�r�g + * +�r +, +ch +) + +248 i�( +�r +-> +�n + + 1 > s�-> +size +) + +250 +�r +-> +size + = s�-> +�n + + 0x100; + +251 +�r +-> +d�a + = + `��loc +(�r->d�a, s�-> +size + * ()); + +252 i�( +�r +-> +d�a + =� +NULL +) NULL; + +254 +�r +-> +d�a +[�r-> +�n +++] = +ch +; + +256 +�r +; + +257 + } +} + +259 +�_�r�g + * + $�_�r�g_�t_b� +( +�_�r�g + * +�r +, * +b� +, +�n +) + +261 +ޒ + = +�r +-> +�n +; + +262 +�r +-> +�n + +=�en; + +264 i�( +�r +-> +�n + > s�-> +size +) + +266 +�r +-> +size + = s�-> +�n + + 0x400 - (str->len % 0x400); + +267 +�r +-> +d�a + = + `��loc +(�r->d�a, s�-> +size + * ()); + +269 + `mem�y +(& +�r +-> +d�a +[ +ޒ +], +b� +, +�n +); + +271 +�r +; + +272 + } +} + +274 + $�_�r�g_cmp +( +�_�r�g + * +s1 +, cp_�r�g * +s2 +) + +276 i�( +s1 + =� +s2 +) 0; + +278 i�( +s1 + =� +NULL +) -1; + +279 i�( +s2 + =� +NULL +) 1; + +281 i�( +s1 +-> +�n + =� +s2 +->len) + +282 + `memcmp +( +s1 +-> +d�a +, +s2 +->d�a, s1-> +�n +); + +285 +p + = ( +s1 +-> +�n + > +s2 +->len) ? s2->len : s1->len; + +286 +rc + = + `memcmp +( +s1 +-> +d�a +, +s2 +->d�a, +p +); + +287 i�( +rc + == 0) + +288 +s1 +-> +�n + - +s2 +->len; + +289 +rc +; + +291 + } +} + +293 * + $�_�r�g_toc�r +( +�_�r�g + * +�r +) + +295 * +c�r + = +NULL +; + +297 i�( +�r +) + +299 +�r +-> +d�a +[�r-> +�n + * ()] = '\0'; + +301 +c�r + = +�r +-> +d�a +; + +304 +c�r +; + +305 + } +} + +307 + $�_�r�g_�n +( +�_�r�g + * +s +) + +309 +s +-> +�n +; + +310 + } +} + +312 * + $�_�r�g_d�a +( +�_�r�g + * +s +) + +314 +s +-> +d�a +; + +315 + } +} + +317 + #CHUNK + 0x1000 + + ) + +318 +�_�r�g + * + $�_�r�g_�ad +( +fd +, +�n +) + +320 +buf +[ +CHUNK +]; + +321 +�ad_�n +; + +322 +�_�r�g + * +�s + = +NULL +; + +324 i�( +�n + == 0) + +325 +�ad_�n + = +CHUNK +; + +327 +�ad_�n + = +�n + < +CHUNK + ?�en : CHUNK; + +329 +�n + =�0 || +�s + =� +NULL + ||�es->len <�en) + +331 +rc + = + +332 + `�ad +( +fd +, +buf +, +�ad_�n +); + +333 i�( +rc + <= 0) ; + +334 i�( +�s + =� +NULL +) + +336 +�s + = + `�_�r�g_��� +( +buf +, +rc +); + +337 i�( +�s + =� +NULL +) NULL; + +340 + `�_�r�g_�t_b� +( +�s +, +buf +, +rc +); + +343 +�s +; + +344 + } +} + +346 + $�_�r�g_wr�e +( +�_�r�g + * +�r +, +fd +) + +348 +rc +; + +349 +tٮ + = 0; + +351 +tٮ + < +�r +-> +�n +) + +353 +rc + = + `wr�e +( +fd +, & +�r +-> +d�a +[ +tٮ +], s�-> +�n + -�otal); + +359 i�( +rc + == -1) + +361 i�( +��o + =� +EINTR + ) + +366 +tٮ + +� +rc +; + +369 +tٮ +; + +370 + } +} + +372 +�_�r�g + * + $�_�r�g_�ad_f�e +(* +f��ame +) + +374 +�_�r�g + * +�s +; + +375 +FILE + * +� + = + `fݒ +( +f��ame +, "rb"); + +376 i�( +� + =� +NULL +) NULL; + +378 +�s + = + `�_�r�g_�ad +( + `f��o +( +� +), 0); + +379 + `f�o� +( +� +); + +381 +�s +; + +382 + } +} + +384 + $�_�r�g_wr�e_f�e +( +�_�r�g + * +�r +, * +f��ame +) + +386 +rc +; + +387 +FILE + * +� + = + `fݒ +( +f��ame +, "wb"); + +388 i�( +� + =� +NULL +) 0; + +390 +rc + = + `�_�r�g_wr�e +( +�r +, + `f��o +( +� +)); + +391 + `f�o� +( +� +); + +393 +rc +; + +394 + } +} + +396 + #LINELEN + 81 + + ) + +397 + #CHARS_PER_LINE + 16 + + ) + +399 * + g��t_ch� + = + +417 + $�_c�r�g_dump +(* +d�a +, +�n +) + +419 +rc +; + +420 +idx +; + +421 +�n +[ +LINELEN +]; + +422 +l� +[ +CHARS_PER_LINE + + 1]; + +423 +hc +[4]; + +424 +l�e_d�e + = 1; + +426 +rc + = +�n +; + +427 +idx + = 0; + +428 +l� +[ +CHARS_PER_LINE +] = '\0'; + +429 +rc + > 0) + +431 i�( +l�e_d�e +) + +432 + `���tf +( +�n +, +LINELEN +, "%08X: ", +idx +); + +435 +c + = +d�a +[ +idx +]; + +436 + `���tf +( +hc +, 4, "%02X ", +c +); + +437 + `���t +( +�n +, +hc +, 4); + +438 +l� +[ +idx + % +CHARS_PER_LINE +] = +��t_ch� +[ +c +]; + +439 ++ +idx +; + +440 } -- +rc + > 0 && ( +idx + % +CHARS_PER_LINE + != 0)); + +441 +l�e_d�e + = ( +idx + % +CHARS_PER_LINE +) == 0; + +442 i�( +l�e_d�e +) + +443 + `��tf +("%� %s\n", +�n +, +l� +); + +444 i�( +rc + == 0) + +445 + `���t +( +�n +, " ", +LINELEN +); + +447 i�(! +l�e_d�e +) + +449 +l� +[( +idx + % +CHARS_PER_LINE +)] = '\0'; + +450 (++ +idx + % +CHARS_PER_LINE +) != 0) + +451 + `���t +( +�n +, " ", +LINELEN +); + +453 + `��tf +("%� %s\n", +�n +, +l� +); + +456 + } +} + +458 cڡ * + $�_hexdump_�r�g +(cڡ * +d�a +, +size_t + +�n +) + +460 +�r�g +[1024]; + +461 * +d + = (*) +d�a +; + +462 +i +, +�� +; + +464 +�r�g +[0] = '\0'; + +465 +�� + = ( +�r�g +); + +466 +i + = 0; +�n +--; i += 3) { + +467 i�( +i + >�( +�r�g +) - 4) + +469 + `���tf +( +�r�g + + +i +, 4, " %02x", * +d +++); + +472 +�r�g +; + +473 + } +} + +476 + $�_�r�g_dump +( +�_�r�g + * +�r +) + +478 +rc +; + +479 +idx +; + +480 +�n +[ +LINELEN +]; + +481 +l� +[ +CHARS_PER_LINE + + 1]; + +482 +hc +[4]; + +483 +l�e_d�e + = 1; + +485 +rc + = +�r +-> +�n +; + +486 +idx + = 0; + +487 +l� +[ +CHARS_PER_LINE +] = '\0'; + +488 +rc + > 0) + +490 i�( +l�e_d�e +) + +491 + `���tf +( +�n +, +LINELEN +, "%08X: ", +idx +); + +494 +c + = +�r +-> +d�a +[ +idx +]; + +495 + `���tf +( +hc +, 4, "%02X ", +c +); + +496 + `���t +( +�n +, +hc +, 4); + +497 +l� +[ +idx + % +CHARS_PER_LINE +] = +��t_ch� +[ +c +]; + +498 ++ +idx +; + +499 } -- +rc + > 0 && ( +idx + % +CHARS_PER_LINE + != 0)); + +500 +l�e_d�e + = ( +idx + % +CHARS_PER_LINE +) == 0; + +501 i�( +l�e_d�e +) + +502 + `��tf +("%� %s\n", +�n +, +l� +); + +503 i�( +rc + == 0) + +504 + `���t +( +�n +, " ", +LINELEN +); + +506 i�(! +l�e_d�e +) + +508 +l� +[( +idx + % +CHARS_PER_LINE +)] = '\0'; + +509 (++ +idx + % +CHARS_PER_LINE +) != 0) + +510 + `���t +( +�n +, " ", +LINELEN +); + +512 + `��tf +("%� %s\n", +�n +, +l� +); + +514 + } +} + +517 + $�_�r�g_� +( +�_�r�g + * +�r +) + +519 i�( +�r +-> +�n +) + +521 * +i +, * +f +, +ch +; + +522 +f + = & +�r +-> +d�a +[�r-> +�n + - 1]; + +523 +i + = +�r +-> +d�a +; + +524 +i + < +f +) + +526 +ch + = * +i +; + +527 * +i + = * +f +; + +528 * +f + = +ch +; + +529 +i +++; + +530 +f +--; + +533 + } +} + +536 +�_�r�g + * + $�_�r�g_f��r +( +�_�r�g + * +�r +, * +ˉ�s +) + +538 * +i +; + +539 * +f +; + +541 +�r +-> +d�a +[�r-> +�n +] = '\0'; + +542 +i + = +�r +-> +d�a +; + +543 ( +f + = + `��brk +( +i +, +ˉ�s +))) + +545 +i + = +f +; + +546 * +f + && + `�rchr +( +ˉ�s +, *f)) f++; + +547 i�(* +f +) + +549 + `memmove +( +i +, +f +, +�r +-> +�n + - (�- s�-> +d�a +)); + +550 +�r +-> +�n + -� +f + - +i +; + +551 +�r +-> +d�a +[�r-> +�n +] = '\0'; + +555 * +i + = '\0'; + +556 +�r +-> +�n + -�r->��- ( +i + - s�-> +d�a +); + +561 +�r +; + +562 + } +} + +567 * + $d�_ch�_�om_�r�g +(* +�r +, +d�ch� +) + +569 * +idx + = +�r +; + +570 * +�d + = +�r +; + +571 * +idx +) + +573 i�(* +idx + =� +d�ch� +) + +575 ++ +idx +; + +579 * +�d + = * +idx +; + +580 ++ +�d +; + +581 ++ +idx +; + +584 * +�d + = '\0'; + +585 +�r +; + +586 + } +} + +588 + $�l�_�r�g_to_v�ue +(* +�r +, * +fmt +, ...) + +590 +va_li� + +� +; + +592 * +iP� +; + +593 * +lP� +; + +594 * +pcP� +; + +596 +d�im +[2]={*( +fmt ++2), '\0'}; + +597 * +�su� +; + +599 + `va_��t +( +� +, +fmt +); + +601 +�su� + = + `��ok +� +�r +, +d�im + ); + +603 * +fmt +) + +605 * +fmt +++) + +608 +pcP� + = + `va_�g +( +� +, *); + +609 if( +NULL +!� +�su� +) + +611 if( +NULL +!= +pcP� +) + +613 + `�r�y +( +pcP� +, +�su� +); + +615 +�su� + = + `��ok +� +NULL +, +d�im + ); + +618 +OUT +; + +623 +iP� + = + `va_�g +( +� +, *); + +624 if( +NULL +!� +�su� +) + +626 if( +NULL +!= +iP� +) + +628 * +iP� + = + `�oi +( +�su� +); + +630 +�su� + = + `��ok +� +NULL +, +d�im + ); + +633 +OUT +; + +638 +lP� + = + `va_�g +( +� +, *); + +639 if( +NULL +!� +�su� +) + +641 if( +NULL +!= +lP� +) + +643 * +lP� + = + `��� +( +�su� +, +NULL +, 10); + +645 +�su� + = + `��ok +� +NULL +, +d�im + ); + +648 +OUT +; + +653 +lP� + = + `va_�g +( +� +, *); + +654 if( +NULL +!� +�su� +) + +656 if( +NULL +!= +lP� +) + +658 * +lP� + = + `��� +( +�su� +, +NULL +, 16); + +660 +�su� + = + `��ok +� +NULL +, +d�im + ); + +663 +OUT +; + +669 +OUT +: + +670 + `va_�d +( +� +); + +672 + } +} + + @cp_string.h + +1 #i�de� +_CP_STRING_H + + +2 + #_CP_STRING_H + + + ) + +10 + ~<�dio.h +> + +11 + ~<�r�g.h +> + +12 + ~<�dlib.h +> + +13 + ~<uni�d.h +> + +14 + ~<�d�g.h +> + +17 + s_�_�r�g + + +19 + msize +; + +20 + m�n +; + +21 * + md�a +; + +22 } + t�_�r�g +; + +25 +�_�r�g + * +�_�r�g_��� +(* +d�a +, +�n +); + +27 +�_�r�g + * +�_�r�g_���_em�y +( +���l_size +); + +29 +�_�r�g_de�roy +( +�_�r�g + * +�r +); + +31 +�_�r�g_��r_d�a +( +�_�r�g + * +�r +); + +33 +�_�r�g + * +�_�r�g_c�r�y +(�_�r�g * +�r +, * +c�r +); + +36 +�_�r�g_c�y +( +�_�r�g + * +d� +, cp_�r�g * +�c +); + +37 +�_�r�g_move +( +�_�r�g + * +d� +, cp_�r�g * +�c +); + +39 +�_�r�g_c�rc�y +( +�_�r�g + * +d� +, * +�r�g +, +�n +); + +41 +�_�r�g + * +�_�r�g_dup +(�_�r�g * +�c +); + +43 +�_�r�g + * +�_�r�g_c�rdup +(* +�c +); + +45 +�_�r�g + * +�_�r�g_�t +(�_�r�g * +�r +, cp_�r�g * +��ndum +); + +47 +�_�r�g + * +�_�r�g_�t_b� +(�_�r�g * +�r +, * +b� +, +�n +); + +49 +�_�r�g + * +�_�r�g_c�r�t +(�_�r�g * +�r +, * +c�r +); + +51 +�_�r�g + * +�_�r�g_��nd_ch� +(�_�r�g * +�r +, +ch +); + +53 +�_�r�g_cmp +( +�_�r�g + * +s1 +, cp_�r�g * +s2 +); + +55 * +�_�r�g_toc�r +( +�_�r�g + * +�r +); + +57 +�_�r�g_�n +( +�_�r�g + * +s +); + +59 * +�_�r�g_d�a +( +�_�r�g + * +s +); + +62 +�_�r�g + * +�_�r�g_�ad +( +fd +, +�n +); + +64 +�_�r�g_wr�e +( +�_�r�g + * +�r +, +fd +); + +66 +�_�r�g + * +�_�r�g_�ad_f�e +(* +f��ame +); + +68 +�_�r�g_wr�e_f�e +( +�_�r�g + * +�r +, * +f��ame +); + +71 +�_�r�g_� +( +�_�r�g + * +�r +); + +73 +�_�r�g + * +�_�r�g_f��r +(�_�r�g * +�r +, * +ˉ�s +); + +76 cڡ * +�_hexdump_�r�g +(cڡ * +d�a +, +size_t + +�n +); + +77 +�_�r�g_dump +( +�_�r�g + * +�r +); + +78 +�_c�r�g_dump +(* +d�a +, +�n +); + +80 * +d�_ch�_�om_�r�g +(* +�r +, +d�ch� +); + +81 +�l�_�r�g_to_v�ue +(* +�r +, * +fmt +, ...); + + @cp_time.h + +13 #i�de� +__CP_TIME_H + + +14 + #__CP_TIME_H + + + ) + +16 + ~<uni�d.h +> + +17 + ~<�r�g.h +> + +18 + ~<f��.h +> + +19 + ~<time.h +> + +21 + ~<l�ux/�c.h +> + +22 + ~<sys/io�l.h +> + +23 + ~<sys/ty�s.h +> + +24 + ~<sys/��.h +> + +25 + ~<sys/time.h +> + +27 + s__DATE_TIME + + +29 + miY�r +; + +30 + miM�th +; + +31 + miDay +; + +32 + miHour +; + +33 + miM�u� +; + +34 + miSec�d +; + +35 + miDayOfW�k +; + +36 } + tDATE_TIME +; + +38 +�l�e + + $mi�o_�c�d_��p +( +ms +) + +40 +time�ec + +cS˕ +; + +41 +ulTmp +; + +42 +cS˕ +. +tv_�c + = +ms + / 1000; + +43 i�( +cS˕ +. +tv_�c + == 0) + +45 +ulTmp + = +ms + * 10000; + +46 +cS˕ +. +tv_n�c + = +ulTmp + * 100; + +50 +cS˕ +. +tv_n�c + = 0; + +53 + `�no��p +(& +cS˕ +, 0); + +54 + } +} + +57 +�l�e + + $time_now +() + +59 +timev� + +now +; + +60 + `g�timeofday +(& +now +, 0); + +61 ( +now +. +tv_�c + * 1000�+ (now. +tv_u�c + / 1000); + +62 + } +} + +65 +�l�e + + $time_���d +( +��t +) + +67 +cu��t + = + `time_now +(); + +69 i�( +cu��t + < +��t +) + +71 (0xFFFFFFFF - +��t +�+ +cu��t +; + +75 +cu��t + - +��t +; + +76 + } +} + +78 +�l�e + + $g�_cu��t_time +( +DATE_TIME + * +d�e +) + +80 +time_t + +now + = + `time +( +NULL +); + +81 +tm + * +�ow + = + `lo��ime +(& +now +); + +83 + `mem�t +( +d�e +, 0, ( +DATE_TIME +)); + +84 +d�e +-> +iY�r + = 1900 + +�ow +-> +tm_y�r +; + +85 +d�e +-> +iM�th + = 1 + +�ow +-> +tm_m� +; + +86 +d�e +-> +iDay + = +�ow +-> +tm_mday +; + +88 +d�e +-> +iHour + = +�ow +-> +tm_hour +; + +89 +d�e +-> +iM�u� + = +�ow +-> +tm_m� +; + +90 +d�e +-> +iSec�d + = +�ow +-> +tm_�c +; + +91 +d�e +-> +iDayOfW�k + = +�ow +-> +tm_wday +; + +93 + } +} + +94 + #g�_sys_time +( +d�e +� + `g�_cu��t_time +(d�e) + + ) + +96 +�l�e + + $g�_�c_time +( +DATE_TIME + * +d�e +) + +98 +rv +, +fd + = -1; + +99 +�c_time + +�c_tm +; + +101 + `mem�t +( +d�e +, 0, ( +DATE_TIME +)); + +103 i�(( +fd += + `ݒ +("/dev/�c0", +O_RDONLY +)) < 0) + +106 if(( +rv += + `io�l +( +fd +, +RTC_RD_TIME +, & +�c_tm +)) < 0) + +109 +d�e +-> +iY�r + = 1900 + +�c_tm +. +tm_y�r +; + +110 +d�e +-> +iM�th + = 1 + +�c_tm +. +tm_m� +; + +111 +d�e +-> +iDay + = +�c_tm +. +tm_mday +; + +113 +d�e +-> +iHour + = +�c_tm +. +tm_hour +; + +114 +d�e +-> +iM�u� + = +�c_tm +. +tm_m� +; + +115 +d�e +-> +iSec�d + = +�c_tm +. +tm_�c +; + +116 +d�e +-> +iDayOfW�k + = +�c_tm +. +tm_wday +; + +118 + `�o� +( +fd +); + +121 + } +} + + @cp_vector.c + +14 + ~<�dio.h +> + +15 + ~<uni�d.h +> + +16 + ~<�dlib.h +> + +17 + ~<�r�g.h +> + +19 + ~"�_ve��.h +" + +20 + ~"�_comm�.h +" + +22 +CP_VECTOR + * + $�_ve��_�� +( +size +) + +24 +CP_VECTOR + * +ve�� + = +NULL +; + +25 if( +size + < 0) + +26 +NULL +; + +28 +ve�� + = ( +CP_VECTOR + *) + `t_m�loc +((CP_VECTOR)); + +29 if(! +ve�� +) + +31 +NULL +; + +34 +ve�� +-> +mem + = + `t_m�loc +( +size +*(*)); + +35 if(! +ve�� +-> +mem +) + +37 + `t_� +( +ve�� +); + +38 +NULL +; + +41 + `mem�t +( +ve�� +-> +mem +, 0, +size +); + +42 +ve�� +-> +size + = size; + +43 +ve�� +-> +u�d + = 0; + +45 +ve�� +; + +46 + } +} + +48 * + $�_ve��_add +( +CP_VECTOR + * +ve�� +, +�dex +, * +�em +) + +50 if( +�dex +<0 || index> +ve�� +-> +size +) + +51 +NULL +; + +53 +ve�� +-> +mem +[ +�dex +]= +�em +; + +54 +ve�� +-> +u�d +++; + +56 +�em +; + +57 + } +} + +59 * + $�_ve��_d� +( +CP_VECTOR + * +ve�� +, +�dex +) + +61 * +�ve +; + +63 if( +�dex +<0 ||�dex> +ve�� +-> +size +) + +64 +NULL +; + +66 +�ve + = +ve�� +-> +mem +[ +�dex +]; + +68 +ve�� +-> +mem +[ +�dex +]= +NULL +; + +69 +ve�� +-> +u�d +--; + +71 +�ve +; + +72 + } +} + +74 * + $�_ve��_g� +( +CP_VECTOR + * +ve�� +, +�dex +) + +76 if( +�dex +<0 ||�dex> +ve�� +-> +size +) + +77 +NULL +; + +79 +ve�� +-> +mem +[ +�dex +]; + +80 + } +} + +82 + $�_ve��_de�roy +( +CP_VECTOR + * +ve�� +) + +84 if(! +ve�� +) + +87 if( +ve�� +-> +mem +) + +89 + `t_� +( +ve�� +-> +mem +); + +92 + `t_� +( +ve�� +); + +93 + } +} + + @cp_vector.h + +14 #i�de� +__CP_VECTOR + + +15 + #__CP_VECTOR + + + ) + +17 + ~<�dio.h +> + +18 + ~<uni�d.h +> + +19 + ~<�dlib.h +> + +20 + ~<�r�g.h +> + +22 + s_CP_VECTOR + + +24 + msize +; + +25 + mu�d +; + +26 ** + mmem +; + +27 } + tCP_VECTOR +; + +29 + #�_ve��_cou� +( +v +�((v�? (v)-> +u�d + : 0) + + ) + +30 + #�_ve��_size +( +v +�((v�? (v)-> +size + : 0) + + ) + +32 +CP_VECTOR + * +�_ve��_�� +( +size +); + +33 * +�_ve��_add +( +CP_VECTOR + * +ve�� +, +�dex +, * +�em +); + +34 * +�_ve��_d� +( +CP_VECTOR + * +ve�� +, +�dex +); + +35 * +�_ve��_g� +( +CP_VECTOR + * +ve�� +, +�dex +); + +36 +�_ve��_de�roy +( +CP_VECTOR + * +ve�� +); + + @test/comport.c + +14 + ~<g��t.h +> + +15 + ~<libg�.h +> + +16 + ~<sys/io�l.h +> + +18 + ~"�_comp�t.h +" + +19 + ~"�_comm�.h +" + +20 + ~"v�si�.h +" + +22 + gg_ucProcTok� + = 0x01; + +23 + gg_ucC�lZ +; + +25 +��t_v�si� +(* +�me +); + +26 +u�ge +(* +�me +); + +27 +do_io�l +(* +dev_�me +, +cmd +, +�g +); + +28 +sig�l_h�d�r +( +i_sig +); + +30 + $ma� +( +�gc +, ** +�gv +) + +32 +�t + = 0; + +33 +�tv� + = 0; + +34 +�cv_size + = 0; + +35 +i +; + +36 * +dev_�me + = +NULL +; + +37 +baud�� + = 115200; + +38 * +���gs + = "8N1N"; + +39 +buf +[512]; + +40 +di�_mode + = 0x00; + +42 +siga�i� + +siga� +; + +44 +�ti� + +l�g_�ti�s +[] = { + +45 {"devi�", +�qu�ed_�gum�t +, +NULL +, 'd'}, + +46 {"baud��", +�qu�ed_�gum�t +, +NULL +, 'b'}, + +47 {"���gs", +�qu�ed_�gum�t +, +NULL +, 's'}, + +48 {"io�l", +�qu�ed_�gum�t +, +NULL +, 'i'}, + +49 {"hex", +no_�gum�t +, +NULL +, 'x'}, + +50 {"v�si�", +no_�gum�t +, +NULL +, 'v'}, + +51 {"h�p", +no_�gum�t +, +NULL +, 'h'}, + +52 { +NULL +, 0, NULL, 0} + +55 ( +�t + = + `g��t_l�g +( +�gc +, +�gv +, "d:b:s:ivh", +l�g_�ti�s +, +NULL +)) != -1) + +57 +�t +) + +60 +dev_�me + = +ݏrg +; + +63 +baud�� + = + `�oi +( +ݏrg +); + +66 +���gs + = +ݏrg +; + +69 i�(5 !� +�gc +) + +71 + `u�ge +( +�gv +[0]); + +75 + `do_io�l +( +�gv +[2], + `�oi +(argv[3]),�toi(argv[4])); + +79 +di�_mode + = 0x01; + +82 + `��t_v�si� +( +�gv +[0]); + +85 + `u�ge +( +�gv +[0]); + +92 i�( +�gc + < 2) + +94 + `u�ge +( +�gv +[0]); + +98 +COM_PORT + * +comp�t + = +NULL +; + +99 i�( +NULL + =�( +comp�t + = + `comp�t_�� +( +dev_�me +, +baud�� +, +���gs +))) + +101 + `��tf +("Comport initialize failure.\n"); + +105 i��( +�tv� += + `comp�t_ݒ +( +comp�t +)) < 0) + +107 + `��tf +("Fa�ed��ݒ %�w�h baud�� %d, %s. R�Cod�[%d]\n", +dev_�me +, +baud�� +, + +108 +���gs +, +�tv� +); + +112 + `n�block +(); + +115 + `sigem�y�t +(& +siga� +. +�_mask +); + +116 +siga� +. +�_�ags + = 0; + +117 +siga� +. +�_h�d�r + = +sig�l_h�d�r +; + +119 + `siga�i� +( +SIGTERM +, & +siga� +, +NULL +); + +120 + `siga�i� +( +SIGINT +, & +siga� +, +NULL +); + +121 + `siga�i� +( +SIGSEGV +, & +siga� +, +NULL +); + +122 + `siga�i� +( +SIGTSTP +, & +siga� +, +NULL +); + +123 + `siga�i� +( +SIGSTOP +, & +siga� +, +NULL +); + +125 0x01 =� +g_ucProcTok� +) + +127 +�cv_size + = + `comp�t_�cv +( +comp�t +, +buf +, (buf) - 1, 10); + +128 i�( +�cv_size + > 0) + +130 +i + = 0; i < +�cv_size +; i++) + +132 i�(0 =� +di�_mode +) + +133 + `��tf +("%c", +buf +[ +i +]); + +135 + `��tf +("%02X ", +buf +[ +i +]); + +137 + `f�ush +( +�dout +); + +139 i�(0 !� + `kbh� +()) + +141 +�tv� + = + `fg�c +( +�d� +); + +143 i�(0x0A =� +�tv� +) + +145 +buf +[0] = 0x0D; + +149 +buf +[0] = +�tv� +; + +152 + `comp�t_�nd +( +comp�t +, +buf +, 1); + +154 i�(0x00 !� +g_ucC�lZ +) + +156 +g_ucC�lZ + = 0x00; + +157 +buf +[0] = 0x1A; + +158 + `comp�t_�nd +( +comp�t +, +buf +, 1); + +162 + `comp�t_�rm +( +comp�t +); + +164 + } +} + +166 + $��t_v�si� +(* +�me +) + +168 * +�og�me + = +NULL +; + +169 * +�r + = +NULL +; + +171 +�r + = + `�rdup +( +�me +); + +172 +�og�me + = + `ba��me +( +�r +); + +174 + `��tf +("%�v�si�: %d.%d.%d Bu�d %04d o�%s\n", +�og�me +, +MAJOR +, +MINOR +, +REVER +, +SVNVER +, +DATE +); + +175 + `��tf +("Copyright (C) 2010 guowenxue <guowenxue@gmail.com>\n"); + +177 + `t_� +( +�r +); + +179 + } +} + +181 + $u�ge +(* +�me +) + +183 * +�og�me + = +NULL +; + +184 * +�r + = +NULL +; + +186 +�r + = + `�rdup +( +�me +); + +187 +�og�me + = + `ba��me +( +�r +); + +188 + `��tf +("Usage1: comport -d <device> [-b <baudrate>][-s <settings>] [-x]\n"); + +189 + `��tf +("Usage2: comport [-i <driver�ort> <cmd> <arg>][--help][--version]\n"); + +190 + `��tf +(" -d[device ] device�ame\n"); + +191 + `��tf +(" -b[baudrate] device baudrate (115200, 57600, 19200, 9600), default is 115200\n"); + +192 + `��tf +(" -s[settings] device settings�s�ike 8N1N(default setting)\n"); + +193 + `��tf +(" - data bits: 8, 7\n"); + +194 + `��tf +(" -�arity: N=None, O=Odd, E=Even, S=Space\n"); + +195 + `��tf +(" - stop bits: 1, 0\n"); + +196 + `��tf +(" - flow control: N=None, H=Hardware, S=Software, B=Both\n"); + +197 + `��tf +(" -x[hex ] display�eceived data in hex format\n"); + +198 + `��tf +(" -i[ioctl ] ioctl system call (cmd &�rg only support int)\n"); + +199 + `��tf +(" -v[version ] Display�he�rogram version\n"); + +200 + `��tf +(" -h[help ] Display�his help information\n"); + +202 + `��t_v�si� +( +�og�me +); + +204 + `t_� +( +�r +); + +207 + } +} + +209 + $do_io�l +(* +dev_�me +, +cmd +, +�g +) + +211 +fd + = -1; + +212 +�tv� + = -1; + +213 i�((( +fd + = + `ݒ +( +dev_�me +, +O_RDWR +)) < 0)) + +215 + `��tf +("O��devi� \"%s\" fa�u�: %s\n", +dev_�me +, + `���� +( +��o +)); + +219 +�tv� + = + `io�l +( +fd +, +cmd +, +�g +); + +220 + `��tf +("io��(%s, %d, %d�tu�ed %d\n", +dev_�me +, +cmd +, +�g +, +�tv� +); + +222 + `�o� +( +fd +); + +223 +�tv� +; + +224 + } +} + +226 + $sig�l_h�d�r +( +i_sig +) + +228 i�( +SIGTERM + =� +i_sig + || +SIGINT + == i_sig) + +230 +g_ucProcTok� + = 0x00; + +232 i�(20 =� +i_sig +) + +234 +g_ucC�lZ + = 0x01; + +236 + } +} + + @test/swe_tpdud.c + +14 + ~<uni�d.h +> + +15 + ~<g��t.h +> + +16 + ~<libg�.h +> + +18 + ~"�_comm�.h +" + +19 + ~"�_�tw�k.h +" + +20 + ~"�_logg�.h +" + +21 + ~"�_�oc.h +" + +22 + ~"�_time.h +" + +23 + ~"swe_�dud.h +" + +24 + ~"v�si�.h +" + +26 + $��_�du_�rvi� +( +SWE_TPDU + * +�du +) + +28 if(! +�du +) + +31 + `log_dbg +("��a��pdu cڋx [%p]\n", +�du +); + +33 if� +�du +-> +dl�k + ) + +35 + `log_�ml +("�݁pdu s�vi� f� dowƚk sock� [%p:%d]\n", +�du +-> +dl�k +,�pdu->dl�k-> +fd +); + +36 + `�_fds_de�roy_sock_��r +( +�du +-> +dl�k +); + +37 +�du +-> +dl�k + = +NULL +; + +40 if� +�du +-> +ul�k + ) + +42 + `log_�ml +("�݁pdu s�vi� f� u��k sock� [%p:%d]\n", +�du +-> +ul�k +,�pdu->ul�k-> +fd +); + +43 + `�_fds_de�roy_sock_��r +( +�du +-> +ul�k +); + +44 +�du +-> +ul�k + = +NULL +; + +47 + `t_� +( +�du +); + +48 + } +} + +50 + $�oc_u��k_ev�t +( +CP_SOCK + * +ul�k +) + +52 +rv +; + +53 +CP_SOCK + * +dl�k + = +NULL +; + +54 +SWE_TPDU + * +�du + = +NULL +; + +56 if(! +ul�k + || !( +�du +=ul�k-> +�ivt +�|| !( +dl�k +=tpdu->dlink)) + +58 + `log_�r +("�du�dd�ss:[%p] ul�k�dd�ss:[%p] dl�k�dd�ss:[%p]\n", +�du +, +ul�k +, +dl�k +); + +62 if( +ul�k +-> +��us + =� +SOCK_STAT_DISCONNECT +) + +64 +��_�rvi� +; + +67 if( +ul�k +-> +ev�t +. +ev�ts + & +CP_SOCK_EVENT_READ +) + +69 +rv + = + `�_sock_�cv +( +ul�k +); + +70 if�0== +rv + ) + +72 + `log_w�n +("Socket [%d %s:%d]�emote socket [%s:%d] disconnect,�emove it�ow\n", + +73 +ul�k +-> +fd +, ul�k-> +�ddr +, ul�k-> +��t +, ul�k-> +�ddr +, ul�k-> +��t +); + +74 +��_�rvi� +; + +76 if( +rv + > 0) + +78 + `log_�ml +("Sock� [%d %s:%d]�e�iv�%d by��d�a:\n", +ul�k +-> +fd +, ul�k-> +�ddr +, ul�k-> +��t +, +rv +); + +79 + `�_log_dump +( +LOG_LEVEL_DEBUG +, +ul�k +-> +rbuf +-> +d�a +, ul�k->rbuf-> +�n +); + +81 if( +ul�k +-> +rbuf +-> +�n + > 0) + +83 + `�_�r�g_move +( +dl�k +-> +sbuf +, +ul�k +-> +rbuf +); + +84 + `�_sock_�nd +( +dl�k +); + +89 + `log_�r +("Sock� [%d %s:%d]�e�iv�d���ed: %s\n", +ul�k +-> +fd +, ul�k-> +�ddr +, ul�k-> +��t +, + `���� +( +��o +)); + +92 if( +ul�k +-> +ev�t +. +ev�ts + & +CP_SOCK_EVENT_IDLE_TIMEOUT +) + +94 + `log_w�n +("uplink socket [%d] is idle�nd�o-do something here\n"); + +96 if( +ul�k +-> +ev�t +. +ev�ts + & +CP_SOCK_EVENT_MSG_TIMEOUT +) + +98 + `log_w�n +("uplink socket [%d] message is�imeout�nd�o-do something here\n"); + +105 +��_�rvi� +: + +106 + `��_�du_�rvi� +( +�du +); + +108 + } +} + +111 + $�du_c���_u��k +( +SWE_TPDU + * +�du +) + +113 +CP_SOCK + * +ul�k +; + +114 +CP_SOCK + * +dl�k +; + +116 if(! +�du + || !( +dl�k +=tpdu->dlink)) + +118 + `log_�r +("�du�dd�s�[%p] dl�k�dd�s�[%p]\n", +�du +, +dl�k +); + +122 +ul�k + = +�du +->ulink; + +124 +ul�k += + `�_sock_c���_�gi� +( +dl�k +-> +fds +, ul�k, +�du +-> +�ddr +,�pdu-> +��t +, 0, +�oc_u��k_ev�t +); + +125 if�! +ul�k + ) + +129 + `log_�r +("c����ػmِ[%s:%d] fa�u�\n", +�du +-> +�ddr +,�pdu-> +��t +); + +130 +�du +-> +ul�k + = +NULL +; + +135 +ul�k +-> +�ivt + = +�du +; + +136 +�du +-> +ul�k + = ulink; + +137 + `log_�fo +("c����ػmِ[%s:%d] i��og�ss\n", +�du +-> +�ddr +,�pdu-> +��t +); + +138 + `�_fds_add_sock_�sk +( +dl�k +); + +139 +dl�k +-> +ev�t +. +ev�ts + = 0; + +143 + } +} + +145 + $�du_�rvi�_rou� +( +CP_SOCK + * +dl�k +) + +147 +rv + = 0; + +149 +SWE_TPDU + * +�du +; + +151 if�! +dl�k + ) + +154 +�du + = +dl�k +-> +�ivt +; + +158 if�! +�du + ) + +160 if�!( +�du += + `t_m�loc +((*tpdu))) ) + +162 + `log_�r +("Malloc TPDU work contex failure\n"); + +163 +��_�rvi� +; + +167 +SWE_TPDU + * +�rv_�du +; + +168 + `log_�fo +("m�lo�TPDU w�k cڋx [%p]\n", +�du +); + +170 +�rv_�du + = +dl�k +-> +�rv_sock +-> +�ivt +; + +171 +dl�k +-> +�ivt + = +�du +; + +172 +�du +-> +dl�k + = dlink; + +173 + `�r�y +( +�du +-> +�ddr +, +�rv_�du +->raddr); + +174 +�du +-> +��t + = +�rv_�du +->rport; + +178 + `log_dbg +("Pro�s�sock� [%d %s:%d] w�h�v��[%d]\n", +dl�k +-> +fd +, dl�k-> +�ddr +, dl�k-> +��t +, dl�k-> +ev�t +. +ev�ts +); + +181 if( +dl�k +-> +ev�t +. +ev�ts + & +CP_SOCK_EVENT_READ +) + +183 +rv + = + `�_sock_�cv +( +dl�k +); + +184 if� +rv + == 0 ) + +186 + `log_w�n +("Socket [%d %s:%d]�emote socket [%s:%d] disconnect,�emove it�ow\n", + +187 +dl�k +-> +fd +, dl�k-> +�ddr +, dl�k-> +��t +, dl�k-> +�ddr +, dl�k-> +��t +); + +188 +��_�rvi� +; + +190 if� +rv + < 0) + +192 + `log_�r +("Sock� [%d %s:%d]�e�iv�d���ed: %s\n", +dl�k +-> +fd +, dl�k-> +�ddr +, dl�k-> +��t +, + `���� +( +��o +)); + +193 +��_�rvi� +; + +197 + `log_�ml +("Sock� [%d %s:%d]�e�iv�%d by��d�a:\n", +dl�k +-> +fd +, dl�k-> +�ddr +, dl�k-> +��t +, +rv +); + +198 + `�_log_dump +( +LOG_LEVEL_DEBUG +, +dl�k +-> +rbuf +-> +d�a +, dl�k->rbuf-> +�n +); + +200 if( +dl�k +-> +ev�t +. +ev�ts + & +CP_SOCK_EVENT_HUP +) + +202 + `log_w�n +("sock� [%d]�emِ��ady disc���\n", +dl�k +-> +fd +); + +203 +dl�k +-> +��us + = +SOCK_STAT_DISCONNECT +; + +204 +��_�rvi� +; + +206 if( +dl�k +-> +ev�t +. +ev�ts + & +CP_SOCK_EVENT_IDLE_TIMEOUT +) + +208 + `log_w�n +("socket [%d] is idle�nd�o-do something here\n"); + +210 if( +dl�k +-> +ev�t +. +ev�ts + & +CP_SOCK_EVENT_MSG_TIMEOUT +) + +212 + `log_w�n +("socket [%d] message is�imeout�nd�o-do something here\n"); + +217 if� +dl�k +-> +rbuf +-> +�n + > 0) + +219 +SWE_TPDU + * +�g + = +dl�k +-> +�rv_sock +-> +�ivt +; + +221 +�du +-> +��t + = +�g +->rport; + +222 + `���y +( +�du +-> +�ddr +, +�g +->raddr, (tpdu->raddr)); + +226 if�! +�du +-> +ul�k + || (�du->ul�k-> +��us +== +SOCK_STAT_CONNECTING +)) + +228 + `log_�ml +("�du dl�k: %p\n", +�du +-> +dl�k +); + +229 if� + `�du_c���_u��k +( +�du +) < 0 ) + +230 +��_�rvi� +; + +234 if�! +�du +-> +ul�k + || (�du->ul�k-> +��us +== +SOCK_STAT_CONNECTED +)) + +236 + `log_dbg +("c����ػmِ[%s:%d] ok�nd s�d %d by��d�a\n", +�du +-> +�ddr +,�pdu-> +��t +, +dl�k +-> +rbuf +-> +�n +); + +237 + `�_fds_d�_sock_�sk +( +dl�k +); + +238 if( +dl�k +-> +rbuf +-> +�n + > 0) + +240 + `�_�r�g_move +( +�du +-> +ul�k +-> +sbuf +, +dl�k +-> +rbuf +); + +241 + `�_sock_�nd +( +�du +-> +ul�k +); + +248 +��_�rvi� +: + +249 + `��_�du_�rvi� +( +�du +); + +250 +�du + = +NULL +; + +252 + } +} + +254 + $��t_u�ge +(* +�og�me +) + +256 + `v�si� +( +�og�me +); + +257 + `��tf +("U�ge: %�[OPTION]...\n", +�og�me +); + +258 + `��tf +(" %�i��h�d˅rog�m�������u b�w��� incom�g�nd outgo�g FD\n", +�og�me +); + +260 + `��tf +("\nMandatory�rguments�o�ong options�re mandatory for short options�oo:\n"); + +262 + `��tf +(" -l[loglevel] To configure�he�ogger�evel [0(DIS)...8(MAX)], default 4[NRML]\n"); + +263 + `��tf +(" -p[p܈ ] T�c�figu��h�li���g��t, de�u� [%d]\n", +TPDUD_PORT +); + +264 + `��tf +(" -i[Rem�eIP] T�c�figu��h��m�e/outgo�g IP, de�u� [%s]\n", +HOSTSIM_IP +); + +265 + `��tf +(" -o[outgo�g] T�c�figu��h��m�e/outgo�g P�t, de�u� [%d]\n", +HOSTSIM_PORT +); + +266 + `��tf +(" -h[help ] Display�his help information\n"); + +267 + `��tf +(" -v[version ] Display�he�rogram version\n"); + +268 + `��tf +("\n"); + +271 + } +} + +280 + $ma� + ( +�gc +, ** +�gv +) + +282 +CP_FDS + * +fds +; + +283 +CP_SOCK + * +sock +; + +284 +SWE_TPDU + +�du + = {. +��t += +TPDUD_PORT +, . +�ddr += +HOSTSIM_IP +, . +��t += +HOSTSIM_PORT +}; + +285 +�t +; + +286 +log�v� + = +LOG_LEVEL_NRML +; + +288 +�ti� + +l�g_�ti�s +[] = + +290 {"log�v�", +�qu�ed_�gum�t +, +NULL +, 'l'}, + +291 {"p�t", +�qu�ed_�gum�t +, +NULL +, 'p'}, + +292 {"ho�", +�qu�ed_�gum�t +, +NULL +, 'i'}, + +293 {"outgo�g", +�qu�ed_�gum�t +, +NULL +, 'o'}, + +294 {"v�si�", +no_�gum�t +, +NULL +, 'v'}, + +295 {"h�p", +no_�gum�t +, +NULL +, 'h'}, + +296 { +NULL +, 0, NULL, 0} + +299 ( +�t + = + `g��t_l�g +( +�gc +, +�gv +, "l:p:i:o:vh", +l�g_�ti�s +, +NULL +)) != -1) + +301 +�t +) + +304 +log�v� + = + `�oi +( +ݏrg +); + +308 +�du +. +��t + = + `�oi +( +ݏrg +); + +312 + `���y +( +�du +. +�ddr +, +ݏrg +, (tpdu.raddr)); + +316 +�du +. +��t + = + `�oi +( +ݏrg +); + +320 + `v�si� +( + `ba��me +( +�gv +[0])); + +321 +EXIT_SUCCESS +; + +324 + `��t_u�ge +( + `ba��me +( +�gv +[0])); + +325 +EXIT_SUCCESS +; + +334 i�(! + `�_log_�� +( +NULL +, +DBG_LOG_FILE +, +LOG_LEVEL_MAX +, +LOG_ROLLBACK_NONE +�|| + `�_log_ݒ +()) + +336 +��nup +; + +338 + `�_���l_�oc_sig�l +(); + +340 if�!( +fds += + `�_fds_�� +( +NULL +, +CP_DEF_MAX_EVENTS +, +CP_DEF_FDS_TIMEOUT +)) ) + +341 +��nup +; + +343 if�!( +sock += + `�_sock_�rv�_�gi� +( +fds +, +NULL +, +�du +. +��t +, 0, +�du_�rvi�_rou� +, (*)&tpdu)) ) + +344 +��nup +; + +346 ! +g_�_sig�l +. +�� + ) + +348 + `�_fds_d�e�_ev�t +( +fds +); + +349 + `�_fds_�oc_ev�t +( +fds +); + +350 + `�_sock_d�e�_timeout +( +fds +); + +351 + `mi�o_�c�d_��p +(10); + +354 +��nup +: + +355 + `�_sock_�rm_�l_�rvi�_��r +( +fds +); + +356 + `�_log_�rm +(); + +358 + } +} + + @test/swe_tpdud.h + +14 #i�de� +__SWE_TPDUD_H + + +15 + #__SWE_TPDUD_H + + + ) + +17 + ~<�_sock.h +> + +19 + #HOSTSIM_PORT + 9002 + + ) + +20 + #HOSTSIM_IP + "192.168.3.6" + + ) + +22 + #TPDUD_PORT + 8000 + + ) + +23 + #UPLINK_ADDR + +HOSTSIM_IP + + + ) + +24 + #UPLINK_PORT + +HOSTSIM_PORT + + + ) + +26 + #FLAG_TPDU_INIT + (1<<0) + + ) + +27 + #FLAG_TPDU_STOP + (1<<7) + + ) + +29 + s_SWE_TPDU + + +31 + m�ag +; + +32 + m�ddr +[32]; + +33 + m��t +; + +34 + m��t +; + +36 +CP_SOCK + * + mdl�k +; + +37 +CP_SOCK + * + mul�k +; + +38 } + tSWE_TPDU +; + + @test/test_array.c + +14 + ~<�dio.h +> + +15 + ~<�r�g.h +> + +16 + ~<�dlib.h +> + +18 + ~"�_��y.h +" + +19 + ~"�_sock.h +" + +20 + ~"�_logg�.h +" + +22 + #MAX_ITEMS + 10 + + ) + +30 + $ma� + ( +�gc +, ** +�gv +) + +32 +i +; + +34 +CP_SOCK + * +sock + = +NULL +; + +35 +CP_SOCK + * +tmp + = +NULL +; + +36 +CP_ARRAY + * +��y + = +NULL +; + +38 i�(! + `�_log_�� +( +NULL +, +DBG_LOG_FILE +, +LOG_LEVEL_MAX +, +LOG_ROLLBACK_NONE +�|| + `�_log_ݒ +()) + +41 if�!( +��y += + `�_��y_�� +( +NULL +, +MAX_ITEMS +)) ) + +44 +i +=0; i< +MAX_ITEMS +; i++) + +46 +sock + = + `�_sock_�� +( +NULL +, 1024, 1024, 10, 30); + +47 if� + `�_��y_add +( +��y +, +sock +)<0 ) + +49 + `�_sock_�rm +( +sock +); + +53 if( +i +==3) + +55 +tmp + = +sock +; + +60 + `��tf +("A�ay u�g�%d/%d \n", + `�_��y_cou� +( +��y +), + `�_��y_size +(array)); + +62 + `�_��y_�av� +( +��y +); + +64 if�! + `�_��y_rm_byd�a +( +��y +, +tmp +) ) + +66 + `��tf +("�mov��d��m���sock [%p] from��ay\n", +tmp +); + +67 + `�_sock_�rm +( +tmp +); + +69 + `�_��y_�av� +( +��y +); + +71 + `�_li�_��y_f�_�ch +( +��y +, +i +, +sock +) + +73 + `�_sock_�rm +( +sock +); + +76 + `�_��y_�rm +( +��y +); + +77 + `�_log_�rm +(); + +81 + } +} + + @test/test_hal.c + +14 + ~<libg�.h +> + +15 + ~<g��t.h +> + +16 + ~"�_h�.h +" + +18 + #HAL_LIBRARY_TEST + + + ) + +20 + $��_�d_h�_�i +() + +22 + `��tf +("+------------------------------------+\n"); + +23 + `��tf +("| Test LED HAL API |\n"); + +24 + `��tf +("+------------------------------------+\n"); + +26 + `��tf +("Turn�ll LED off\n"); + +27 + `h�_tu�_�d_off +( +LED_ALL +); + +28 + `��p +(2); + +30 + `��tf +("Turn LED blink one by one\n"); + +31 + `h�_tu�_�d_bl�k +( +LED_SYS +, +MODE_FAST +); + +32 + `h�_tu�_�d_bl�k +( +LED_SIM1 +, +MODE_FAST +); + +33 + `h�_tu�_�d_bl�k +( +LED_SIM2 +, +MODE_FAST +); + +34 + `h�_tu�_�d_bl�k +( +LED_WIFI +, +MODE_FAST +); + +35 + `h�_tu�_�d_bl�k +( +LED_ETH +, +MODE_FAST +); + +36 + `��p +(4); + +38 + `��tf +("Turn LED off one by one\n"); + +39 + `h�_tu�_�d_off +( +LED_SYS +); + +40 + `h�_tu�_�d_off +( +LED_SIM1 +); + +41 + `h�_tu�_�d_off +( +LED_SIM2 +); + +42 + `h�_tu�_�d_off +( +LED_WIFI +); + +43 + `h�_tu�_�d_off +( +LED_ETH +); + +44 + `��p +(4); + +46 + `��tf +("Turn LED on one by one\n"); + +47 + `h�_tu�_�d_� +( +LED_SYS +); + +48 + `h�_tu�_�d_� +( +LED_SIM1 +); + +49 + `h�_tu�_�d_� +( +LED_SIM2 +); + +50 + `h�_tu�_�d_� +( +LED_WIFI +); + +51 + `h�_tu�_�d_� +( +LED_ETH +); + +52 + `��p +(4); + +54 + `��tf +("Turn�ll LED off\n"); + +55 + `h�_tu�_�d_off +( +LED_ALL +); + +56 + `��p +(2); + +58 + `��tf +("Turn�ll LED blink\n"); + +59 + `h�_tu�_�d_bl�k +( +LED_ALL +, +MODE_SLOW +); + +60 + `��p +(4); + +62 + `��tf +("Turn�ll LED on\n"); + +63 + `h�_tu�_�d_� +( +LED_ALL +); + +64 + `��p +(4); + +65 + `h�_tu�_�d_off +( +LED_ALL +); + +66 + } +} + +68 + $��_buzz�_h�_�i +() + +70 + `��tf +("+------------------------------------+\n"); + +71 + `��tf +("| Test Buzzer HAL API |\n"); + +72 + `��tf +("+------------------------------------+\n"); + +74 + `��tf +("Turn buzzer on\n"); + +75 + `h�_tu�_buzz�_� +(); + +76 + `��p +(2); + +78 + `��tf +("Turn buzzer off\n"); + +79 + `h�_tu�_buzz�_off +(); + +80 + `��p +(2); + +82 + `��tf +("Turn buzzer beep for 5�imes\n"); + +83 + `h�_tu�_buzz�_b�p +(3); + +84 + `��p +(4); + +86 + `��tf +("Turn buzzer off\n"); + +87 + `h�_tu�_buzz�_off +(); + +88 + `��p +(3); + +90 + `��tf +("Turn buzzer beep infinitely\n"); + +91 + `h�_tu�_buzz�_b�p +(0); + +92 + `��p +(5); + +94 + `��tf +("Turn buzzer off\n"); + +95 + `h�_tu�_buzz�_off +(); + +96 + } +} + +98 + $��_g�s_h�_�i +() + +100 +rv + = 0; + +102 + `��tf +("+------------------------------------+\n"); + +103 + `��tf +("| Test GPRS HAL API |\n"); + +104 + `��tf +("+------------------------------------+\n"); + +106 + `h�_pow��_g�s +( +SIM_NONE +); + +108 +rv + = + `h�_check_simdo� +( +SIM_ALL +); + +109 + `��tf +("Check�� SIM c�d���� s�tus: 0x%02x\n", +rv +); + +111 +rv + = + `h�_check_simdo� +( +SIM1 +); + +112 + `��tf +("Check SIM1 c�d���� s�tus: 0x%02x\n", +rv +); + +114 +rv + = + `h�_check_simdo� +( +SIM2 +); + +115 + `��tf +("Check SIM2 c�d���� s�tus: 0x%02x\n", +rv +); + +117 + `��tf +("G� cu���w�k�g SIM c�d: 0x%02x\n", + `h�_g�_w�ksim +()); + +119 + `h�_�t_w�ksim +( +SIM2 +); + +120 + `��tf +("Set current working SIM�o SIM2\n"); + +122 + `��tf +("G� cu���w�k�g SIM c�d: 0x%02x\n", + `h�_g�_w�ksim +()); + +124 + `h�_�t_w�ksim +( +SIM1 +); + +125 + `��tf +("Set current working SIM�o SIM1\n"); + +127 + `��tf +("G� cu���w�k�g SIM c�d: 0x%02x\n", + `h�_g�_w�ksim +()); + +128 + `h�_pow�off_g�s +(); + +130 + } +} + +132 + $��t_u�ge +(* +�og�me +) + +134 + `��tf +("U�ge: %�[OPTION]...\n", +�og�me +); + +135 + `��tf +("\nMandatory�rguments�o�ong options�re mandatory for short options�oo:\n"); + +137 + `��tf +(" -l[led ] Test LED HAL API\n"); + +138 + `��tf +(" -b[buzzer ] Test Buzzer HAL API\n"); + +139 + `��tf +(" -g[gprs ] Test GPRS HAL API\n"); + +140 + `��tf +(" -h[help ] Display�his help information\n"); + +143 + } +} + +146 #ifde� +HAL_LIBRARY_TEST + + +153 + $ma� + ( +�gc +, ** +�gv +) + +155 +�t +; + +156 * +�og�me += +NULL +; + +157 +��_�d + = 0; + +158 +��_g�s + = 0; + +159 +��_buzz� + = 0; + +161 +�ti� + +l�g_�ti�s +[] = { + +162 {"�d", +no_�gum�t +, +NULL +, 'l'}, + +163 {"buzz�", +no_�gum�t +, +NULL +, 'b'}, + +164 {"g�s", +no_�gum�t +, +NULL +, 'g'}, + +165 {"h�p", +no_�gum�t +, +NULL +, 'h'}, + +166 { +NULL +, 0, NULL, 0} + +169 +�og�me + = + `ba��me +( +�gv +[0]); + +171 ( +�t + = + `g��t_l�g +( +�gc +, +�gv +, "bghl", +l�g_�ti�s +, +NULL +)) != -1) + +173 +�t +) + +176 +��_buzz� + = 1; + +180 +��_�d + = 1; + +184 +��_g�s + = 1; + +188 + `��t_u�ge +( +�og�me +); + +195 if(! +��_buzz� + && ! +��_�d + && ! +��_g�s +) + +196 + `��t_u�ge +( +�og�me +); + +198 if( +��_buzz� +) + +199 + `��_buzz�_h�_�i +(); + +201 if( +��_�d +) + +202 + `��_�d_h�_�i +(); + +204 if( +��_g�s +) + +205 + `��_g�s_h�_�i +(); + +208 + } +} + + @test/test_hh.c + +14 + ~<libg�.h +> + +15 + ~"�_comp�t.h +" + +16 + #HH_DATAPORT + "/dev/�ySSHHR" + + ) + +24 + $ma� + ( +�gc +, ** +�gv +) + +26 +i +; + +27 +COM_PORT + * +comp�t + = +NULL +; + +28 +sbuf +[10]={0x02, 0x48, 0x32, 0x03, 0x20, 0x00, 0x00, 0xF6, 0xBE, 0x03}; + +29 +rbuf +[10]; + +31 * +HH_DATAPORT + = +NULL +; + +33 if( +�gc + != 2) + +35 + `��tf +("U�ge: %�[devi��ame]\n", + `ba��me +( +�gv +[0])); + +38 +HH_DATAPORT + = +�gv +[1]; + +41 if�!( +comp�t += + `comp�t_�� +( +HH_DATAPORT +, 115200, "8N1N")) ) + +43 + `��tf +("In��li� comp܈%��u�\n", +HH_DATAPORT +); + +47 if( + `comp�t_ݒ +( +comp�t +)<0) + +49 + `��tf +("O��comp܈%��u�\n", +HH_DATAPORT +); + +53 if( + `comp�t_�nd +( +comp�t +, (*) +sbuf +, (sbuf)) < 0) + +55 + `��tf +("S�d 10 by��d��t�%��u�\n", +HH_DATAPORT +); + +58 + `��tf +("S�d %d by��d��t�%s:\n>>", ( +sbuf +), +HH_DATAPORT +); + +59 +i +=0; i<10; i++) + +61 + `��tf +("%02x ", +sbuf +[ +i +]); + +63 + `��tf +("\n"); + +66 + `mem�t +( +rbuf +, 0, (rbuf)); + +67 if(( +i += + `comp�t_�cv +( +comp�t +, (*) +rbuf +, (rbuf), 5000)) < 0) + +69 + `��tf +("Re�iv�10 by��d��t�%��u�\n", +HH_DATAPORT +); + +73 + `��tf +("Re�iv�%d by��d���om %s:\n<<", +i +, +HH_DATAPORT +); + +74 +i +=0; i<10; i++) + +76 + `��tf +("%02x ", +rbuf +[ +i +]); + +78 + `��tf +("\n"); + +80 + `comp�t_�rm +( +comp�t +); + +83 + } +} + + @test/test_ini.c + +14 + ~"�_����r.h +" + +17 + #INI_CONF + "�m�e.�i" + + ) + +25 + $ma� + ( +�gc +, ** +�gv +) + +27 +di�iڬy + * +�i +; + +28 +FILE + * +� +; + +30 +�i += + `����r_l�d +( +INI_CONF +); + +32 +� += + `fݒ +( +INI_CONF +, "w+"); + +34 + `����r_�t +( +�i +, "section1:key1", "30"); + +37 + `����r_dump +( +�i +, +�d�r +); + +39 + `����r_dump_�i +( +�i +, +� +); + +42 + `����r_�di� +( +�i +); + +46 + } +} + + @test/test_klist.c + +14 + ~"�_kli�.h +" + +15 + ~"�_sock.h +" + +19 + $�av�_li� +( +li�_h�d + * +h�d +) + +21 +CP_SOCK + * +sock +, * +tsock +; + +24 if�( +sock += + `�_sock_�� +( +NULL +, +CP_SOCK_RCVBUF +, +CP_SOCK_SNDBUF +, +CP_SOCK_KEEPINTVL +, +CP_SOCK_KEEPCNT +)) ) + +26 + `li�_add_�� +(& +sock +-> +�i� +, +h�d +); + +27 + `��tf +("Add�ew sock� %�t�sock_li� \n", +sock +); + +31 + `li�_f�_�ch_��y_�� +( +sock +, +tsock +, +h�d +, +�i� +) + +33 + `��tf +("T�v�2 sock��i� o�sock� %p\n", +sock +); + +35 + } +} + +44 + $ma� + ( +�gc +, ** +�gv +) + +46 +i +; + +47 +li�_h�d + +sock_li� +; + +48 +CP_SOCK + * +sock +, * +tsock +; + +50 + `INIT_LIST_HEAD +(& +sock_li� +); + +52 +i +=0; i<10; i++) + +54 if�( +sock += + `�_sock_�� +( +NULL +, +CP_SOCK_RCVBUF +, +CP_SOCK_SNDBUF +, +CP_SOCK_KEEPINTVL +, +CP_SOCK_KEEPCNT +)) ) + +56 + `li�_add_�� +(& +sock +-> +�i� +, & +sock_li� +); + +57 + `��tf +("Add sock� %�t�sock_li� \n", +sock +); + +62 + `li�_f�_�ch_��y +( +sock +, & +sock_li� +, +�i� +) + +64 + `��tf +("T�v� sock��i� o�sock� %p\n", +sock +); + +67 + `�av�_li� +(& +sock_li� +); + +70 + `li�_f�_�ch_��y_�� +( +sock +, +tsock +, & +sock_li� +, +�i� +) + +72 + `li�_d� +(& +sock +-> +�i� +); + +73 + `�_sock_�rm +( +sock +); + +74 + `��tf +("Remov��d de�roy sock� %��om sock��i�\n", +sock +); + +78 + } +} + + @test/test_logger.c + +14 + ~<uni�d.h +> + +15 + ~<�dio.h +> + +16 + ~<�r�g.h +> + +17 + ~<libg�.h +> + +18 + ~"�_logg�.h +" + +27 + $ma� + ( +�gc +, ** +�gv +) + +29 +buf +[30]="Hello World!\n"; + +30 +f�e +[ +FILENAME_LEN +]; + +32 + `���tf +( +f�e +, +FILENAME_LEN +, "%s.log", + `ba��me +( +�gv +[0]) ); + +36 if(! + `�_log_�� +( +NULL +, +f�e +, +LOG_LEVEL_MAX +, 12�|| + `�_log_ݒ +() ) + +42 + `log_�fo +("1connection.\n"); + +43 + `log_dbg +("2connection.\n"); + +44 + `log_�ml +("3connection.\n"); + +45 + `log_w�n +("4connection.\n"); + +46 + `log_�r +("5connection.\n"); + +47 + `log_�l +("6connection.\n"); + +49 + `�_log_dump +( +LOG_LEVEL_DEBUG +, +buf +, 30); + +51 + `��p +(1); + +54 + `�_log_�rm +(); + +57 + } +} + + @test/test_queue.c + +14 + ~<�dio.h +> + +15 + ~<�r�g.h +> + +16 + ~<�dlib.h +> + +18 + ~"�_queue.h +" + +19 + ~"�_sock.h +" + +21 + #MAX_ITEMS + 10 + + ) + +29 + $ma� + ( +�gc +, ** +�gv +) + +31 +i +; + +33 +CP_SOCK + * +sock + = +NULL +; + +34 +CP_SOCK + * +tmp + = +NULL +; + +36 +CP_QUEUE + * +queue + = +NULL +; + +38 +queue + = + `�_queue_�� +( +NULL +, +MAX_ITEMS +); + +41 +i +=0; i< +MAX_ITEMS ++10; i++) + +44 +sock + = + `�_sock_�� +( +NULL +, 1024, 1024, 10, 30); + +45 if� +NULL +== + `�_�queue +( +queue +, +sock +) ) + +47 + `�_sock_�rm +( +sock +); + +51 if( +i +==3) + +53 +tmp + = +sock +; + +55 + `��tf +("�queu�sock %p\n", +sock +); + +60 + `��tf +("queu�u�g�%d/%d \n", + `�_queue_cou� +( +queue +), + `�_queue_size +(queue)); + +62 + `�_�av�_queue +( +queue +); + +63 if� + `�_rmqueue +( +queue +, +tmp +) ) + +65 + `��tf +("�mov��d��m���sock [%p] from queue\n", +tmp +); + +66 + `�_sock_�rm +( +tmp +); + +68 + `�_�av�_queue +( +queue +); + +70 ! + `�_queue_is_em�y +( +queue +)) + +72 if�( +sock += + `�_dequeue +( +queue +)) ) + +74 + `��tf +("T�m���sock�: %p\n", +sock +); + +75 + `�_sock_�rm +( +sock +); + +79 + `�_queue_de�roy +( +queue +); + +83 + } +} + + @test/test_sock_client.c + +14 + ~"�_�tw�k.h +" + +15 + ~"�_logg�.h +" + +16 + ~"�_�oc.h +" + +17 + ~"�_time.h +" + +21 + #SERV_ADDR + "192.168.1.78" + + ) + +23 + #SERV_PORT + 8880 + + ) + +25 + $�rvi�_rou� +( +CP_SOCK + * +sock +) + +27 +rv +; + +29 if�! +sock + ) + +32 + `��tf +("Cl�� sock� [%d] g��v�t: %d\n", +sock +-> +fd +, sock-> +ev�t +. +ev�ts +); + +33 if( +sock +-> +ev�t +. +ev�ts + & +EPOLLIN +) + +35 +rv + = + `�_sock_�cv +( +sock +); + +36 if(! +rv +) + +38 + `log_�ml +("Socket [%d %s:%d]�emote socket [%s:%d] disconnect,�emove it�ow\n", + +39 +sock +-> +fd +, sock-> +�ddr +, sock-> +��t +, sock-> +�ddr +, sock-> +��t +); + +41 + `�_fds_de�roy_sock +( +sock +); + +42 +g_�_sig�l +. +�� + = 1; + +46 if( +rv + > 0) + +48 + `log_�ml +("Sock� [%d %s:%d]�e�iv�[%d] by��d�a:\n", +sock +-> +fd +, sock-> +�ddr +, sock-> +��t +, sock-> +rbuf +-> +�n +); + +49 + `�_log_dump +( +LOG_LEVEL_DEBUG +, +sock +-> +rbuf +-> +d�a +, sock->rbuf-> +�n +); + +50 + `�_�r�g_��r_d�a +( +sock +-> +rbuf +); + +55 + } +} + +64 + $ma� + ( +�gc +, ** +�gv +) + +66 +CP_FDS + * +fds +; + +67 +CP_SOCK + * +sock + = +NULL +; + +69 i��! + `�_log_�� +( +NULL +, +DBG_LOG_FILE +, +LOG_LEVEL_NRML +, +LOG_ROLLBACK_NONE +�|| + `�_log_ݒ +() ) + +73 + `�_���l_�oc_sig�l +(); + +75 if�!( +fds += + `�_fds_�� +( +NULL +, +CP_DEF_MAX_EVENTS +, +CP_DEF_FDS_TIMEOUT +)) ) + +78 ! +g_�_sig�l +. +�� + ) + +80 +sock + = + `�_sock_c���_�gi� +( +fds +, sock, +SERV_ADDR +, +SERV_PORT +, 0, +�rvi�_rou� +); + +81 if� +sock + && sock-> +��us +== +SOCK_STAT_CONNECTING +) + +84 + `��p +(1); + +87 if(! +sock + || sock-> +��us +!= +SOCK_STAT_CONNECTED +) + +92 + `�_�r�g_c�r�y +( +sock +-> +sbuf +, "Hello World!\n"); + +93 + `��tf +("S�d buf�d�a: %s", + `�_�r�g_d�a +( +sock +-> +sbuf +)); + +94 + `�_sock_�nd +( +sock +); + +96 + `�_fds_d�e�_ev�t +( +fds +); + +98 + `�_fds_�oc_ev�t +( +fds +); + +100 + `mi�o_�c�d_��p +(100); + +103 + `�_sock_�rm_�l_�rvi�_��r +( +fds +); + +105 + `�_log_�rm +(); + +108 + } +} + + @test/test_sock_server.c + +14 + ~"�_�tw�k.h +" + +15 + ~"�_logg�.h +" + +16 + ~"�_�oc.h +" + +17 + ~"�_time.h +" + +20 + #SERV_PORT1 + 8880 + + ) + +21 + #SERV_PORT2 + 8881 + + ) + +23 + #DOMAIN + "kk��l.oi�.�t" + + ) + +24 + #IPADDR + "192.168.1.78" + + ) + +26 + $�rvi�_rou� +( +CP_SOCK + * +sock +) + +28 +rv + = 0; + +29 + `log_�ml +("Pro�s�sock� [%d %s:%d] g��v��[%d]\n", +sock +-> +fd +, sock-> +�ddr +, sock-> +��t +, sock-> +ev�t +. +ev�ts +); + +31 if( +sock +-> +ev�t +. +ev�ts + & +EPOLLIN +) + +33 +rv + = + `�_sock_�cv +( +sock +); + +34 if(0== +rv +) + +36 + `log_�ml +("Socket [%d %s:%d]�emote socket [%s:%d] disconnect,�emove it�ow\n", + +37 +sock +-> +fd +, sock-> +�ddr +, sock-> +��t +, sock-> +�ddr +, sock-> +��t +); + +39 + `�_fds_de�roy_sock +( +sock +); + +43 if( +rv + > 0) + +45 + `log_�ml +("Sock�[%d]�ecv buf�%d by��d�a:\n", +sock +-> +fd +, sock-> +rbuf +-> +�n +); + +48 + `�_�r�g_move +( +sock +-> +sbuf +, sock-> +rbuf +); + +50 + `log_�ml +("Sock�[%d] s�d buf�%d by��d�a:\n", +sock +-> +fd +, sock-> +sbuf +-> +�n +); + +51 + `�_sock_�nd +( +sock +); + +52 + `�_�r�g_��r_d�a +( +sock +-> +sbuf +); + +57 + } +} + +65 + $ma� + ( +�gc +, ** +�gv +) + +67 +CP_FDS + * +fds +; + +68 +CP_SOCK + * +sock +; + +71 i�(! + `�_log_�� +( +NULL +, +DBG_LOG_FILE +, +LOG_LEVEL_MAX +, +LOG_ROLLBACK_NONE +�|| + `�_log_ݒ +()) + +72 +��nup +; + +74 + `�_���l_�oc_sig�l +(); + +76 if�!( +fds += + `�_fds_�� +( +NULL +, +CP_DEF_MAX_EVENTS +, +CP_DEF_FDS_TIMEOUT +)) ) + +77 +��nup +; + +79 if�!( +sock += + `�_sock_�rv�_�gi� +( +fds +, +NULL +, +SERV_PORT1 +, 0, +�rvi�_rou� +, NULL)) ) + +80 +��nup +; + +82 if�!( +sock += + `�_sock_�rv�_�gi� +( +fds +, +NULL +, +SERV_PORT2 +, 0, +�rvi�_rou� +, NULL)) ) + +83 +��nup +; + +85 ! +g_�_sig�l +. +�� + ) + +87 + `�_fds_d�e�_ev�t +( +fds +); + +88 + `�_fds_�oc_ev�t +( +fds +); + +89 + `mi�o_�c�d_��p +(10); + +92 +��nup +: + +93 + `�_sock_�rm_�l_�rvi�_��r +( +fds +); + +94 + `�_log_�rm +(); + +96 + } +} + + @test/test_string.c + +14 + ~<�_�r�g.h +> + +23 + $ma� + ( +�gc +, ** +�gv +) + +25 +i +; + +26 +�_�r�g + * +rcv +; + +27 +�_�r�g + * +�d +; + +29 +rcv + = + `�_�r�g_���_em�y +(64); + +30 +�d + = + `�_�r�g_���_em�y +(64); + +32 + `��tf +("=======================\n"); + +33 + `��tf +("Test cp_string_copy \n"); + +34 + `��tf +("=======================\n"); + +35 + `�_�r�g_��r_d�a +( +rcv +); + +36 + `�_�r�g_c�r�y +( +rcv +, "Hello world!"); + +37 + `��tf +("Receive buffer data:\n"); + +38 + `�_�r�g_dump +( +rcv +); + +40 +i +=0; i<20; i++) + +42 if� + `�_�r�g_c�y +( +�d +, +rcv +) > 0) + +44 + `��tf +("[%d] S�d buf�d�a:\n", +i +); + +45 + `�_�r�g_dump +( +�d +); + +49 + `��tf +("\n=======================\n"); + +50 + `��tf +("Test cp_string_move \n"); + +51 + `��tf +("=======================\n"); + +53 + `�_�r�g_��r_d�a +( +�d +); + +54 + `�_�r�g_��r_d�a +( +rcv +); + +55 +i +=0; i<20; i++) + +57 + `�_�r�g_c�r�y +( +rcv +, "Hello world!"); + +59 + `�_�r�g_dump +( +rcv +); + +61 if� + `�_�r�g_move +( +�d +, +rcv +) > 0) + +63 + `��tf +("[%d] S�d buf�[%d] by��d�a:\n", +i +, + `�_�r�g_�n +( +�d +)); + +64 + `�_�r�g_dump +( +�d +); + +66 + `��tf +("[%d]�e�iv�buf�[%d] by��d�a:\n", +i +, + `�_�r�g_�n +( +rcv +)); + +67 + `�_�r�g_dump +( +rcv +); + +71 + `�_�r�g_de�roy +( +rcv +); + +72 + `�_�r�g_de�roy +( +�d +); + +76 + } +} + + @test/test_vector.c + +14 + ~<�dio.h +> + +15 + ~<�r�g.h +> + +16 + ~<�dlib.h +> + +18 + ~"�_ve��.h +" + +19 + ~"�_sock.h +" + +27 + $ma� + ( +�gc +, ** +�gv +) + +30 +i +, +n +; + +31 +CP_SOCK + * +p + = +NULL +; + +33 +CP_VECTOR + * +v + = + `�_ve��_�� +(1024); + +35 +i + = 0; i < 10; i++) + +37 +p + = + `�_sock_�� +( +NULL +, 1024, 1024, 10, 30); + +38 + `�_ve��_add +( +v +, +i +, +p +); + +41 +n + = + `�_ve��_cou� +( +v +); + +42 +i + = 0; i < +n +; i++) + +44 +p + = + `�_ve��_g� +( +v +, +i +); + +45 + `��tf +("%d: %p\n", +i +, +p +); + +48 +p + = + `�_sock_�� +( +NULL +, 1024, 1024, 10, 30); + +49 + `�_ve��_add +( +v +, 28, +p +); + +50 + `��tf +("S� 28: %p\n", +p +); + +52 +i +=0; i < + `�_ve��_size +( +v +); i++) + +54 +p + = + `�_ve��_g� +( +v +, +i +); + +55 if( +p +) + +57 + `��tf +("T�m���sock� %i: %p\n", +i +, +p +); + +58 + `�_sock_�rm +( +p +); + +62 + `�_ve��_de�roy +( +v +); + +66 + } +} + + @/usr/include/arpa/inet.h + +18 #i�de� +_ARPA_INET_H + + +19 + #_ARPA_INET_H + 1 + + ) + +21 + ~<�u�s.h +> + +22 + ~<�t��/�.h +> + +25 #i�de� +__sock�n_t_def�ed + + +26 +__sock�n_t + + tsock�n_t +; + +27 + #__sock�n_t_def�ed + + + ) + +30 +__BEGIN_DECLS + + +34 +�_addr_t + + $��_addr + (cڡ * +__� +� +__THROW +; + +37 +�_addr_t + + $��_�aof + ( +�_addr + +__� +� +__THROW +; + +41 +�_addr + + $��_mak�ddr + ( +�_addr_t + +__�t +, in_addr_� +__ho� +) + +42 +__THROW +; + +45 +�_addr_t + + $��_�tof + ( +�_addr + +__� +� +__THROW +; + +49 +�_addr_t + + $��_�tw�k + (cڡ * +__� +� +__THROW +; + +53 * + $��_�� + ( +�_addr + +__� +� +__THROW +; + +58 + $��_�� + ( +__af +, cڡ * +__��ri� + +__� +, + +59 * +__��ri� + +__buf +� +__THROW +; + +64 cڡ * + $��_�� + ( +__af +, cڡ * +__��ri� + +__� +, + +65 * +__��ri� + +__buf +, +sock�n_t + +__�n +) + +66 +__THROW +; + +70 #ifde� +__USE_MISC + + +73 + $��_�� + (cڡ * +__� +, +�_addr + * +__�p +� +__THROW +; + +77 * + $��_Ï + ( +�_addr_t + +__�t +, * +__buf +, +size_t + +__�n +� +__THROW +; + +82 * + $��_�t_�� + ( +__af +, cڡ * +__� +, +__b�s +, + +83 * +__buf +, +size_t + +__�n +� +__THROW +; + +88 + $��_�t_�� + ( +__af +, cڡ * +__� +, + +89 * +__buf +, +size_t + +__�n +� +__THROW +; + +94 + $��_n�p_addr + (cڡ * +__� +, + +95 * +__buf +, +__�n +� +__THROW +; + +99 * + $��_n�p_�� + ( +__�n +, cڡ * +__� +, + +100 * +__buf +� +__THROW +; + +103 +__END_DECLS + + + @/usr/include/asm/ioctl.h + +1 + ~<asm-g��ic/io�l.h +> + + @/usr/include/assert.h + +22 #ifdef +_ASSERT_H + + +24 #unde� +_ASSERT_H + + +25 #unde� +as�� + + +26 #unde� +__ASSERT_VOID_CAST + + +28 #ifdef +__USE_GNU + + +29 #unde� +as��_��� + + +34 + #_ASSERT_H + 1 + + ) + +35 + ~<�u�s.h +> + +37 #i� +def�ed + +__�lu�lus + && +__GNUC_PREREQ + (2,95) + +38 + #__ASSERT_VOID_CAST + +��ic_�� +<> + + ) + +40 + #__ASSERT_VOID_CAST + () + + ) + +48 #ifdef +NDEBUG + + +50 + #as�� +( +ex� +�( + `__ASSERT_VOID_CAST + (0)) + + ) + +58 #ifdef +__USE_GNU + + +59 + #as��_��� +( +��um +�( + `__ASSERT_VOID_CAST + (0)) + + ) + +64 #i�de� +_ASSERT_H_DECLS + + +65 + #_ASSERT_H_DECLS + + + ) + +66 +__BEGIN_DECLS + + +69 + $__as��_� + (cڡ * +__as��i� +, cڡ * +__f�e +, + +70 +__l�e +, cڡ * +__fun�i� +) + +71 +__THROW + + `__��ibu�__ + (( +__nܑu�__ +)); + +74 + $__as��_���_� + ( +__��um +, cڡ * +__f�e +, + +75 +__l�e +, cڡ * +__fun�i� +) + +76 +__THROW + + `__��ibu�__ + (( +__nܑu�__ +)); + +81 + $__as�� + (cڡ * +__as��i� +, cڡ * +__f�e +, +__l�e +) + +82 +__THROW + + `__��ibu�__ + (( +__nܑu�__ +)); + +85 +__END_DECLS + + +88 + #as�� +( +ex� +) \ + +89 (( +ex� +) \ + +90 ? + `__ASSERT_VOID_CAST + (0) \ + +91 : + `__as��_� + ( + `__STRING +( +ex� +), +__FILE__ +, +__LINE__ +, +__ASSERT_FUNCTION +)) + + ) + +93 #ifdef +__USE_GNU + + +94 + #as��_��� +( +��um +) \ + +95 (!( +��um +) \ + +96 ? + `__ASSERT_VOID_CAST + (0) \ + +97 : + `__as��_���_� + (( +��um +), +__FILE__ +, +__LINE__ +, +__ASSERT_FUNCTION +)) + + ) + +105 #i� +def�ed + +__�lu�lus + ? + `__GNUC_PREREQ + (2, 6) : __GNUC_PREREQ (2, 4) + +106 + #__ASSERT_FUNCTION + +__PRETTY_FUNCTION__ + + + ) + +108 #i� +def�ed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L + +109 + #__ASSERT_FUNCTION + +__func__ + + + ) + +111 + #__ASSERT_FUNCTION + ((cڡ *�0) + + ) + +118 #i� +def�ed + +__USE_ISOC11 + && !def�ed +__�lu�lus + + +120 #unde� +��ic_as�� + + +121 + #��ic_as�� + +_S�tic_as�� + + + ) + + @/usr/include/ctype.h + +22 #i�def +_CTYPE_H + + +23 + #_CTYPE_H + 1 + + ) + +25 + ~<�u�s.h +> + +26 + ~<b�s/ty�s.h +> + +28 + g__BEGIN_DECLS + + +30 #i�de� +_ISb� + + +39 + ~<�d�n.h +> + +40 #i� +__BYTE_ORDER + =� +__BIG_ENDIAN + + +41 + #_ISb� +( +b� +�(1 << (b�)) + + ) + +43 + #_ISb� +( +b� +�((b��< 8 ? ((1 << (b�)�<< 8�: ((1 << (b�)�>> 8)) + + ) + +48 + m_ISu�� + = +_ISb� + (0), + +49 + m_ISlow� + = +_ISb� + (1), + +50 + m_IS�pha + = +_ISb� + (2), + +51 + m_ISdig� + = +_ISb� + (3), + +52 + m_ISxdig� + = +_ISb� + (4), + +53 + m_IS�a� + = +_ISb� + (5), + +54 + m_IS��t + = +_ISb� + (6), + +55 + m_ISg�ph + = +_ISb� + (7), + +56 + m_ISb�nk + = +_ISb� + (8), + +57 + m_IS��l + = +_ISb� + (9), + +58 + m_ISpun� + = +_ISb� + (10), + +59 + m_IS�num + = +_ISb� + (11) + +79 cڡ ** + $__�y�_b_loc + () + +80 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +81 cڡ +__�t32_t + ** + $__�y�_t�ow�_loc + () + +82 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +83 cڡ +__�t32_t + ** + $__�y�_tou��_loc + () + +84 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +87 #i�de� +__�lu�lus + + +88 + #__is�y� +( +c +, +ty� +) \ + +89 ((* + `__�y�_b_loc + ())[(�( +c +)] & (� +ty� +) + + ) + +90 #�i� +def�ed + +__USE_EXTERN_INLINES + + +91 + #__is�y�_f +( +ty� +) \ + +92 +__ex��_�l�e + \ + +93 +is +## + `ty� + ( +__c +� +__THROW + \ + +95 (* + `__�y�_b_loc + ())[(�( +__c +)] & (� +_IS +## +ty� +; \ + +96 + } + + ) +} + +99 + #__i�scii +( +c +�(((c�& ~0x7f�=�0� + + ) + +100 + #__t�scii +( +c +�((c�& 0x7f� + + ) + +102 + #__ex�y� +( +�me +� + `�me + (� +__THROW + + + ) + +104 +__BEGIN_NAMESPACE_STD + + +110 +__ex�y� + ( +i��um +); + +111 +__ex�y� + ( +i��ha +); + +112 +__ex�y� + ( +is��l +); + +113 +__ex�y� + ( +isdig� +); + +114 +__ex�y� + ( +i�ow� +); + +115 +__ex�y� + ( +isg�ph +); + +116 +__ex�y� + ( +i�r�t +); + +117 +__ex�y� + ( +i�un� +); + +118 +__ex�y� + ( +is�a� +); + +119 +__ex�y� + ( +isu�� +); + +120 +__ex�y� + ( +isxdig� +); + +124 + $t�ow� + ( +__c +� +__THROW +; + +127 + $tou�� + ( +__c +� +__THROW +; + +129 +__END_NAMESPACE_STD + + +133 #ifdef +__USE_ISOC99 + + +134 +__BEGIN_NAMESPACE_C99 + + +136 + `__ex�y� + ( +isb�nk +); + +138 +__END_NAMESPACE_C99 + + +141 #ifde� +__USE_GNU + + +143 + $is�y� + ( +__c +, +__mask +� +__THROW +; + +146 #i� +def�ed + +__USE_SVID + || def�ed +__USE_MISC + || def�ed +__USE_XOPEN + + +150 + $i�scii + ( +__c +� +__THROW +; + +154 + $t�scii + ( +__c +� +__THROW +; + +158 + `__ex�y� + ( +_tou�� +); + +159 + `__ex�y� + ( +_t�ow� +); + +163 + #__tobody +( +c +, +f +, +a +, +�gs +) \ + +164 ( +__ex�nsi�__ + \ + +165 ({ +__�s +; \ + +166 i�( ( +c +) > 1) \ + +168 i�( + `__bu�t�_cڡ�t_p + ( +c +)) \ + +170 +__c + = ( +c +); \ + +171 +__�s + = +__c + < -128 || __�> 255 ? __�: ( +a +)[__c]; \ + +174 +__�s + = +f + +�gs +; \ + +177 +__�s + = ( +a +)[(�( +c +)]; \ + +178 +__�s +; + } +})) + + ) + +180 #i�! +def�ed + +__NO_CTYPE + + +181 #ifde� +__is�y�_f + + +182 + $__is�y�_f + ( +�num +) + +183 + $__is�y�_f + ( +�pha +) + +184 + $__is�y�_f + ( +��l +) + +185 + $__is�y�_f + ( +dig� +) + +186 + $__is�y�_f + ( +low� +) + +187 + $__is�y�_f + ( +g�ph +) + +188 + $__is�y�_f + ( +��t +) + +189 + $__is�y�_f + ( +pun� +) + +190 + $__is�y�_f + ( +�a� +) + +191 + $__is�y�_f + ( +u�� +) + +192 + $__is�y�_f + ( +xdig� +) + +193 #ifde� +__USE_ISOC99 + + +194 + $__is�y�_f + ( +b�nk +) + +196 #�i� +def�ed + +__is�y� + + +197 + #i��um +( +c +� + `__is�y� +((c), +_IS�num +) + + ) + +198 + #i��ha +( +c +� + `__is�y� +((c), +_IS�pha +) + + ) + +199 + #is��l +( +c +� + `__is�y� +((c), +_IS��l +) + + ) + +200 + #isdig� +( +c +� + `__is�y� +((c), +_ISdig� +) + + ) + +201 + #i�ow� +( +c +� + `__is�y� +((c), +_ISlow� +) + + ) + +202 + #isg�ph +( +c +� + `__is�y� +((c), +_ISg�ph +) + + ) + +203 + #i�r�t +( +c +� + `__is�y� +((c), +_IS��t +) + + ) + +204 + #i�un� +( +c +� + `__is�y� +((c), +_ISpun� +) + + ) + +205 + #is�a� +( +c +� + `__is�y� +((c), +_IS�a� +) + + ) + +206 + #isu�� +( +c +� + `__is�y� +((c), +_ISu�� +) + + ) + +207 + #isxdig� +( +c +� + `__is�y� +((c), +_ISxdig� +) + + ) + +208 #ifde� +__USE_ISOC99 + + +209 + #isb�nk +( +c +� + `__is�y� +((c), +_ISb�nk +) + + ) + +213 #ifde� +__USE_EXTERN_INLINES + + +214 +__ex��_�l�e + + +215 + `__NTH + ( + $t�ow� + ( +__c +)) + +217 +__c + >�-128 && __�< 256 ? (* + `__�y�_t�ow�_loc + ())[__c] : __c; + +218 + } +} + +220 +__ex��_�l�e + + +221 +__NTH + ( + $tou�� + ( +__c +)) + +223 +__c + >�-128 && __�< 256 ? (* + `__�y�_tou��_loc + ())[__c] : __c; + +224 + } +} + +227 #i� +__GNUC__ + >�2 && +def�ed + +__OPTIMIZE__ + && !def�ed +__�lu�lus + + +228 + #t�ow� +( +c +� + `__tobody + (c, +t�ow� +, * + `__�y�_t�ow�_loc + (), (c)) + + ) + +229 + #tou�� +( +c +� + `__tobody + (c, +tou�� +, * + `__�y�_tou��_loc + (), (c)) + + ) + +232 #i� +def�ed + +__USE_SVID + || def�ed +__USE_MISC + || def�ed +__USE_XOPEN + + +233 + #i�scii +( +c +� + `__i�scii + (c) + + ) + +234 + #t�scii +( +c +� + `__t�scii + (c) + + ) + +236 + #_t�ow� +( +c +�((�(* + `__�y�_t�ow�_loc + ())[(�(c)]) + + ) + +237 + #_tou�� +( +c +�((�(* + `__�y�_tou��_loc + ())[(�(c)]) + + ) + +243 #ifde� +__USE_XOPEN2K8 + + +257 + ~<xlo��.h +> + +261 + #__is�y�_l +( +c +, +ty� +, +lo�� +) \ + +262 (( +lo�� +)-> +__�y�_b +[(�( +c +)] & (� +ty� +) + + ) + +264 + #__ex�y�_l +( +�me +) \ + +265 + `�me + (, +__lo��_t +� +__THROW + + + ) + +271 +__ex�y�_l + ( +i��um_l +); + +272 +__ex�y�_l + ( +i��ha_l +); + +273 +__ex�y�_l + ( +is��l_l +); + +274 +__ex�y�_l + ( +isdig�_l +); + +275 +__ex�y�_l + ( +i�ow�_l +); + +276 +__ex�y�_l + ( +isg�ph_l +); + +277 +__ex�y�_l + ( +i�r�t_l +); + +278 +__ex�y�_l + ( +i�un�_l +); + +279 +__ex�y�_l + ( +is�a�_l +); + +280 +__ex�y�_l + ( +isu��_l +); + +281 +__ex�y�_l + ( +isxdig�_l +); + +283 +__ex�y�_l + ( +isb�nk_l +); + +287 + $__t�ow�_l + ( +__c +, +__lo��_t + +__l +� +__THROW +; + +288 + $t�ow�_l + ( +__c +, +__lo��_t + +__l +� +__THROW +; + +291 + $__tou��_l + ( +__c +, +__lo��_t + +__l +� +__THROW +; + +292 + $tou��_l + ( +__c +, +__lo��_t + +__l +� +__THROW +; + +294 #i� +__GNUC__ + >�2 && +def�ed + +__OPTIMIZE__ + && !def�ed +__�lu�lus + + +295 + #__t�ow�_l +( +c +, +lo�� +) \ + +296 + `__tobody + ( +c +, +__t�ow�_l +, ( +lo�� +)-> +__�y�_t�ow� +, (c,�o��)) + + ) + +297 + #__tou��_l +( +c +, +lo�� +) \ + +298 + `__tobody + ( +c +, +__tou��_l +, ( +lo�� +)-> +__�y�_tou�� +, (c,�o��)) + + ) + +299 + #t�ow�_l +( +c +, +lo�� +� + `__t�ow�_l + ((c), (lo��)) + + ) + +300 + #tou��_l +( +c +, +lo�� +� + `__tou��_l + ((c), (lo��)) + + ) + +304 #i�de� +__NO_CTYPE + + +305 + #__i��um_l +( +c +, +l +� + `__is�y�_l +((c), +_IS�num +, (l)) + + ) + +306 + #__i��ha_l +( +c +, +l +� + `__is�y�_l +((c), +_IS�pha +, (l)) + + ) + +307 + #__is��l_l +( +c +, +l +� + `__is�y�_l +((c), +_IS��l +, (l)) + + ) + +308 + #__isdig�_l +( +c +, +l +� + `__is�y�_l +((c), +_ISdig� +, (l)) + + ) + +309 + #__i�ow�_l +( +c +, +l +� + `__is�y�_l +((c), +_ISlow� +, (l)) + + ) + +310 + #__isg�ph_l +( +c +, +l +� + `__is�y�_l +((c), +_ISg�ph +, (l)) + + ) + +311 + #__i�r�t_l +( +c +, +l +� + `__is�y�_l +((c), +_IS��t +, (l)) + + ) + +312 + #__i�un�_l +( +c +, +l +� + `__is�y�_l +((c), +_ISpun� +, (l)) + + ) + +313 + #__is�a�_l +( +c +, +l +� + `__is�y�_l +((c), +_IS�a� +, (l)) + + ) + +314 + #__isu��_l +( +c +, +l +� + `__is�y�_l +((c), +_ISu�� +, (l)) + + ) + +315 + #__isxdig�_l +( +c +, +l +� + `__is�y�_l +((c), +_ISxdig� +, (l)) + + ) + +317 + #__isb�nk_l +( +c +, +l +� + `__is�y�_l +((c), +_ISb�nk +, (l)) + + ) + +319 #i� +def�ed + +__USE_SVID + || def�ed +__USE_MISC + + +320 + #__i�scii_l +( +c +, +l +�(�), + `__i�scii + (c)) + + ) + +321 + #__t�scii_l +( +c +, +l +�(�), + `__t�scii + (c)) + + ) + +324 + #i��um_l +( +c +, +l +� + `__i��um_l + ((c), (l)) + + ) + +325 + #i��ha_l +( +c +, +l +� + `__i��ha_l + ((c), (l)) + + ) + +326 + #is��l_l +( +c +, +l +� + `__is��l_l + ((c), (l)) + + ) + +327 + #isdig�_l +( +c +, +l +� + `__isdig�_l + ((c), (l)) + + ) + +328 + #i�ow�_l +( +c +, +l +� + `__i�ow�_l + ((c), (l)) + + ) + +329 + #isg�ph_l +( +c +, +l +� + `__isg�ph_l + ((c), (l)) + + ) + +330 + #i�r�t_l +( +c +, +l +� + `__i�r�t_l + ((c), (l)) + + ) + +331 + #i�un�_l +( +c +, +l +� + `__i�un�_l + ((c), (l)) + + ) + +332 + #is�a�_l +( +c +, +l +� + `__is�a�_l + ((c), (l)) + + ) + +333 + #isu��_l +( +c +, +l +� + `__isu��_l + ((c), (l)) + + ) + +334 + #isxdig�_l +( +c +, +l +� + `__isxdig�_l + ((c), (l)) + + ) + +336 + #isb�nk_l +( +c +, +l +� + `__isb�nk_l + ((c), (l)) + + ) + +338 #i� +def�ed + +__USE_SVID + || def�ed +__USE_MISC + + +339 + #i�scii_l +( +c +, +l +� + `__i�scii_l + ((c), (l)) + + ) + +340 + #t�scii_l +( +c +, +l +� + `__t�scii_l + ((c), (l)) + + ) + +347 +__END_DECLS + + + @/usr/include/errno.h + +22 #i�def +_ERRNO_H + + +26 #i�def +__�ed_Em�h + + +27 + #_ERRNO_H + 1 + + ) + +28 + ~<�u�s.h +> + +31 + g__BEGIN_DECLS + + +35 + ~<b�s/��o.h +> + +36 #unde� +__�ed_Em�h + + +38 #ifdef +_ERRNO_H + + +45 #i�def +��o + + +46 +��o +; + +49 #ifde� +__USE_GNU + + +54 * +�og�m_�vo�ti�_�me +, * +�og�m_�vo�ti�_sh�t_�me +; + +58 + g__END_DECLS + + +66 #i� +def�ed + +__USE_GNU + || def�ed +__�ed_�r�_t + + +67 #i�de� +__�r�_t_def�ed + + +68 + t�r�_t +; + +69 + #__�r�_t_def�ed + 1 + + ) + +71 #unde� +__�ed_�r�_t + + + @/usr/include/fcntl.h + +22 #i�def +_FCNTL_H + + +23 + #_FCNTL_H + 1 + + ) + +25 + ~<�u�s.h +> + +28 + g__BEGIN_DECLS + + +31 + ~<b�s/ty�s.h +> + +35 + ~<b�s/f��.h +> + +40 #i�de� +__mode_t_def�ed + + +41 +__mode_t + + tmode_t +; + +42 + #__mode_t_def�ed + + + ) + +45 #i�de� +__off_t_def�ed + + +46 #i�de� +__USE_FILE_OFFSET64 + + +47 +__off_t + + toff_t +; + +49 +__off64_t + + toff_t +; + +51 + #__off_t_def�ed + + + ) + +54 #i� +def�ed + +__USE_LARGEFILE64 + && !def�ed +__off64_t_def�ed + + +55 +__off64_t + + toff64_t +; + +56 + #__off64_t_def�ed + + + ) + +59 #i�de� +__pid_t_def�ed + + +60 +__pid_t + + tpid_t +; + +61 + #__pid_t_def�ed + + + ) + +65 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_XOPEN2K8 + + +66 + #__�ed_time�ec + + + ) + +67 + ~<time.h +> + +68 + ~<b�s/��.h +> + +70 + #S_IFMT + +__S_IFMT + + + ) + +71 + #S_IFDIR + +__S_IFDIR + + + ) + +72 + #S_IFCHR + +__S_IFCHR + + + ) + +73 + #S_IFBLK + +__S_IFBLK + + + ) + +74 + #S_IFREG + +__S_IFREG + + + ) + +75 #ifde� +__S_IFIFO + + +76 + #S_IFIFO + +__S_IFIFO + + + ) + +78 #ifde� +__S_IFLNK + + +79 + #S_IFLNK + +__S_IFLNK + + + ) + +81 #i�( +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K8 +�&& def�ed +__S_IFSOCK + + +82 + #S_IFSOCK + +__S_IFSOCK + + + ) + +87 + #S_ISUID + +__S_ISUID + + + ) + +88 + #S_ISGID + +__S_ISGID + + + ) + +90 #i� +def�ed + +__USE_BSD + || def�ed +__USE_MISC + || def�ed +__USE_XOPEN + + +92 + #S_ISVTX + +__S_ISVTX + + + ) + +95 + #S_IRUSR + +__S_IREAD + + + ) + +96 + #S_IWUSR + +__S_IWRITE + + + ) + +97 + #S_IXUSR + +__S_IEXEC + + + ) + +99 + #S_IRWXU + ( +__S_IREAD +| +__S_IWRITE +| +__S_IEXEC +) + + ) + +101 + #S_IRGRP + ( +S_IRUSR + >> 3� + + ) + +102 + #S_IWGRP + ( +S_IWUSR + >> 3� + + ) + +103 + #S_IXGRP + ( +S_IXUSR + >> 3� + + ) + +105 + #S_IRWXG + ( +S_IRWXU + >> 3) + + ) + +107 + #S_IROTH + ( +S_IRGRP + >> 3� + + ) + +108 + #S_IWOTH + ( +S_IWGRP + >> 3� + + ) + +109 + #S_IXOTH + ( +S_IXGRP + >> 3� + + ) + +111 + #S_IRWXO + ( +S_IRWXG + >> 3) + + ) + +114 #ifdef +__USE_MISC + + +115 #i�de� +R_OK + + +118 + #R_OK + 4 + + ) + +119 + #W_OK + 2 + + ) + +120 + #X_OK + 1 + + ) + +121 + #F_OK + 0 + + ) + +126 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_XOPEN2K8 + + +127 + #SEEK_SET + 0 + + ) + +128 + #SEEK_CUR + 1 + + ) + +129 + #SEEK_END + 2 + + ) + +137 +f�� + ( +__fd +, +__cmd +, ...); + +145 #i�de� +__USE_FILE_OFFSET64 + + +146 + $ݒ + (cڡ * +__f�e +, +__o�ag +, ...� + `__n�nu� + ((1)); + +148 #ifde� +__REDIRECT + + +149 + `__REDIRECT + ( +ݒ +, (cڡ * +__f�e +, +__o�ag +, ...), +ݒ64 +) + +150 + `__n�nu� + ((1)); + +152 + #ݒ + +ݒ64 + + + ) + +155 #ifde� +__USE_LARGEFILE64 + + +156 + $ݒ64 + (cڡ * +__f�e +, +__o�ag +, ...� + `__n�nu� + ((1)); + +159 #ifde� +__USE_ATFILE + + +169 #i�de� +__USE_FILE_OFFSET64 + + +170 + $ݒ� + ( +__fd +, cڡ * +__f�e +, +__o�ag +, ...) + +171 + `__n�nu� + ((2)); + +173 #ifde� +__REDIRECT + + +174 + `__REDIRECT + ( +ݒ� +, ( +__fd +, cڡ * +__f�e +, +__o�ag +, + +175 ...), +ݒ�64 +� + `__n�nu� + ((2)); + +177 + #ݒ� + +ݒ�64 + + + ) + +180 #ifde� +__USE_LARGEFILE64 + + +181 + $ݒ�64 + ( +__fd +, cڡ * +__f�e +, +__o�ag +, ...) + +182 + `__n�nu� + ((2)); + +191 #i�de� +__USE_FILE_OFFSET64 + + +192 + $��t + (cڡ * +__f�e +, +mode_t + +__mode +� + `__n�nu� + ((1)); + +194 #ifde� +__REDIRECT + + +195 + `__REDIRECT + ( +��t +, (cڡ * +__f�e +, +mode_t + +__mode +), + +196 +��t64 +� + `__n�nu� + ((1)); + +198 + #��t + +��t64 + + + ) + +201 #ifde� +__USE_LARGEFILE64 + + +202 + $��t64 + (cڡ * +__f�e +, +mode_t + +__mode +� + `__n�nu� + ((1)); + +205 #i�! +def�ed + +F_LOCK + && (def�ed +__USE_MISC + || (def�ed +__USE_XOPEN_EXTENDED + \ + +206 && ! +def�ed + +__USE_POSIX +)) + +215 + #F_ULOCK + 0 + + ) + +216 + #F_LOCK + 1 + + ) + +217 + #F_TLOCK + 2 + + ) + +218 + #F_TEST + 3 + + ) + +220 #i�de� +__USE_FILE_OFFSET64 + + +221 + `lockf + ( +__fd +, +__cmd +, +off_t + +__�n +); + +223 #ifde� +__REDIRECT + + +224 + `__REDIRECT + ( +lockf +, ( +__fd +, +__cmd +, +__off64_t + +__�n +), +lockf64 +); + +226 + #lockf + +lockf64 + + + ) + +229 #ifde� +__USE_LARGEFILE64 + + +230 + `lockf64 + ( +__fd +, +__cmd +, +off64_t + +__�n +); + +234 #ifde� +__USE_XOPEN2K + + +237 #i�de� +__USE_FILE_OFFSET64 + + +238 + $posix_�dvi� + ( +__fd +, +off_t + +__off�t +, off_� +__�n +, + +239 +__advi� +� +__THROW +; + +241 #ifde� +__REDIRECT_NTH + + +242 + `__REDIRECT_NTH + ( +posix_�dvi� +, ( +__fd +, +__off64_t + +__off�t +, + +243 +__off64_t + +__�n +, +__advi� +), + +244 +posix_�dvi�64 +); + +246 + #posix_�dvi� + +posix_�dvi�64 + + + ) + +249 #ifde� +__USE_LARGEFILE64 + + +250 + $posix_�dvi�64 + ( +__fd +, +off64_t + +__off�t +, off64_� +__�n +, + +251 +__advi� +� +__THROW +; + +259 #i�de� +__USE_FILE_OFFSET64 + + +260 + `posix_��o�� + ( +__fd +, +off_t + +__off�t +, off_� +__�n +); + +262 #ifde� +__REDIRECT + + +263 + `__REDIRECT + ( +posix_��o�� +, ( +__fd +, +__off64_t + +__off�t +, + +264 +__off64_t + +__�n +), + +265 +posix_��o��64 +); + +267 + #posix_��o�� + +posix_��o��64 + + + ) + +270 #ifde� +__USE_LARGEFILE64 + + +271 + `posix_��o��64 + ( +__fd +, +off64_t + +__off�t +, off64_� +__�n +); + +277 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__f�tify_fun�i� + \ + +278 && +def�ed + +__va_�g_�ck_�n + + +279 + ~<b�s/f��2.h +> + +282 +__END_DECLS + + + @/usr/include/getopt.h + +19 #i�de� +_GETOPT_H + + +21 #i�de� +__�ed_g��t + + +22 + #_GETOPT_H + 1 + + ) + +32 #i�! +def�ed + +__GNU_LIBRARY__ + + +33 + ~<�y�.h +> + +36 #i�de� +__THROW + + +37 #i�de� +__GNUC_PREREQ + + +38 + #__GNUC_PREREQ +( +maj +, +m� +�(0) + + ) + +40 #i� +def�ed + +__�lu�lus + && +__GNUC_PREREQ + (2,8) + +41 + #__THROW + + `throw + () + + ) + +43 + #__THROW + + + ) + +47 #ifdef +__�lu�lus + + +57 * +ݏrg +; + +71 +�t�d +; + +76 +� +; + +80 +�t�t +; + +82 #i�de� +__�ed_g��t + + +104 + s�ti� + + +106 cڡ * + g�me +; + +109 + ghas_�g +; + +110 * + g�ag +; + +111 + gv� +; + +116 + #no_�gum�t + 0 + + ) + +117 + #�qu�ed_�gum�t + 1 + + ) + +118 + #�tiڮ_�gum�t + 2 + + ) + +146 #ifde� +__GNU_LIBRARY__ + + +150 +g��t + ( +___�gc +, *cڡ * +___�gv +, cڡ * +__sh�t�ts +) + +151 +__THROW +; + +153 #i� +def�ed + +__�ed_g��t + && def�ed +__USE_POSIX2 + \ + +154 && ! +def�ed + + g__USE_POSIX_IMPLICITLY + && !def�ed + g__USE_GNU + + +158 #ifde� +__REDIRECT + + +159 +__REDIRECT_NTH + ( +g��t +, ( +___�gc +, *cڡ * +___�gv +, + +160 cڡ * +__sh�t�ts +), + +161 +__posix_g��t +); + +163 +__posix_g��t + ( +___�gc +, *cڡ * +___�gv +, + +164 cڡ * +__sh�t�ts +� +__THROW +; + +165 + #g��t + +__posix_g��t + + + ) + +169 +g��t + (); + +172 #i�de� +__�ed_g��t + + +173 +g��t_l�g + ( +___�gc +, *cڡ * +___�gv +, + +174 cڡ * +__sh�t�ts +, + +175 cڡ +�ti� + * +__l�g�ts +, * +__l�g�d +) + +176 +__THROW +; + +177 +g��t_l�g_�ly + ( +___�gc +, *cڡ * +___�gv +, + +178 cڡ * +__sh�t�ts +, + +179 cڡ +�ti� + * +__l�g�ts +, * +__l�g�d +) + +180 +__THROW +; + +184 #ifdef +__�lu�lus + + +189 #unde� +__�ed_g��t + + + @/usr/include/libgen.h + +18 #i�de� +_LIBGEN_H + + +19 + #_LIBGEN_H + 1 + + ) + +21 + ~<�u�s.h +> + +23 +__BEGIN_DECLS + + +26 * + $d��me + (* +__�th +� +__THROW +; + +34 * + $__xpg_ba��me + (* +__�th +� +__THROW +; + +35 + #ba��me + +__xpg_ba��me + + + ) + +37 +__END_DECLS + + + @/usr/include/linux/rtc.h + +11 #i�de� +_LINUX_RTC_H_ + + +12 + #_LINUX_RTC_H_ + + + ) + +20 + s�c_time + { + +21 + mtm_�c +; + +22 + mtm_m� +; + +23 + mtm_hour +; + +24 + mtm_mday +; + +25 + mtm_m� +; + +26 + mtm_y�r +; + +27 + mtm_wday +; + +28 + mtm_yday +; + +29 + mtm_isd� +; + +36 + s�c_wk�rm + { + +37 + m�ab�d +; + +38 + m�nd�g +; + +39 +�c_time + + mtime +; + +55 + s�c_�l_�fo + { + +56 + m�l_�� +; + +57 + m�l_v�ue +; + +58 + m�l_max +; + +59 + m�l_m� +; + +60 + m�l_posmu� +; + +61 + m�l_�gmu� +; + +62 + m�l_�ock +; + +70 + #RTC_AIE_ON + + `_IO +('p', 0x01� + + ) + +71 + #RTC_AIE_OFF + + `_IO +('p', 0x02� + + ) + +72 + #RTC_UIE_ON + + `_IO +('p', 0x03� + + ) + +73 + #RTC_UIE_OFF + + `_IO +('p', 0x04� + + ) + +74 + #RTC_PIE_ON + + `_IO +('p', 0x05� + + ) + +75 + #RTC_PIE_OFF + + `_IO +('p', 0x06� + + ) + +76 + #RTC_WIE_ON + + `_IO +('p', 0x0f� + + ) + +77 + #RTC_WIE_OFF + + `_IO +('p', 0x10� + + ) + +79 + #RTC_ALM_SET + + `_IOW +('p', 0x07, +�c_time +� + + ) + +80 + #RTC_ALM_READ + + `_IOR +('p', 0x08, +�c_time +� + + ) + +81 + #RTC_RD_TIME + + `_IOR +('p', 0x09, +�c_time +� + + ) + +82 + #RTC_SET_TIME + + `_IOW +('p', 0x0a, +�c_time +� + + ) + +83 + #RTC_IRQP_READ + + `_IOR +('p', 0x0b, � + + ) + +84 + #RTC_IRQP_SET + + `_IOW +('p', 0x0c, � + + ) + +85 + #RTC_EPOCH_READ + + `_IOR +('p', 0x0d, � + + ) + +86 + #RTC_EPOCH_SET + + `_IOW +('p', 0x0e, � + + ) + +88 + #RTC_WKALM_SET + + `_IOW +('p', 0x0f, +�c_wk�rm +) + + ) + +89 + #RTC_WKALM_RD + + `_IOR +('p', 0x10, +�c_wk�rm +) + + ) + +91 + #RTC_PLL_GET + + `_IOR +('p', 0x11, +�c_�l_�fo +� + + ) + +92 + #RTC_PLL_SET + + `_IOW +('p', 0x12, +�c_�l_�fo +� + + ) + +94 + #RTC_VL_READ + + `_IOR +('p', 0x13, � + + ) + +95 + #RTC_VL_CLR + + `_IO +('p', 0x14� + + ) + +98 + #RTC_IRQF + 0x80 + + ) + +99 + #RTC_PF + 0x40 + + ) + +100 + #RTC_AF + 0x20 + + ) + +101 + #RTC_UF + 0x10 + + ) + +104 + #RTC_MAX_FREQ + 8192 + + ) + + @/usr/include/linux/sockios.h + +18 #i�de� +_LINUX_SOCKIOS_H + + +19 + #_LINUX_SOCKIOS_H + + + ) + +21 + ~<asm/sockios.h +> + +24 + #SIOCINQ + +FIONREAD + + + ) + +25 + #SIOCOUTQ + +TIOCOUTQ + + + ) + +28 + #SIOCADDRT + 0x890B + + ) + +29 + #SIOCDELRT + 0x890C + + ) + +30 + #SIOCRTMSG + 0x890D + + ) + +33 + #SIOCGIFNAME + 0x8910 + + ) + +34 + #SIOCSIFLINK + 0x8911 + + ) + +35 + #SIOCGIFCONF + 0x8912 + + ) + +36 + #SIOCGIFFLAGS + 0x8913 + + ) + +37 + #SIOCSIFFLAGS + 0x8914 + + ) + +38 + #SIOCGIFADDR + 0x8915 + + ) + +39 + #SIOCSIFADDR + 0x8916 + + ) + +40 + #SIOCGIFDSTADDR + 0x8917 + + ) + +41 + #SIOCSIFDSTADDR + 0x8918 + + ) + +42 + #SIOCGIFBRDADDR + 0x8919 + + ) + +43 + #SIOCSIFBRDADDR + 0x891� + + ) + +44 + #SIOCGIFNETMASK + 0x891b + + ) + +45 + #SIOCSIFNETMASK + 0x891� + + ) + +46 + #SIOCGIFMETRIC + 0x891d + + ) + +47 + #SIOCSIFMETRIC + 0x891� + + ) + +48 + #SIOCGIFMEM + 0x891� + + ) + +49 + #SIOCSIFMEM + 0x8920 + + ) + +50 + #SIOCGIFMTU + 0x8921 + + ) + +51 + #SIOCSIFMTU + 0x8922 + + ) + +52 + #SIOCSIFNAME + 0x8923 + + ) + +53 + #SIOCSIFHWADDR + 0x8924 + + ) + +54 + #SIOCGIFENCAP + 0x8925 + + ) + +55 + #SIOCSIFENCAP + 0x8926 + + ) + +56 + #SIOCGIFHWADDR + 0x8927 + + ) + +57 + #SIOCGIFSLAVE + 0x8929 + + ) + +58 + #SIOCSIFSLAVE + 0x8930 + + ) + +59 + #SIOCADDMULTI + 0x8931 + + ) + +60 + #SIOCDELMULTI + 0x8932 + + ) + +61 + #SIOCGIFINDEX + 0x8933 + + ) + +62 + #SIOGIFINDEX + +SIOCGIFINDEX + + + ) + +63 + #SIOCSIFPFLAGS + 0x8934 + + ) + +64 + #SIOCGIFPFLAGS + 0x8935 + + ) + +65 + #SIOCDIFADDR + 0x8936 + + ) + +66 + #SIOCSIFHWBROADCAST + 0x8937 + + ) + +67 + #SIOCGIFCOUNT + 0x8938 + + ) + +69 + #SIOCGIFBR + 0x8940 + + ) + +70 + #SIOCSIFBR + 0x8941 + + ) + +72 + #SIOCGIFTXQLEN + 0x8942 + + ) + +73 + #SIOCSIFTXQLEN + 0x8943 + + ) + +78 + #SIOCETHTOOL + 0x8946 + + ) + +80 + #SIOCGMIIPHY + 0x8947 + + ) + +81 + #SIOCGMIIREG + 0x8948 + + ) + +82 + #SIOCSMIIREG + 0x8949 + + ) + +84 + #SIOCWANDEV + 0x894A + + ) + +86 + #SIOCOUTQNSD + 0x894B + + ) + +90 + #SIOCDARP + 0x8953 + + ) + +91 + #SIOCGARP + 0x8954 + + ) + +92 + #SIOCSARP + 0x8955 + + ) + +95 + #SIOCDRARP + 0x8960 + + ) + +96 + #SIOCGRARP + 0x8961 + + ) + +97 + #SIOCSRARP + 0x8962 + + ) + +101 + #SIOCGIFMAP + 0x8970 + + ) + +102 + #SIOCSIFMAP + 0x8971 + + ) + +106 + #SIOCADDDLCI + 0x8980 + + ) + +107 + #SIOCDELDLCI + 0x8981 + + ) + +109 + #SIOCGIFVLAN + 0x8982 + + ) + +110 + #SIOCSIFVLAN + 0x8983 + + ) + +114 + #SIOCBONDENSLAVE + 0x8990 + + ) + +115 + #SIOCBONDRELEASE + 0x8991 + + ) + +116 + #SIOCBONDSETHWADDR + 0x8992 + + ) + +117 + #SIOCBONDSLAVEINFOQUERY + 0x8993 + + ) + +118 + #SIOCBONDINFOQUERY + 0x8994 + + ) + +119 + #SIOCBONDCHANGEACTIVE + 0x8995 + + ) + +122 + #SIOCBRADDBR + 0x89a0 + + ) + +123 + #SIOCBRDELBR + 0x89a1 + + ) + +124 + #SIOCBRADDIF + 0x89a2 + + ) + +125 + #SIOCBRDELIF + 0x89a3 + + ) + +128 + #SIOCSHWTSTAMP + 0x89b0 + + ) + +129 + #SIOCGHWTSTAMP + 0x89b1 + + ) + +142 + #SIOCDEVPRIVATE + 0x89F0 + + ) + +148 + #SIOCPROTOPRIVATE + 0x89E0 + + ) + + @/usr/include/linux/stddef.h + + @/usr/include/net/if.h + +19 #i�de� +_NET_IF_H + + +20 + #_NET_IF_H + 1 + + ) + +22 + ~<�u�s.h +> + +24 #ifde� +__USE_MISC + + +25 + ~<sys/ty�s.h +> + +26 + ~<sys/sock�.h +> + +31 + #IF_NAMESIZE + 16 + + ) + +33 + sif_�me�dex + + +35 + mif_�dex +; + +36 * + mif_�me +; + +40 #ifde� +__USE_MISC + + +44 + mIFF_UP + = 0x1, + +45 + #IFF_UP + +IFF_UP + + + ) + +46 + mIFF_BROADCAST + = 0x2, + +47 + #IFF_BROADCAST + +IFF_BROADCAST + + + ) + +48 + mIFF_DEBUG + = 0x4, + +49 + #IFF_DEBUG + +IFF_DEBUG + + + ) + +50 + mIFF_LOOPBACK + = 0x8, + +51 + #IFF_LOOPBACK + +IFF_LOOPBACK + + + ) + +52 + mIFF_POINTOPOINT + = 0x10, + +53 + #IFF_POINTOPOINT + +IFF_POINTOPOINT + + + ) + +54 + mIFF_NOTRAILERS + = 0x20, + +55 + #IFF_NOTRAILERS + +IFF_NOTRAILERS + + + ) + +56 + mIFF_RUNNING + = 0x40, + +57 + #IFF_RUNNING + +IFF_RUNNING + + + ) + +58 + mIFF_NOARP + = 0x80, + +59 + #IFF_NOARP + +IFF_NOARP + + + ) + +60 + mIFF_PROMISC + = 0x100, + +61 + #IFF_PROMISC + +IFF_PROMISC + + + ) + +64 + mIFF_ALLMULTI + = 0x200, + +65 + #IFF_ALLMULTI + +IFF_ALLMULTI + + + ) + +67 + mIFF_MASTER + = 0x400, + +68 + #IFF_MASTER + +IFF_MASTER + + + ) + +69 + mIFF_SLAVE + = 0x800, + +70 + #IFF_SLAVE + +IFF_SLAVE + + + ) + +72 + mIFF_MULTICAST + = 0x1000, + +73 + #IFF_MULTICAST + +IFF_MULTICAST + + + ) + +75 + mIFF_PORTSEL + = 0x2000, + +76 + #IFF_PORTSEL + +IFF_PORTSEL + + + ) + +77 + mIFF_AUTOMEDIA + = 0x4000, + +78 + #IFF_AUTOMEDIA + +IFF_AUTOMEDIA + + + ) + +79 + mIFF_DYNAMIC + = 0x8000 + +80 + #IFF_DYNAMIC + +IFF_DYNAMIC + + + ) + +88 + si�ddr + + +90 +sockaddr + + mi�_addr +; + +93 +sockaddr + + mifu_br�daddr +; + +94 +sockaddr + + mifu_d�addr +; + +95 } + mi�_ifu +; + +96 +i�� + * + mi�_i� +; + +97 +i�ddr + * + mi�_�xt +; + +100 + #i�_br�daddr + +i�_ifu +. +ifu_br�daddr + + + ) + +101 + #i�_d�addr + +i�_ifu +. +ifu_d�addr + + + ) + +111 + sifm� + + +113 + mmem_��t +; + +114 + mmem_�d +; + +115 + mba�_addr +; + +116 + m�q +; + +117 + mdma +; + +118 + mp�t +; + +126 + si�eq + + +128 + #IFHWADDRLEN + 6 + + ) + +129 + #IFNAMSIZ + +IF_NAMESIZE + + + ) + +132 + mi�n_�me +[ +IFNAMSIZ +]; + +133 } + mi�_i�n +; + +137 +sockaddr + + mi�u_addr +; + +138 +sockaddr + + mi�u_d�addr +; + +139 +sockaddr + + mi�u_br�daddr +; + +140 +sockaddr + + mi�u_�tmask +; + +141 +sockaddr + + mi�u_hwaddr +; + +142 + mi�u_�ags +; + +143 + mi�u_iv�ue +; + +144 + mi�u_mtu +; + +145 +ifm� + + mi�u_m� +; + +146 + mi�u_�ave +[ +IFNAMSIZ +]; + +147 + mi�u_�w�me +[ +IFNAMSIZ +]; + +148 +__�ddr_t + + mi�u_d�a +; + +149 } + mi�_i�u +; + +151 + #i�_�me + +i�_i�n +. +i�n_�me + + + ) + +152 + #i�_hwaddr + +i�_i�u +. +i�u_hwaddr + + + ) + +153 + #i�_addr + +i�_i�u +. +i�u_addr + + + ) + +154 + #i�_d�addr + +i�_i�u +. +i�u_d�addr + + + ) + +155 + #i�_br�daddr + +i�_i�u +. +i�u_br�daddr + + + ) + +156 + #i�_�tmask + +i�_i�u +. +i�u_�tmask + + + ) + +157 + #i�_�ags + +i�_i�u +. +i�u_�ags + + + ) + +158 + #i�_m�ric + +i�_i�u +. +i�u_iv�ue + + + ) + +159 + #i�_mtu + +i�_i�u +. +i�u_mtu + + + ) + +160 + #i�_m� + +i�_i�u +. +i�u_m� + + + ) + +161 + #i�_�ave + +i�_i�u +. +i�u_�ave + + + ) + +162 + #i�_d�a + +i�_i�u +. +i�u_d�a + + + ) + +163 + #i�_if�dex + +i�_i�u +. +i�u_iv�ue + + + ) + +164 + #i�_b�dwidth + +i�_i�u +. +i�u_iv�ue + + + ) + +165 + #i�_q�n + +i�_i�u +. +i�u_iv�ue + + + ) + +166 + #i�_�w�me + +i�_i�u +. +i�u_�w�me + + + ) + +167 + #_IOT_i�eq + + `_IOT +( + `_IOTS +(), +IFNAMSIZ +,_IOTS(),16,0,0) + + ) + +168 + #_IOT_i�eq_sh�t + + `_IOT +( + `_IOTS +(), +IFNAMSIZ +,_IOTS(),1,0,0) + + ) + +169 + #_IOT_i�eq_�t + + `_IOT +( + `_IOTS +(), +IFNAMSIZ +,_IOTS(),1,0,0) + + ) + +176 + sifc�f + + +178 + mifc_�n +; + +181 +__�ddr_t + + mifcu_buf +; + +182 +i�eq + * + mifcu_�q +; + +183 } + mifc_ifcu +; + +185 + #ifc_buf + +ifc_ifcu +. +ifcu_buf + + + ) + +186 + #ifc_�q + +ifc_ifcu +. +ifcu_�q + + + ) + +187 + #_IOT_ifc�f + + `_IOT +( + `_IOTS +( +ifc�f +),1,0,0,0,0� + + ) + +190 +__BEGIN_DECLS + + +193 + $if_�m�o�dex + (cڡ * +__i�ame +� +__THROW +; + +194 * + $if_�dext�ame + ( +__if�dex +, * +__i�ame +� +__THROW +; + +197 +if_�me�dex + * + $if_�me�dex + (� +__THROW +; + +200 + $if_��me�dex + ( +if_�me�dex + * +__�r +� +__THROW +; + +202 +__END_DECLS + + + @/usr/include/net/if_arp.h + +22 #i�de� +_NET_IF_ARP_H + + +24 + #_NET_IF_ARP_H + 1 + + ) + +25 + ~<sys/cdefs.h +> + +27 + ~<sys/ty�s.h +> + +28 + ~<sys/sock�.h +> + +30 + g__BEGIN_DECLS + + +33 + #MAX_ADDR_LEN + 7 + + ) + +39 + #ARPOP_REQUEST + 1 + + ) + +40 + #ARPOP_REPLY + 2 + + ) + +41 + #ARPOP_RREQUEST + 3 + + ) + +42 + #ARPOP_RREPLY + 4 + + ) + +43 + #ARPOP_InREQUEST + 8 + + ) + +44 + #ARPOP_InREPLY + 9 + + ) + +45 + #ARPOP_NAK + 10 + + ) + +54 + s�phdr + + +56 + m�_hrd +; + +57 + m�_�o +; + +58 + m�_h� +; + +59 + m�_�n +; + +60 + m�_� +; + +64 + m__�_sha +[ +ETH_ALEN +]; + +65 + m__�_s� +[4]; + +66 + m__�_tha +[ +ETH_ALEN +]; + +67 + m__�_t� +[4]; + +73 + #ARPHRD_NETROM + 0 + + ) + +74 + #ARPHRD_ETHER + 1 + + ) + +75 + #ARPHRD_EETHER + 2 + + ) + +76 + #ARPHRD_AX25 + 3 + + ) + +77 + #ARPHRD_PRONET + 4 + + ) + +78 + #ARPHRD_CHAOS + 5 + + ) + +79 + #ARPHRD_IEEE802 + 6 + + ) + +80 + #ARPHRD_ARCNET + 7 + + ) + +81 + #ARPHRD_APPLETLK + 8 + + ) + +82 + #ARPHRD_DLCI + 15 + + ) + +83 + #ARPHRD_ATM + 19 + + ) + +84 + #ARPHRD_METRICOM + 23 + + ) + +85 + #ARPHRD_IEEE1394 + 24 + + ) + +86 + #ARPHRD_EUI64 + 27 + + ) + +87 + #ARPHRD_INFINIBAND + 32 + + ) + +90 + #ARPHRD_SLIP + 256 + + ) + +91 + #ARPHRD_CSLIP + 257 + + ) + +92 + #ARPHRD_SLIP6 + 258 + + ) + +93 + #ARPHRD_CSLIP6 + 259 + + ) + +94 + #ARPHRD_RSRVD + 260 + + ) + +95 + #ARPHRD_ADAPT + 264 + + ) + +96 + #ARPHRD_ROSE + 270 + + ) + +97 + #ARPHRD_X25 + 271 + + ) + +98 + #ARPHRD_HWX25 + 272 + + ) + +99 + #ARPHRD_PPP + 512 + + ) + +100 + #ARPHRD_CISCO + 513 + + ) + +101 + #ARPHRD_HDLC + +ARPHRD_CISCO + + + ) + +102 + #ARPHRD_LAPB + 516 + + ) + +103 + #ARPHRD_DDCMP + 517 + + ) + +104 + #ARPHRD_RAWHDLC + 518 + + ) + +106 + #ARPHRD_TUNNEL + 768 + + ) + +107 + #ARPHRD_TUNNEL6 + 769 + + ) + +108 + #ARPHRD_FRAD + 770 + + ) + +109 + #ARPHRD_SKIP + 771 + + ) + +110 + #ARPHRD_LOOPBACK + 772 + + ) + +111 + #ARPHRD_LOCALTLK + 773 + + ) + +112 + #ARPHRD_FDDI + 774 + + ) + +113 + #ARPHRD_BIF + 775 + + ) + +114 + #ARPHRD_SIT + 776 + + ) + +115 + #ARPHRD_IPDDP + 777 + + ) + +116 + #ARPHRD_IPGRE + 778 + + ) + +117 + #ARPHRD_PIMREG + 779 + + ) + +118 + #ARPHRD_HIPPI + 780 + + ) + +119 + #ARPHRD_ASH + 781 + + ) + +120 + #ARPHRD_ECONET + 782 + + ) + +121 + #ARPHRD_IRDA + 783 + + ) + +122 + #ARPHRD_FCPP + 784 + + ) + +123 + #ARPHRD_FCAL + 785 + + ) + +124 + #ARPHRD_FCPL + 786 + + ) + +125 + #ARPHRD_FCFABRIC + 787 + + ) + +126 + #ARPHRD_IEEE802_TR + 800 + + ) + +127 + #ARPHRD_IEEE80211 + 801 + + ) + +128 + #ARPHRD_IEEE80211_PRISM + 802 + + ) + +129 + #ARPHRD_IEEE80211_RADIOTAP + 803 + + ) + +130 + #ARPHRD_IEEE802154 + 804 + + ) + +131 + #ARPHRD_IEEE802154_PHY + 805 + + ) + +133 + #ARPHRD_VOID + 0xFFFF + + ) + +134 + #ARPHRD_NONE + 0xFFFE + + ) + +138 + s��eq + + +140 +sockaddr + + m�p_� +; + +141 +sockaddr + + m�p_ha +; + +142 + m�p_�ags +; + +143 +sockaddr + + m�p_�tmask +; + +144 + m�p_dev +[16]; + +147 + s��eq_�d + + +149 +sockaddr + + m�p_� +; + +150 +sockaddr + + m�p_ha +; + +151 + m�p_�ags +; + +152 +sockaddr + + m�p_�tmask +; + +156 + #ATF_COM + 0x02 + + ) + +157 + #ATF_PERM + 0x04 + + ) + +158 + #ATF_PUBL + 0x08 + + ) + +159 + #ATF_USETRAILERS + 0x10 + + ) + +160 + #ATF_NETMASK + 0x20 + + ) + +162 + #ATF_DONTPUB + 0x40 + + ) + +163 + #ATF_MAGIC + 0x80 + + ) + +167 + #ARPD_UPDATE + 0x01 + + ) + +168 + #ARPD_LOOKUP + 0x02 + + ) + +169 + #ARPD_FLUSH + 0x03 + + ) + +171 + s�pd_�que� + + +173 + m�q +; + +174 +u_�t32_t + + m� +; + +175 + mdev +; + +176 + m�amp +; + +177 + mupd�ed +; + +178 + mha +[ +MAX_ADDR_LEN +]; + +181 + g__END_DECLS + + + @/usr/include/netdb.h + +22 #i�def +_NETDB_H + + +23 + #_NETDB_H + 1 + + ) + +25 + ~<�u�s.h +> + +27 + ~<�t��/�.h +> + +28 + ~<�d�t.h +> + +29 #ifde� +__USE_MISC + + +32 + ~<�c/�tdb.h +> + +35 #ifde� +__USE_GNU + + +36 + #__�ed_sigev�t_t + + + ) + +37 + ~<b�s/sig�fo.h +> + +38 + #__�ed_time�ec + + + ) + +39 + ~<time.h +> + +42 + ~<b�s/�tdb.h +> + +45 + #_PATH_HEQUIV + "/�c/ho�s.equiv" + + ) + +46 + #_PATH_HOSTS + "/�c/ho�s" + + ) + +47 + #_PATH_NETWORKS + "/�c/�tw�ks" + + ) + +48 + #_PATH_NSSWITCH_CONF + "/�c/nssw�ch.c�f" + + ) + +49 + #_PATH_PROTOCOLS + "/�c/��oc�s" + + ) + +50 + #_PATH_SERVICES + "/�c/�rvi�s" + + ) + +53 + g__BEGIN_DECLS + + +55 #i� +def�ed + +__USE_MISC + || !def�ed +__USE_XOPEN2K8 + + +58 + #h_��o + (* + `__h_��o_lo�ti� + ()) + + ) + +61 * + $__h_��o_lo�ti� + (� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +65 + #HOST_NOT_FOUND + 1 + + ) + +66 + #TRY_AGAIN + 2 + + ) + +68 + #NO_RECOVERY + 3 + + ) + +70 + #NO_DATA + 4 + + ) + +73 #i� +def�ed + +__USE_MISC + || def�ed +__USE_GNU + + +74 + #NETDB_INTERNAL + -1 + + ) + +75 + #NETDB_SUCCESS + 0 + + ) + +76 + #NO_ADDRESS + +NO_DATA + + + ) + +79 #i� +def�ed + +__USE_XOPEN2K + || def�ed +__USE_XOPEN_EXTENDED + + +81 + #IPPORT_RESERVED + 1024 + + ) + +84 #ifde� +__USE_GNU + + +86 + #SCOPE_DELIMITER + '%' + + ) + +89 #ifde� +__USE_MISC + + +92 + $h�r� + (cڡ * +__�r +� +__THROW +; + +95 cڡ * + $h���� + ( +__�r_num +� +__THROW +; + +100 + sho��t + + +102 * +h_�me +; + +103 ** +h_���s +; + +104 +h_add�y� +; + +105 +h_�ngth +; + +106 ** +h_addr_li� +; + +107 #i� +def�ed + +__USE_MISC + || def�ed +__USE_GNU + + +108 + #h_addr + +h_addr_li� +[0] + + ) + +117 + `�tho��t + ( +__�ay_ݒ +); + +123 + `�dho��t + (); + +130 +ho��t + * + `g�ho��t + (); + +137 +ho��t + * + `g�ho�byaddr + (cڡ * +__addr +, +__sock�n_t + +__�n +, + +138 +__ty� +); + +144 +ho��t + * + `g�ho�by�me + (cڡ * +__�me +); + +146 #ifde� +__USE_MISC + + +155 +ho��t + * + `g�ho�by�me2 + (cڡ * +__�me +, +__af +); + +167 + `g�ho��t_r + ( +ho��t + * +__��ri� + +__�su�_buf +, + +168 * +__��ri� + +__buf +, +size_t + +__bu� +, + +169 +ho��t + ** +__��ri� + +__�su� +, + +170 * +__��ri� + +__h_��� +); + +172 + `g�ho�byaddr_r + (cڡ * +__��ri� + +__addr +, +__sock�n_t + +__�n +, + +173 +__ty� +, + +174 +ho��t + * +__��ri� + +__�su�_buf +, + +175 * +__��ri� + +__buf +, +size_t + +__bu� +, + +176 +ho��t + ** +__��ri� + +__�su� +, + +177 * +__��ri� + +__h_��� +); + +179 + `g�ho�by�me_r + (cڡ * +__��ri� + +__�me +, + +180 +ho��t + * +__��ri� + +__�su�_buf +, + +181 * +__��ri� + +__buf +, +size_t + +__bu� +, + +182 +ho��t + ** +__��ri� + +__�su� +, + +183 * +__��ri� + +__h_��� +); + +185 + `g�ho�by�me2_r + (cڡ * +__��ri� + +__�me +, +__af +, + +186 +ho��t + * +__��ri� + +__�su�_buf +, + +187 * +__��ri� + +__buf +, +size_t + +__bu� +, + +188 +ho��t + ** +__��ri� + +__�su� +, + +189 * +__��ri� + +__h_��� +); + +198 + `����t + ( +__�ay_ݒ +); + +204 + `�dË� + (); + +211 +Ë� + * + `g�Ë� + (); + +218 +Ë� + * + `g��tbyaddr + ( +u�t32_t + +__�t +, +__ty� +); + +224 +Ë� + * + `g��tby�me + (cڡ * +__�me +); + +226 #ifdef +__USE_MISC + + +237 + `g�Ë�_r + ( +Ë� + * +__��ri� + +__�su�_buf +, + +238 * +__��ri� + +__buf +, +size_t + +__bu� +, + +239 +Ë� + ** +__��ri� + +__�su� +, + +240 * +__��ri� + +__h_��� +); + +242 + `g��tbyaddr_r + ( +u�t32_t + +__�t +, +__ty� +, + +243 +Ë� + * +__��ri� + +__�su�_buf +, + +244 * +__��ri� + +__buf +, +size_t + +__bu� +, + +245 +Ë� + ** +__��ri� + +__�su� +, + +246 * +__��ri� + +__h_��� +); + +248 + `g��tby�me_r + (cڡ * +__��ri� + +__�me +, + +249 +Ë� + * +__��ri� + +__�su�_buf +, + +250 * +__��ri� + +__buf +, +size_t + +__bu� +, + +251 +Ë� + ** +__��ri� + +__�su� +, + +252 * +__��ri� + +__h_��� +); + +257 + s�rv�t + + +259 * +s_�me +; + +260 ** +s_���s +; + +261 +s_p�t +; + +262 * +s_��o +; + +270 + `�t�rv�t + ( +__�ay_ݒ +); + +276 + `�d�rv�t + (); + +283 +�rv�t + * + `g��rv�t + (); + +290 +�rv�t + * + `g��rvby�me + (cڡ * +__�me +, cڡ * +__��o +); + +297 +�rv�t + * + `g��rvbyp�t + ( +__p�t +, cڡ * +__��o +); + +300 #ifdef +__USE_MISC + + +308 + `g��rv�t_r + ( +�rv�t + * +__��ri� + +__�su�_buf +, + +309 * +__��ri� + +__buf +, +size_t + +__bu� +, + +310 +�rv�t + ** +__��ri� + +__�su� +); + +312 + `g��rvby�me_r + (cڡ * +__��ri� + +__�me +, + +313 cڡ * +__��ri� + +__��o +, + +314 +�rv�t + * +__��ri� + +__�su�_buf +, + +315 * +__��ri� + +__buf +, +size_t + +__bu� +, + +316 +�rv�t + ** +__��ri� + +__�su� +); + +318 + `g��rvbyp�t_r + ( +__p�t +, cڡ * +__��ri� + +__��o +, + +319 +�rv�t + * +__��ri� + +__�su�_buf +, + +320 * +__��ri� + +__buf +, +size_t + +__bu� +, + +321 +�rv�t + ** +__��ri� + +__�su� +); + +326 + s���� + + +328 * +p_�me +; + +329 ** +p_���s +; + +330 +p_��o +; + +338 + `��r��� + ( +__�ay_ݒ +); + +344 + `�d���� + (); + +351 +���� + * + `g����� + (); + +357 +���� + * + `g���oby�me + (cڡ * +__�me +); + +363 +���� + * + `g���obynumb� + ( +__��o +); + +366 #ifdef +__USE_MISC + + +374 + `g�����_r + ( +���� + * +__��ri� + +__�su�_buf +, + +375 * +__��ri� + +__buf +, +size_t + +__bu� +, + +376 +���� + ** +__��ri� + +__�su� +); + +378 + `g���oby�me_r + (cڡ * +__��ri� + +__�me +, + +379 +���� + * +__��ri� + +__�su�_buf +, + +380 * +__��ri� + +__buf +, +size_t + +__bu� +, + +381 +���� + ** +__��ri� + +__�su� +); + +383 + `g���obynumb�_r + ( +__��o +, + +384 +���� + * +__��ri� + +__�su�_buf +, + +385 * +__��ri� + +__buf +, +size_t + +__bu� +, + +386 +���� + ** +__��ri� + +__�su� +); + +395 + `���g�� + (cڡ * +__�tgroup +); + +403 + `�d�tg�� + (); + +412 + `g��tg�� + (** +__��ri� + +__ho�p +, + +413 ** +__��ri� + +__u�� +, + +414 ** +__��ri� + +__doma�p +); + +423 + `��tgr + (cڡ * +__�tgroup +, cڡ * +__ho� +, + +424 cڡ * +__u�r +, cڡ * +__doma� +); + +432 + `g��tg��_r + (** +__��ri� + +__ho�p +, + +433 ** +__��ri� + +__u�� +, + +434 ** +__��ri� + +__doma�p +, + +435 * +__��ri� + +__buf�r +, +size_t + +__bu� +); + +439 #ifde� +__USE_BSD + + +451 + `rcmd + (** +__��ri� + +__aho� +, +__��t +, + +452 cڡ * +__��ri� + +__locu�r +, + +453 cڡ * +__��ri� + +__�mu�r +, + +454 cڡ * +__��ri� + +__cmd +, *__��ri� +__fd2p +); + +463 + `rcmd_af + (** +__��ri� + +__aho� +, +__��t +, + +464 cڡ * +__��ri� + +__locu�r +, + +465 cڡ * +__��ri� + +__�mu�r +, + +466 cڡ * +__��ri� + +__cmd +, *__��ri� +__fd2p +, + +467 +�_�m�y_t + +__af +); + +479 + `�xec + (** +__��ri� + +__aho� +, +__��t +, + +480 cڡ * +__��ri� + +__�me +, + +481 cڡ * +__��ri� + +__�ss +, + +482 cڡ * +__��ri� + +__cmd +, *__��ri� +__fd2p +); + +491 + `�xec_af + (** +__��ri� + +__aho� +, +__��t +, + +492 cڡ * +__��ri� + +__�me +, + +493 cڡ * +__��ri� + +__�ss +, + +494 cڡ * +__��ri� + +__cmd +, *__��ri� +__fd2p +, + +495 +�_�m�y_t + +__af +); + +505 + `ru�rok + (cڡ * +__rho� +, +__su�r +, + +506 cڡ * +__�mu�r +, cڡ * +__locu�r +); + +515 + `ru�rok_af + (cڡ * +__rho� +, +__su�r +, + +516 cڡ * +__�mu�r +, cڡ * +__locu�r +, + +517 +�_�m�y_t + +__af +); + +528 + `�u�rok + ( +u�t32_t + +__�ddr +, +__su�r +, + +529 cڡ * +__�mu�r +, cڡ * +__locu�r +); + +539 + `�u�rok_af + (cڡ * +__�ddr +, +__su�r +, + +540 cڡ * +__�mu�r +, cڡ * +__locu�r +, + +541 +�_�m�y_t + +__af +); + +551 + `�esvp�t + (* +__�p�t +); + +560 + `�esvp�t_af + (* +__�p�t +, +�_�m�y_t + +__af +); + +565 #ifdef +__USE_POSIX + + +567 + saddr�fo + + +569 +ai_�ags +; + +570 +ai_�m�y +; + +571 +ai_sockty� +; + +572 +ai_��oc� +; + +573 +sock�n_t + +ai_add�� +; + +574 +sockaddr + * +ai_addr +; + +575 * +ai_�n��me +; + +576 +addr�fo + * +ai_�xt +; + +579 #ifde� +__USE_GNU + + +581 + sgaicb + + +583 cڡ * +�_�me +; + +584 cڡ * +�_�rvi� +; + +585 cڡ +addr�fo + * +�_�que� +; + +586 +addr�fo + * +�_�su� +; + +588 +__�tu� +; + +589 +__glibc_��rved +[5]; + +593 + #GAI_WAIT + 0 + + ) + +594 + #GAI_NOWAIT + 1 + + ) + +598 + #AI_PASSIVE + 0x0001 + + ) + +599 + #AI_CANONNAME + 0x0002 + + ) + +600 + #AI_NUMERICHOST + 0x0004 + + ) + +601 + #AI_V4MAPPED + 0x0008 + + ) + +602 + #AI_ALL + 0x0010 + + ) + +603 + #AI_ADDRCONFIG + 0x0020 + + ) + +605 #ifde� +__USE_GNU + + +606 + #AI_IDN + 0x0040 + + ) + +609 + #AI_CANONIDN + 0x0080 + + ) + +610 + #AI_IDN_ALLOW_UNASSIGNED + 0x0100 + + ) + +612 + #AI_IDN_USE_STD3_ASCII_RULES + 0x0200 + + ) + +615 + #AI_NUMERICSERV + 0x0400 + + ) + +618 + #EAI_BADFLAGS + -1 + + ) + +619 + #EAI_NONAME + -2 + + ) + +620 + #EAI_AGAIN + -3 + + ) + +621 + #EAI_FAIL + -4 + + ) + +622 + #EAI_FAMILY + -6 + + ) + +623 + #EAI_SOCKTYPE + -7 + + ) + +624 + #EAI_SERVICE + -8 + + ) + +625 + #EAI_MEMORY + -10 + + ) + +626 + #EAI_SYSTEM + -11 + + ) + +627 + #EAI_OVERFLOW + -12 + + ) + +628 #ifde� +__USE_GNU + + +629 + #EAI_NODATA + -5 + + ) + +630 + #EAI_ADDRFAMILY + -9 + + ) + +631 + #EAI_INPROGRESS + -100 + + ) + +632 + #EAI_CANCELED + -101 + + ) + +633 + #EAI_NOTCANCELED + -102 + + ) + +634 + #EAI_ALLDONE + -103 + + ) + +635 + #EAI_INTR + -104 + + ) + +636 + #EAI_IDN_ENCODE + -105 + + ) + +639 #ifde� +__USE_MISC + + +640 + #NI_MAXHOST + 1025 + + ) + +641 + #NI_MAXSERV + 32 + + ) + +644 + #NI_NUMERICHOST + 1 + + ) + +645 + #NI_NUMERICSERV + 2 + + ) + +646 + #NI_NOFQDN + 4 + + ) + +647 + #NI_NAMEREQD + 8 + + ) + +648 + #NI_DGRAM + 16 + + ) + +649 #ifde� +__USE_GNU + + +650 + #NI_IDN + 32 + + ) + +651 + #NI_IDN_ALLOW_UNASSIGNED + 64 + + ) + +653 + #NI_IDN_USE_STD3_ASCII_RULES + 128 + + ) + +662 + `g�addr�fo + (cڡ * +__��ri� + +__�me +, + +663 cڡ * +__��ri� + +__�rvi� +, + +664 cڡ +addr�fo + * +__��ri� + +__�q +, + +665 +addr�fo + ** +__��ri� + +__�i +); + +668 + $�addr�fo + ( +addr�fo + * +__ai +� +__THROW +; + +671 cڡ * + $gai_���� + ( +__ecode +� +__THROW +; + +677 + `g��me�fo + (cڡ +sockaddr + * +__��ri� + +__� +, + +678 +sock�n_t + +__��n +, * +__��ri� + +__ho� +, + +679 +sock�n_t + +__ho��n +, * +__��ri� + +__�rv +, + +680 +sock�n_t + +__�rv�n +, +__�ags +); + +683 #ifde� +__USE_GNU + + +692 + `g�addr�fo_a + ( +__mode +, +gaicb + * +__li� +[ +__��ri�_�r +], + +693 +__�t +, +sigev�t + * +__��ri� + +__sig +); + +703 + `gai_su��d + (cڡ +gaicb + *cڡ +__li� +[], +__�t +, + +704 cڡ +time�ec + * +__timeout +); + +707 + $gai_�r� + ( +gaicb + * +__�q +� +__THROW +; + +710 + $gai_�n�l + ( +gaicb + * +__gaicbp +� +__THROW +; + +713 +__END_DECLS + + + @/usr/include/netinet/in.h + +18 #i�def +_NETINET_IN_H + + +19 + #_NETINET_IN_H + 1 + + ) + +21 + ~<�u�s.h +> + +22 + ~<�d�t.h +> + +23 + ~<sys/sock�.h +> + +24 + ~<b�s/ty�s.h +> + +27 +__BEGIN_DECLS + + +30 +u�t32_t + + t�_addr_t +; + +31 + s�_addr + + +33 +�_addr_t + + ms_addr +; + +37 + ~<b�s/�.h +> + +42 + mIPPROTO_IP + = 0, + +43 + #IPPROTO_IP + +IPPROTO_IP + + + ) + +44 + mIPPROTO_ICMP + = 1, + +45 + #IPPROTO_ICMP + +IPPROTO_ICMP + + + ) + +46 + mIPPROTO_IGMP + = 2, + +47 + #IPPROTO_IGMP + +IPPROTO_IGMP + + + ) + +48 + mIPPROTO_IPIP + = 4, + +49 + #IPPROTO_IPIP + +IPPROTO_IPIP + + + ) + +50 + mIPPROTO_TCP + = 6, + +51 + #IPPROTO_TCP + +IPPROTO_TCP + + + ) + +52 + mIPPROTO_EGP + = 8, + +53 + #IPPROTO_EGP + +IPPROTO_EGP + + + ) + +54 + mIPPROTO_PUP + = 12, + +55 + #IPPROTO_PUP + +IPPROTO_PUP + + + ) + +56 + mIPPROTO_UDP + = 17, + +57 + #IPPROTO_UDP + +IPPROTO_UDP + + + ) + +58 + mIPPROTO_IDP + = 22, + +59 + #IPPROTO_IDP + +IPPROTO_IDP + + + ) + +60 + mIPPROTO_TP + = 29, + +61 + #IPPROTO_TP + +IPPROTO_TP + + + ) + +62 + mIPPROTO_DCCP + = 33, + +63 + #IPPROTO_DCCP + +IPPROTO_DCCP + + + ) + +64 + mIPPROTO_IPV6 + = 41, + +65 + #IPPROTO_IPV6 + +IPPROTO_IPV6 + + + ) + +66 + mIPPROTO_RSVP + = 46, + +67 + #IPPROTO_RSVP + +IPPROTO_RSVP + + + ) + +68 + mIPPROTO_GRE + = 47, + +69 + #IPPROTO_GRE + +IPPROTO_GRE + + + ) + +70 + mIPPROTO_ESP + = 50, + +71 + #IPPROTO_ESP + +IPPROTO_ESP + + + ) + +72 + mIPPROTO_AH + = 51, + +73 + #IPPROTO_AH + +IPPROTO_AH + + + ) + +74 + mIPPROTO_MTP + = 92, + +75 + #IPPROTO_MTP + +IPPROTO_MTP + + + ) + +76 + mIPPROTO_BEETPH + = 94, + +77 + #IPPROTO_BEETPH + +IPPROTO_BEETPH + + + ) + +78 + mIPPROTO_ENCAP + = 98, + +79 + #IPPROTO_ENCAP + +IPPROTO_ENCAP + + + ) + +80 + mIPPROTO_PIM + = 103, + +81 + #IPPROTO_PIM + +IPPROTO_PIM + + + ) + +82 + mIPPROTO_COMP + = 108, + +83 + #IPPROTO_COMP + +IPPROTO_COMP + + + ) + +84 + mIPPROTO_SCTP + = 132, + +85 + #IPPROTO_SCTP + +IPPROTO_SCTP + + + ) + +86 + mIPPROTO_UDPLITE + = 136, + +87 + #IPPROTO_UDPLITE + +IPPROTO_UDPLITE + + + ) + +88 + mIPPROTO_RAW + = 255, + +89 + #IPPROTO_RAW + +IPPROTO_RAW + + + ) + +90 + mIPPROTO_MAX + + +96 #i�de� +__USE_KERNEL_IPV6_DEFS + + +99 + mIPPROTO_HOPOPTS + = 0, + +100 + #IPPROTO_HOPOPTS + +IPPROTO_HOPOPTS + + + ) + +101 + mIPPROTO_ROUTING + = 43, + +102 + #IPPROTO_ROUTING + +IPPROTO_ROUTING + + + ) + +103 + mIPPROTO_FRAGMENT + = 44, + +104 + #IPPROTO_FRAGMENT + +IPPROTO_FRAGMENT + + + ) + +105 + mIPPROTO_ICMPV6 + = 58, + +106 + #IPPROTO_ICMPV6 + +IPPROTO_ICMPV6 + + + ) + +107 + mIPPROTO_NONE + = 59, + +108 + #IPPROTO_NONE + +IPPROTO_NONE + + + ) + +109 + mIPPROTO_DSTOPTS + = 60, + +110 + #IPPROTO_DSTOPTS + +IPPROTO_DSTOPTS + + + ) + +111 + mIPPROTO_MH + = 135 + +112 + #IPPROTO_MH + +IPPROTO_MH + + + ) + +117 +u�t16_t + + t�_p�t_t +; + +122 + mIPPORT_ECHO + = 7, + +123 + mIPPORT_DISCARD + = 9, + +124 + mIPPORT_SYSTAT + = 11, + +125 + mIPPORT_DAYTIME + = 13, + +126 + mIPPORT_NETSTAT + = 15, + +127 + mIPPORT_FTP + = 21, + +128 + mIPPORT_TELNET + = 23, + +129 + mIPPORT_SMTP + = 25, + +130 + mIPPORT_TIMESERVER + = 37, + +131 + mIPPORT_NAMESERVER + = 42, + +132 + mIPPORT_WHOIS + = 43, + +133 + mIPPORT_MTP + = 57, + +135 + mIPPORT_TFTP + = 69, + +136 + mIPPORT_RJE + = 77, + +137 + mIPPORT_FINGER + = 79, + +138 + mIPPORT_TTYLINK + = 87, + +139 + mIPPORT_SUPDUP + = 95, + +142 + mIPPORT_EXECSERVER + = 512, + +143 + mIPPORT_LOGINSERVER + = 513, + +144 + mIPPORT_CMDSERVER + = 514, + +145 + mIPPORT_EFSSERVER + = 520, + +148 + mIPPORT_BIFFUDP + = 512, + +149 + mIPPORT_WHOSERVER + = 513, + +150 + mIPPORT_ROUTESERVER + = 520, + +153 + mIPPORT_RESERVED + = 1024, + +156 + mIPPORT_USERRESERVED + = 5000 + +164 + #IN_CLASSA +( +a +�(((( +�_addr_t +)�)�& 0x80000000�=�0) + + ) + +165 + #IN_CLASSA_NET + 0xff000000 + + ) + +166 + #IN_CLASSA_NSHIFT + 24 + + ) + +167 + #IN_CLASSA_HOST + (0xfffffff�& ~ +IN_CLASSA_NET +) + + ) + +168 + #IN_CLASSA_MAX + 128 + + ) + +170 + #IN_CLASSB +( +a +�(((( +�_addr_t +)�)�& 0xc0000000�=�0x80000000) + + ) + +171 + #IN_CLASSB_NET + 0xffff0000 + + ) + +172 + #IN_CLASSB_NSHIFT + 16 + + ) + +173 + #IN_CLASSB_HOST + (0xfffffff�& ~ +IN_CLASSB_NET +) + + ) + +174 + #IN_CLASSB_MAX + 65536 + + ) + +176 + #IN_CLASSC +( +a +�(((( +�_addr_t +)�)�& 0xe0000000�=�0xc0000000) + + ) + +177 + #IN_CLASSC_NET + 0xffffff00 + + ) + +178 + #IN_CLASSC_NSHIFT + 8 + + ) + +179 + #IN_CLASSC_HOST + (0xfffffff�& ~ +IN_CLASSC_NET +) + + ) + +181 + #IN_CLASSD +( +a +�(((( +�_addr_t +)�)�& 0xf0000000�=�0xe0000000) + + ) + +182 + #IN_MULTICAST +( +a +� + `IN_CLASSD +�) + + ) + +184 + #IN_EXPERIMENTAL +( +a +�(((( +�_addr_t +)�)�& 0xe0000000�=�0xe0000000) + + ) + +185 + #IN_BADCLASS +( +a +�(((( +�_addr_t +)�)�& 0xf0000000�=�0xf0000000) + + ) + +188 + #INADDR_ANY + (( +�_addr_t +�0x00000000) + + ) + +190 + #INADDR_BROADCAST + (( +�_addr_t +�0xffffffff) + + ) + +192 + #INADDR_NONE + (( +�_addr_t +�0xffffffff) + + ) + +195 + #IN_LOOPBACKNET + 127 + + ) + +197 #i�de� +INADDR_LOOPBACK + + +198 + #INADDR_LOOPBACK + (( +�_addr_t +�0x7f000001� + + ) + +202 + #INADDR_UNSPEC_GROUP + (( +�_addr_t +�0xe0000000� + + ) + +203 + #INADDR_ALLHOSTS_GROUP + (( +�_addr_t +�0xe0000001� + + ) + +204 + #INADDR_ALLRTRS_GROUP + (( +�_addr_t +�0xe0000002� + + ) + +205 + #INADDR_MAX_LOCAL_GROUP + (( +�_addr_t +�0xe00000ff� + + ) + +207 #i�de� +__USE_KERNEL_IPV6_DEFS + + +209 + s�6_addr + + +213 +u�t8_t + + m__u6_addr8 +[16]; + +214 #i� +def�ed + +__USE_MISC + || def�ed +__USE_GNU + + +215 +u�t16_t + + m__u6_addr16 +[8]; + +216 +u�t32_t + + m__u6_addr32 +[4]; + +218 } + m__�6_u +; + +219 + #s6_addr + +__�6_u +. +__u6_addr8 + + + ) + +220 #i� +def�ed + +__USE_MISC + || def�ed +__USE_GNU + + +221 + #s6_addr16 + +__�6_u +. +__u6_addr16 + + + ) + +222 + #s6_addr32 + +__�6_u +. +__u6_addr32 + + + ) + +227 cڡ +�6_addr + +�6addr_�y +; + +228 cڡ +�6_addr + +�6addr_lo�back +; + +229 + #IN6ADDR_ANY_INIT + { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } + + ) + +230 + #IN6ADDR_LOOPBACK_INIT + { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } + + ) + +232 + #INET_ADDRSTRLEN + 16 + + ) + +233 + #INET6_ADDRSTRLEN + 46 + + ) + +237 + ssockaddr_� + + +239 +__SOCKADDR_COMMON + ( +s�_ +); + +240 +�_p�t_t + + ms�_p�t +; + +241 +�_addr + + ms�_addr +; + +244 + ms�_z�o +[ ( +sockaddr +) - + +245 +__SOCKADDR_COMMON_SIZE + - + +246 ( +�_p�t_t +) - + +247 ( +�_addr +)]; + +250 #i�de� +__USE_KERNEL_IPV6_DEFS + + +252 + ssockaddr_�6 + + +254 +__SOCKADDR_COMMON + ( +s�6_ +); + +255 +�_p�t_t + + ms�6_p�t +; + +256 +u�t32_t + + ms�6_�ow�fo +; + +257 +�6_addr + + ms�6_addr +; + +258 +u�t32_t + + ms�6_sc�e_id +; + +262 #i� +def�ed + +__USE_MISC + || def�ed +__USE_GNU + + +264 + s�_m�q + + +267 +�_addr + + mimr_muɟddr +; + +270 +�_addr + + mimr_��r�� +; + +273 + s�_m�q_sour� + + +276 +�_addr + + mimr_muɟddr +; + +279 +�_addr + + mimr_��r�� +; + +282 +�_addr + + mimr_sour�addr +; + +286 #i�de� +__USE_KERNEL_IPV6_DEFS + + +288 + s�v6_m�q + + +291 +�6_addr + + m�v6mr_muɟddr +; + +294 + m�v6mr_��r�� +; + +298 #i� +def�ed + +__USE_MISC + || def�ed +__USE_GNU + + +300 + sgroup_�q + + +303 +u�t32_t + + mgr_��r�� +; + +306 +sockaddr_��age + + mgr_group +; + +309 + sgroup_sour�_�q + + +312 +u�t32_t + + mg�_��r�� +; + +315 +sockaddr_��age + + mg�_group +; + +318 +sockaddr_��age + + mg�_sour� +; + +323 + s�_msf��r + + +326 +�_addr + + mimsf_muɟddr +; + +329 +�_addr + + mimsf_��r�� +; + +332 +u�t32_t + + mimsf_fmode +; + +335 +u�t32_t + + mimsf_num�c +; + +337 +�_addr + + mimsf_�i� +[1]; + +340 + #IP_MSFILTER_SIZE +( +num�c +�( ( +�_msf��r +) \ + +341 - ( +�_addr +) \ + +342 + ( +num�c +�* ( +�_addr +)) + + ) + +344 + sgroup_f��r + + +347 +u�t32_t + + mgf_��r�� +; + +350 +sockaddr_��age + + mgf_group +; + +353 +u�t32_t + + mgf_fmode +; + +356 +u�t32_t + + mgf_num�c +; + +358 +sockaddr_��age + + mgf_�i� +[1]; + +361 + #GROUP_FILTER_SIZE +( +num�c +�( ( +group_f��r +) \ + +362 - ( +sockaddr_��age +) \ + +363 + (( +num�c +) \ + +364 * ( +sockaddr_��age +))) + + ) + +374 +u�t32_t + + $�ohl + ( +u�t32_t + +__Î�g +� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +375 +u�t16_t + + $�ohs + ( +u�t16_t + +__�tsh�t +) + +376 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +377 +u�t32_t + + $ht�l + ( +u�t32_t + +__ho�l�g +) + +378 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +379 +u�t16_t + + $ht�s + ( +u�t16_t + +__ho�sh�t +) + +380 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +382 + ~<�d�n.h +> + +385 + ~<b�s/by�sw�.h +> + +387 #ifde� +__OPTIMIZE__ + + +391 #i� +__BYTE_ORDER + =� +__BIG_ENDIAN + + +394 + #�ohl +( +x +�(x) + + ) + +395 + #�ohs +( +x +�(x) + + ) + +396 + #ht�l +( +x +�(x) + + ) + +397 + #ht�s +( +x +�(x) + + ) + +399 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +400 + #�ohl +( +x +� + `__bsw�_32 + (x) + + ) + +401 + #�ohs +( +x +� + `__bsw�_16 + (x) + + ) + +402 + #ht�l +( +x +� + `__bsw�_32 + (x) + + ) + +403 + #ht�s +( +x +� + `__bsw�_16 + (x) + + ) + +408 #ifde� +__GNUC__ + + +409 + #IN6_IS_ADDR_UNSPECIFIED +( +a +) \ + +410 ( +__ex�nsi�__ + \ + +411 ({ cڡ +�6_addr + * +__a + = (cڡ �6_add�*�( +a +); \ + +412 +__a +-> +s6_addr32 +[0] == 0 \ + +413 && +__a +-> +s6_addr32 +[1] == 0 \ + +414 && +__a +-> +s6_addr32 +[2] == 0 \ + +415 && +__a +-> +s6_addr32 +[3] =�0; + } +})) + + ) + +417 + #IN6_IS_ADDR_LOOPBACK +( +a +) \ + +418 ( +__ex�nsi�__ + \ + +419 ({ cڡ +�6_addr + * +__a + = (cڡ �6_add�*�( +a +); \ + +420 +__a +-> +s6_addr32 +[0] == 0 \ + +421 && +__a +-> +s6_addr32 +[1] == 0 \ + +422 && +__a +-> +s6_addr32 +[2] == 0 \ + +423 && +__a +-> +s6_addr32 +[3] =� + `ht�l + (1); })) + + ) + +425 + #IN6_IS_ADDR_LINKLOCAL +( +a +) \ + +426 ( +__ex�nsi�__ + \ + +427 ({ cڡ +�6_addr + * +__a + = (cڡ �6_add�*�( +a +); \ + +428 ( +__a +-> +s6_addr32 +[0] & + `ht�l + (0xffc00000)�=�ht��(0x�800000); })) + + ) + +430 + #IN6_IS_ADDR_SITELOCAL +( +a +) \ + +431 ( +__ex�nsi�__ + \ + +432 ({ cڡ +�6_addr + * +__a + = (cڡ �6_add�*�( +a +); \ + +433 ( +__a +-> +s6_addr32 +[0] & + `ht�l + (0xffc00000)�=�ht��(0x�c00000); })) + + ) + +435 + #IN6_IS_ADDR_V4MAPPED +( +a +) \ + +436 ( +__ex�nsi�__ + \ + +437 ({ cڡ +�6_addr + * +__a + = (cڡ �6_add�*�( +a +); \ + +438 +__a +-> +s6_addr32 +[0] == 0 \ + +439 && +__a +-> +s6_addr32 +[1] == 0 \ + +440 && +__a +-> +s6_addr32 +[2] =� + `ht�l + (0xffff); })) + + ) + +442 + #IN6_IS_ADDR_V4COMPAT +( +a +) \ + +443 ( +__ex�nsi�__ + \ + +444 ({ cڡ +�6_addr + * +__a + = (cڡ �6_add�*�( +a +); \ + +445 +__a +-> +s6_addr32 +[0] == 0 \ + +446 && +__a +-> +s6_addr32 +[1] == 0 \ + +447 && +__a +-> +s6_addr32 +[2] == 0 \ + +448 && + `�ohl + ( +__a +-> +s6_addr32 +[3]�> 1; })) + + ) + +450 + #IN6_ARE_ADDR_EQUAL +( +a +, +b +) \ + +451 ( +__ex�nsi�__ + \ + +452 ({ cڡ +�6_addr + * +__a + = (cڡ �6_add�*�( +a +); \ + +453 cڡ +�6_addr + * +__b + = (cڡ �6_add�*�( +b +); \ + +454 +__a +-> +s6_addr32 +[0] =� +__b +->s6_addr32[0] \ + +455 && +__a +-> +s6_addr32 +[1] =� +__b +->s6_addr32[1] \ + +456 && +__a +-> +s6_addr32 +[2] =� +__b +->s6_addr32[2] \ + +457 && +__a +-> +s6_addr32 +[3] =� +__b +->s6_addr32[3]; })) + + ) + +459 + #IN6_IS_ADDR_UNSPECIFIED +( +a +) \ + +460 (((cڡ +u�t32_t + *�( +a +))[0] == 0 \ + +461 && ((cڡ +u�t32_t + *�( +a +))[1] == 0 \ + +462 && ((cڡ +u�t32_t + *�( +a +))[2] == 0 \ + +463 && ((cڡ +u�t32_t + *�( +a +))[3] =�0) + + ) + +465 + #IN6_IS_ADDR_LOOPBACK +( +a +) \ + +466 (((cڡ +u�t32_t + *�( +a +))[0] == 0 \ + +467 && ((cڡ +u�t32_t + *�( +a +))[1] == 0 \ + +468 && ((cڡ +u�t32_t + *�( +a +))[2] == 0 \ + +469 && ((cڡ +u�t32_t + *�( +a +))[3] =� + `ht�l + (1)) + + ) + +471 + #IN6_IS_ADDR_LINKLOCAL +( +a +) \ + +472 ((((cڡ +u�t32_t + *�( +a +))[0] & + `ht�l + (0xffc00000)) \ + +473 =� + `ht�l + (0x�800000)) + + ) + +475 + #IN6_IS_ADDR_SITELOCAL +( +a +) \ + +476 ((((cڡ +u�t32_t + *�( +a +))[0] & + `ht�l + (0xffc00000)) \ + +477 =� + `ht�l + (0x�c00000)) + + ) + +479 + #IN6_IS_ADDR_V4MAPPED +( +a +) \ + +480 ((((cڡ +u�t32_t + *�( +a +))[0] == 0) \ + +481 && (((cڡ +u�t32_t + *�( +a +))[1] == 0) \ + +482 && (((cڡ +u�t32_t + *�( +a +))[2] =� + `ht�l + (0xffff))) + + ) + +484 + #IN6_IS_ADDR_V4COMPAT +( +a +) \ + +485 ((((cڡ +u�t32_t + *�( +a +))[0] == 0) \ + +486 && (((cڡ +u�t32_t + *�( +a +))[1] == 0) \ + +487 && (((cڡ +u�t32_t + *�( +a +))[2] == 0) \ + +488 && ( + `�ohl + (((cڡ +u�t32_t + *�( +a +))[3]�> 1)) + + ) + +490 + #IN6_ARE_ADDR_EQUAL +( +a +, +b +) \ + +491 ((((cڡ +u�t32_t + *�( +a +))[0] =�((cڡ u�t32_�*�( +b +))[0]) \ + +492 && (((cڡ +u�t32_t + *�( +a +))[1] =�((cڡ u�t32_�*�( +b +))[1]) \ + +493 && (((cڡ +u�t32_t + *�( +a +))[2] =�((cڡ u�t32_�*�( +b +))[2]) \ + +494 && (((cڡ +u�t32_t + *�( +a +))[3] =�((cڡ u�t32_�*�( +b +))[3])) + + ) + +497 + #IN6_IS_ADDR_MULTICAST +( +a +�(((cڡ +u�t8_t + *��))[0] =�0xff) + + ) + +499 #i� +def�ed + +__USE_MISC + || def�ed +__USE_GNU + + +501 + $b�d�svp�t + ( +__sockfd +, +sockaddr_� + * +__sock_� +� +__THROW +; + +504 + $b�d�svp�t6 + ( +__sockfd +, +sockaddr_�6 + * +__sock_� +) + +505 +__THROW +; + +509 + #IN6_IS_ADDR_MC_NODELOCAL +( +a +) \ + +510 ( + `IN6_IS_ADDR_MULTICAST +( +a +) \ + +511 && ((((cڡ +u�t8_t + *�( +a +))[1] & 0xf�=�0x1)) + + ) + +513 + #IN6_IS_ADDR_MC_LINKLOCAL +( +a +) \ + +514 ( + `IN6_IS_ADDR_MULTICAST +( +a +) \ + +515 && ((((cڡ +u�t8_t + *�( +a +))[1] & 0xf�=�0x2)) + + ) + +517 + #IN6_IS_ADDR_MC_SITELOCAL +( +a +) \ + +518 ( + `IN6_IS_ADDR_MULTICAST +( +a +) \ + +519 && ((((cڡ +u�t8_t + *�( +a +))[1] & 0xf�=�0x5)) + + ) + +521 + #IN6_IS_ADDR_MC_ORGLOCAL +( +a +) \ + +522 ( + `IN6_IS_ADDR_MULTICAST +( +a +) \ + +523 && ((((cڡ +u�t8_t + *�( +a +))[1] & 0xf�=�0x8)) + + ) + +525 + #IN6_IS_ADDR_MC_GLOBAL +( +a +) \ + +526 ( + `IN6_IS_ADDR_MULTICAST +( +a +) \ + +527 && ((((cڡ +u�t8_t + *�( +a +))[1] & 0xf�=�0xe)) + + ) + +530 #ifde� +__USE_GNU + + +531 +cmsghdr +; + +534 + s�6_pkt�fo + + +536 +�6_addr + +�i6_addr +; + +537 +�i6_if�dex +; + +541 + s�6_mtu�fo + + +543 +sockaddr_�6 + +�6m_addr +; + +544 +u�t32_t + +�6m_mtu +; + +549 + $��6_�ti�_�a� + ( +__nby�s +) + +550 +__THROW + +__��ibu�_d����d__ +; + +551 + $��6_�ti�_�� + (* +__bp +, +cmsghdr + ** +__cmsgp +, + +552 +__ty� +� +__THROW + +__��ibu�_d����d__ +; + +553 + $��6_�ti�_��nd + ( +cmsghdr + * +__cmsg +, + +554 cڡ +u�t8_t + * +__ty�p +, +__mu�x +, + +555 +__�usy +� +__THROW + +__��ibu�_d����d__ +; + +556 +u�t8_t + * + $��6_�ti�_�loc + ( +cmsghdr + * +__cmsg +, +__d��� +, + +557 +__mu�x +, +__�usy +) + +558 +__THROW + +__��ibu�_d����d__ +; + +559 + $��6_�ti�_�xt + (cڡ +cmsghdr + * +__cmsg +, + +560 +u�t8_t + ** +__��p +) + +561 +__THROW + +__��ibu�_d����d__ +; + +562 + $��6_�ti�_f�d + (cڡ +cmsghdr + * +__cmsg +, + +563 +u�t8_t + ** +__��p +, +__ty� +) + +564 +__THROW + +__��ibu�_d����d__ +; + +568 + $��6_�t_�� + (* +__extbuf +, +sock�n_t + +__ex�� +� +__THROW +; + +569 + $��6_�t_��nd + (* +__extbuf +, +sock�n_t + +__ex�� +, +__off�t +, + +570 +u�t8_t + +__ty� +, +sock�n_t + +__�n +, u�t8_� +__�ign +, + +571 ** +__d�abu� +� +__THROW +; + +572 + $��6_�t_f�ish + (* +__extbuf +, +sock�n_t + +__ex�� +, +__off�t +) + +573 +__THROW +; + +574 + $��6_�t_�t_v� + (* +__d�abuf +, +__off�t +, * +__v� +, + +575 +sock�n_t + +__v��n +� +__THROW +; + +576 + $��6_�t_�xt + (* +__extbuf +, +sock�n_t + +__ex�� +, +__off�t +, + +577 +u�t8_t + * +__ty�p +, +sock�n_t + * +__�� +, + +578 ** +__d�abu� +� +__THROW +; + +579 + $��6_�t_f�d + (* +__extbuf +, +sock�n_t + +__ex�� +, +__off�t +, + +580 +u�t8_t + +__ty� +, +sock�n_t + * +__�� +, + +581 ** +__d�abu� +� +__THROW +; + +582 + $��6_�t_g�_v� + (* +__d�abuf +, +__off�t +, * +__v� +, + +583 +sock�n_t + +__v��n +� +__THROW +; + +587 +sock�n_t + + $��6_�h_�a� + ( +__ty� +, +__�gm�ts +� +__THROW +; + +588 * + $��6_�h_�� + (* +__bp +, +sock�n_t + +__bp_�n +, +__ty� +, + +589 +__�gm�ts +� +__THROW +; + +590 + $��6_�h_add + (* +__bp +, cڡ +�6_addr + * +__addr +� +__THROW +; + +591 + $��6_�h_�v�� + (cڡ * +__� +, * +__out +� +__THROW +; + +592 + $��6_�h_�gm�ts + (cڡ * +__bp +� +__THROW +; + +593 +�6_addr + * + $��6_�h_g�addr + (cڡ * +__bp +, +__�dex +) + +594 +__THROW +; + +600 + $g��v4sour�f��r + ( +__s +, +�_addr + +__��r��_addr +, + +601 +�_addr + +__group +, +u�t32_t + * +__fmode +, + +602 +u�t32_t + * +__num�c +, +�_addr + * +__�i� +) + +603 +__THROW +; + +606 + $�t�v4sour�f��r + ( +__s +, +�_addr + +__��r��_addr +, + +607 +�_addr + +__group +, +u�t32_t + +__fmode +, + +608 +u�t32_t + +__num�c +, + +609 cڡ +�_addr + * +__�i� +) + +610 +__THROW +; + +614 + $g�sour�f��r + ( +__s +, +u�t32_t + +__��r��_addr +, + +615 cڡ +sockaddr + * +__group +, + +616 +sock�n_t + +__grou�� +, +u�t32_t + * +__fmode +, + +617 +u�t32_t + * +__num�c +, + +618 +sockaddr_��age + * +__�i� +� +__THROW +; + +621 + $�tsour�f��r + ( +__s +, +u�t32_t + +__��r��_addr +, + +622 cڡ +sockaddr + * +__group +, + +623 +sock�n_t + +__grou�� +, +u�t32_t + +__fmode +, + +624 +u�t32_t + +__num�c +, + +625 cڡ +sockaddr_��age + * +__�i� +� +__THROW +; + +628 +__END_DECLS + + + @/usr/include/netinet/tcp.h + +32 #i�de� +_NETINET_TCP_H + + +33 + #_NETINET_TCP_H + 1 + + ) + +35 + ~<�u�s.h +> + +40 + #TCP_NODELAY + 1 + + ) + +41 + #TCP_MAXSEG + 2 + + ) + +42 + #TCP_CORK + 3 + + ) + +43 + #TCP_KEEPIDLE + 4 + + ) + +44 + #TCP_KEEPINTVL + 5 + + ) + +45 + #TCP_KEEPCNT + 6 + + ) + +46 + #TCP_SYNCNT + 7 + + ) + +47 + #TCP_LINGER2 + 8 + + ) + +48 + #TCP_DEFER_ACCEPT + 9 + + ) + +49 + #TCP_WINDOW_CLAMP + 10 + + ) + +50 + #TCP_INFO + 11 + + ) + +51 + #TCP_QUICKACK + 12 + + ) + +52 + #TCP_CONGESTION + 13 + + ) + +53 + #TCP_MD5SIG + 14 + + ) + +54 + #TCP_COOKIE_TRANSACTIONS + 15 + + ) + +55 + #TCP_THIN_LINEAR_TIMEOUTS + 16 + + ) + +56 + #TCP_THIN_DUPACK + 17 + + ) + +57 + #TCP_USER_TIMEOUT + 18 + + ) + +58 + #TCP_REPAIR + 19 + + ) + +59 + #TCP_REPAIR_QUEUE + 20 + + ) + +60 + #TCP_QUEUE_SEQ + 21 + + ) + +61 + #TCP_REPAIR_OPTIONS + 22 + + ) + +62 + #TCP_FASTOPEN + 23 + + ) + +63 + #TCP_TIMESTAMP + 24 + + ) + +65 #ifde� +__USE_MISC + + +66 + ~<sys/ty�s.h +> + +67 + ~<sys/sock�.h +> + +69 +u_�t32_t + + tt�_�q +; + +74 + st�hdr + + +76 +__ex�nsi�__ + union + +80 +u_�t16_t + + mth_��t +; + +81 +u_�t16_t + + mth_dp�t +; + +82 +t�_�q + + mth_�q +; + +83 +t�_�q + + mth_ack +; + +84 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +85 +u_�t8_t + + mth_x2 +:4; + +86 +u_�t8_t + + mth_off +:4; + +88 #i� +__BYTE_ORDER + =� +__BIG_ENDIAN + + +89 +u_�t8_t + + mth_off +:4; + +90 +u_�t8_t + + mth_x2 +:4; + +92 +u_�t8_t + + mth_�ags +; + +93 + #TH_FIN + 0x01 + + ) + +94 + #TH_SYN + 0x02 + + ) + +95 + #TH_RST + 0x04 + + ) + +96 + #TH_PUSH + 0x08 + + ) + +97 + #TH_ACK + 0x10 + + ) + +98 + #TH_URG + 0x20 + + ) + +99 +u_�t16_t + + mth_w� +; + +100 +u_�t16_t + + mth_sum +; + +101 +u_�t16_t + + mth_u� +; + +105 +u_�t16_t + + msour� +; + +106 +u_�t16_t + + mde� +; + +107 +u_�t32_t + + m�q +; + +108 +u_�t32_t + + mack_�q +; + +109 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +110 +u_�t16_t + + m�s1 +:4; + +111 +u_�t16_t + + mdoff +:4; + +112 +u_�t16_t + + mf� +:1; + +113 +u_�t16_t + + msyn +:1; + +114 +u_�t16_t + + mr� +:1; + +115 +u_�t16_t + + mpsh +:1; + +116 +u_�t16_t + + mack +:1; + +117 +u_�t16_t + + murg +:1; + +118 +u_�t16_t + + m�s2 +:2; + +119 #�i� +__BYTE_ORDER + =� +__BIG_ENDIAN + + +120 +u_�t16_t + + mdoff +:4; + +121 +u_�t16_t + + m�s1 +:4; + +122 +u_�t16_t + + m�s2 +:2; + +123 +u_�t16_t + + murg +:1; + +124 +u_�t16_t + + mack +:1; + +125 +u_�t16_t + + mpsh +:1; + +126 +u_�t16_t + + mr� +:1; + +127 +u_�t16_t + + msyn +:1; + +128 +u_�t16_t + + mf� +:1; + +132 +u_�t16_t + + mw�dow +; + +133 +u_�t16_t + + mcheck +; + +134 +u_�t16_t + + murg_�r +; + +141 + mTCP_ESTABLISHED + = 1, + +142 + mTCP_SYN_SENT +, + +143 + mTCP_SYN_RECV +, + +144 + mTCP_FIN_WAIT1 +, + +145 + mTCP_FIN_WAIT2 +, + +146 + mTCP_TIME_WAIT +, + +147 + mTCP_CLOSE +, + +148 + mTCP_CLOSE_WAIT +, + +149 + mTCP_LAST_ACK +, + +150 + mTCP_LISTEN +, + +151 + mTCP_CLOSING + + +154 + #TCPOPT_EOL + 0 + + ) + +155 + #TCPOPT_NOP + 1 + + ) + +156 + #TCPOPT_MAXSEG + 2 + + ) + +157 + #TCPOLEN_MAXSEG + 4 + + ) + +158 + #TCPOPT_WINDOW + 3 + + ) + +159 + #TCPOLEN_WINDOW + 3 + + ) + +160 + #TCPOPT_SACK_PERMITTED + 4 + + ) + +161 + #TCPOLEN_SACK_PERMITTED + 2 + + ) + +162 + #TCPOPT_SACK + 5 + + ) + +163 + #TCPOPT_TIMESTAMP + 8 + + ) + +164 + #TCPOLEN_TIMESTAMP + 10 + + ) + +165 + #TCPOLEN_TSTAMP_APPA + ( +TCPOLEN_TIMESTAMP ++2� + + ) + +167 + #TCPOPT_TSTAMP_HDR + \ + +168 ( +TCPOPT_NOP +<<24|TCPOPT_NOP<<16| +TCPOPT_TIMESTAMP +<<8| +TCPOLEN_TIMESTAMP +) + + ) + +176 + #TCP_MSS + 512 + + ) + +178 + #TCP_MAXWIN + 65535 + + ) + +180 + #TCP_MAX_WINSHIFT + 14 + + ) + +182 + #SOL_TCP + 6 + + ) + +185 + #TCPI_OPT_TIMESTAMPS + 1 + + ) + +186 + #TCPI_OPT_SACK + 2 + + ) + +187 + #TCPI_OPT_WSCALE + 4 + + ) + +188 + #TCPI_OPT_ECN + 8 + + ) + +189 + #TCPI_OPT_ECN_SEEN + 16 + + ) + +190 + #TCPI_OPT_SYN_DATA + 32 + + ) + +193 + et�_�_��e + + +195 + mTCP_CA_O�n + = 0, + +196 + mTCP_CA_Dis�d� + = 1, + +197 + mTCP_CA_CWR + = 2, + +198 + mTCP_CA_Recov�y + = 3, + +199 + mTCP_CA_Loss + = 4 + +202 + st�_�fo + + +204 +u_�t8_t + + mt�i_��e +; + +205 +u_�t8_t + + mt�i_�_��e +; + +206 +u_�t8_t + + mt�i_���sm�s +; + +207 +u_�t8_t + + mt�i_�obes +; + +208 +u_�t8_t + + mt�i_backoff +; + +209 +u_�t8_t + + mt�i_�ti�s +; + +210 +u_�t8_t + + mt�i_�d_ws�� + : 4, + mt�i_rcv_ws�� + : 4; + +212 +u_�t32_t + + mt�i_�o +; + +213 +u_�t32_t + + mt�i_�o +; + +214 +u_�t32_t + + mt�i_�d_mss +; + +215 +u_�t32_t + + mt�i_rcv_mss +; + +217 +u_�t32_t + + mt�i_u�cked +; + +218 +u_�t32_t + + mt�i_�cked +; + +219 +u_�t32_t + + mt�i_lo� +; + +220 +u_�t32_t + + mt�i_���s +; + +221 +u_�t32_t + + mt�i_�ck�s +; + +224 +u_�t32_t + + mt�i_ϡ_d�a_�� +; + +225 +u_�t32_t + + mt�i_ϡ_ack_�� +; + +226 +u_�t32_t + + mt�i_ϡ_d�a_�cv +; + +227 +u_�t32_t + + mt�i_ϡ_ack_�cv +; + +230 +u_�t32_t + + mt�i_pmtu +; + +231 +u_�t32_t + + mt�i_rcv_s�h�sh +; + +232 +u_�t32_t + + mt�i_�t +; + +233 +u_�t32_t + + mt�i_�tv� +; + +234 +u_�t32_t + + mt�i_�d_s�h�sh +; + +235 +u_�t32_t + + mt�i_�d_cwnd +; + +236 +u_�t32_t + + mt�i_advmss +; + +237 +u_�t32_t + + mt�i_��d��g +; + +239 +u_�t32_t + + mt�i_rcv_�t +; + +240 +u_�t32_t + + mt�i_rcv_�a� +; + +242 +u_�t32_t + + mt�i_tٮ_���s +; + +247 + #TCP_MD5SIG_MAXKEYLEN + 80 + + ) + +249 + st�_md5sig + + +251 +sockaddr_��age + + mt�m_addr +; + +252 +u_�t16_t + + m__t�m_�d1 +; + +253 +u_�t16_t + + mt�m_key�n +; + +254 +u_�t32_t + + m__t�m_�d2 +; + +255 +u_�t8_t + + mt�m_key +[ +TCP_MD5SIG_MAXKEYLEN +]; + +259 + st�_���_�t + + +261 +u_�t32_t + + m�t_code +; + +262 +u_�t32_t + + m�t_v� +; + +268 + mTCP_NO_QUEUE +, + +269 + mTCP_RECV_QUEUE +, + +270 + mTCP_SEND_QUEUE +, + +271 + mTCP_QUEUES_NR +, + +275 + #TCP_COOKIE_MIN + 8 + + ) + +276 + #TCP_COOKIE_MAX + 16 + + ) + +277 + #TCP_COOKIE_PAIR_SIZE + (2* +TCP_COOKIE_MAX +) + + ) + +280 + #TCP_COOKIE_IN_ALWAYS + (1 << 0� + + ) + +281 + #TCP_COOKIE_OUT_NEVER + (1 << 1� + + ) + +285 + #TCP_S_DATA_IN + (1 << 2� + + ) + +286 + #TCP_S_DATA_OUT + (1 << 3� + + ) + +288 + #TCP_MSS_DEFAULT + 536U + + ) + +289 + #TCP_MSS_DESIRED + 1220U + + ) + +291 + st�_cook�_����i�s + + +293 +u_�t16_t + + mt��_�ags +; + +294 +u_�t8_t + + m__t��_�d1 +; + +295 +u_�t8_t + + mt��_cook�_des�ed +; + +296 +u_�t16_t + + mt��_s_d�a_des�ed +; + +297 +u_�t16_t + + mt��_u�d +; + +298 +u_�t8_t + + mt��_v�ue +[ +TCP_MSS_DEFAULT +]; + + @/usr/include/poll.h + +1 + ~<sys/p�l.h +> + + @/usr/include/pthread.h + +18 #i�de� +_PTHREAD_H + + +19 + #_PTHREAD_H + 1 + + ) + +21 + ~<�u�s.h +> + +22 + ~<�d�n.h +> + +23 + ~<sched.h +> + +24 + ~<time.h +> + +26 + ~<b�s/�h�adty�s.h +> + +27 + ~<b�s/�tjmp.h +> + +28 + ~<b�s/w�dsize.h +> + +34 + mPTHREAD_CREATE_JOINABLE +, + +35 + #PTHREAD_CREATE_JOINABLE + +PTHREAD_CREATE_JOINABLE + + + ) + +36 + mPTHREAD_CREATE_DETACHED + + +37 + #PTHREAD_CREATE_DETACHED + +PTHREAD_CREATE_DETACHED + + + ) + +44 + mPTHREAD_MUTEX_TIMED_NP +, + +45 + mPTHREAD_MUTEX_RECURSIVE_NP +, + +46 + mPTHREAD_MUTEX_ERRORCHECK_NP +, + +47 + mPTHREAD_MUTEX_ADAPTIVE_NP + + +48 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K8 + + +50 + mPTHREAD_MUTEX_NORMAL + = +PTHREAD_MUTEX_TIMED_NP +, + +51 + mPTHREAD_MUTEX_RECURSIVE + = +PTHREAD_MUTEX_RECURSIVE_NP +, + +52 + mPTHREAD_MUTEX_ERRORCHECK + = +PTHREAD_MUTEX_ERRORCHECK_NP +, + +53 + mPTHREAD_MUTEX_DEFAULT + = +PTHREAD_MUTEX_NORMAL + + +55 #ifde� +__USE_GNU + + +57 , + mPTHREAD_MUTEX_FAST_NP + = +PTHREAD_MUTEX_TIMED_NP + + +62 #ifde� +__USE_XOPEN2K + + +66 + mPTHREAD_MUTEX_STALLED +, + +67 + mPTHREAD_MUTEX_STALLED_NP + = +PTHREAD_MUTEX_STALLED +, + +68 + mPTHREAD_MUTEX_ROBUST +, + +69 + mPTHREAD_MUTEX_ROBUST_NP + = +PTHREAD_MUTEX_ROBUST + + +74 #i� +def�ed + +__USE_POSIX199506 + || def�ed +__USE_UNIX98 + + +78 + mPTHREAD_PRIO_NONE +, + +79 + mPTHREAD_PRIO_INHERIT +, + +80 + mPTHREAD_PRIO_PROTECT + + +86 #i� +__PTHREAD_MUTEX_HAVE_ELISION + == 1 + +87 + #__PTHREAD_SPINS + 0, 0 + + ) + +88 #�i� +__PTHREAD_MUTEX_HAVE_ELISION + == 2 + +89 + #__PTHREAD_SPINS + { 0, 0 } + + ) + +91 + #__PTHREAD_SPINS + 0 + + ) + +94 #ifde� +__PTHREAD_MUTEX_HAVE_PREV + + +95 + #PTHREAD_MUTEX_INITIALIZER + \ + +96 { { 0, 0, 0, 0, 0, +__PTHREAD_SPINS +, { 0, 0 } } } + + ) + +97 #ifde� +__USE_GNU + + +98 + #PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + \ + +99 { { 0, 0, 0, 0, +PTHREAD_MUTEX_RECURSIVE_NP +, +__PTHREAD_SPINS +, { 0, 0 } } } + + ) + +100 + #PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP + \ + +101 { { 0, 0, 0, 0, +PTHREAD_MUTEX_ERRORCHECK_NP +, +__PTHREAD_SPINS +, { 0, 0 } } } + + ) + +102 + #PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP + \ + +103 { { 0, 0, 0, 0, +PTHREAD_MUTEX_ADAPTIVE_NP +, +__PTHREAD_SPINS +, { 0, 0 } } } + + ) + +104 + #PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP + \ + +105 { { 0, 0, 0, 0, +PTHREAD_MUTEX_ADAPTIVE_NP +, +__PTHREAD_SPINS +, { 0, 0 } } } + + ) + +109 + #PTHREAD_MUTEX_INITIALIZER + \ + +110 { { 0, 0, 0, 0, 0, { +__PTHREAD_SPINS + } } } + + ) + +111 #ifde� +__USE_GNU + + +112 + #PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + \ + +113 { { 0, 0, 0, +PTHREAD_MUTEX_RECURSIVE_NP +, 0, { +__PTHREAD_SPINS + } } } + + ) + +114 + #PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP + \ + +115 { { 0, 0, 0, +PTHREAD_MUTEX_ERRORCHECK_NP +, 0, { +__PTHREAD_SPINS + } } } + + ) + +116 + #PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP + \ + +117 { { 0, 0, 0, +PTHREAD_MUTEX_ADAPTIVE_NP +, 0, { +__PTHREAD_SPINS + } } } + + ) + +124 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K + + +127 + mPTHREAD_RWLOCK_PREFER_READER_NP +, + +128 + mPTHREAD_RWLOCK_PREFER_WRITER_NP +, + +129 + mPTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP +, + +130 + mPTHREAD_RWLOCK_DEFAULT_NP + = +PTHREAD_RWLOCK_PREFER_READER_NP + + +136 #i�de� +__PTHREAD_RWLOCK_INT_FLAGS_SHARED + + +137 #i� +__WORDSIZE + == 64 + +138 + #__PTHREAD_RWLOCK_INT_FLAGS_SHARED + 1 + + ) + +143 + #PTHREAD_RWLOCK_INITIALIZER + \ + +144 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + + ) + +145 #ifde� +__USE_GNU + + +146 #ifde� +__PTHREAD_RWLOCK_INT_FLAGS_SHARED + + +147 + #PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP + \ + +149 +PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP + } } + + ) + +151 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +152 + #PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP + \ + +153 { { 0, 0, 0, 0, 0, 0, +PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP +, \ + +154 0, 0, 0, 0 } } + + ) + +156 + #PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP + \ + +157 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, +PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP +,\ + +158 0 } } + + ) + +168 + mPTHREAD_INHERIT_SCHED +, + +169 + #PTHREAD_INHERIT_SCHED + +PTHREAD_INHERIT_SCHED + + + ) + +170 + mPTHREAD_EXPLICIT_SCHED + + +171 + #PTHREAD_EXPLICIT_SCHED + +PTHREAD_EXPLICIT_SCHED + + + ) + +178 + mPTHREAD_SCOPE_SYSTEM +, + +179 + #PTHREAD_SCOPE_SYSTEM + +PTHREAD_SCOPE_SYSTEM + + + ) + +180 + mPTHREAD_SCOPE_PROCESS + + +181 + #PTHREAD_SCOPE_PROCESS + +PTHREAD_SCOPE_PROCESS + + + ) + +188 + mPTHREAD_PROCESS_PRIVATE +, + +189 + #PTHREAD_PROCESS_PRIVATE + +PTHREAD_PROCESS_PRIVATE + + + ) + +190 + mPTHREAD_PROCESS_SHARED + + +191 + #PTHREAD_PROCESS_SHARED + +PTHREAD_PROCESS_SHARED + + + ) + +197 + #PTHREAD_COND_INITIALIZER + { { 0, 0, 0, 0, 0, (*�0, 0, 0 } } + + ) + +201 + s_�h�ad_��nup_buf�r + + +203 (* + m__rout�e +) (*); + +204 * + m__�g +; + +205 + m__�n��y� +; + +206 +_�h�ad_��nup_buf�r + * + m__�ev +; + +212 + mPTHREAD_CANCEL_ENABLE +, + +213 + #PTHREAD_CANCEL_ENABLE + +PTHREAD_CANCEL_ENABLE + + + ) + +214 + mPTHREAD_CANCEL_DISABLE + + +215 + #PTHREAD_CANCEL_DISABLE + +PTHREAD_CANCEL_DISABLE + + + ) + +219 + mPTHREAD_CANCEL_DEFERRED +, + +220 + #PTHREAD_CANCEL_DEFERRED + +PTHREAD_CANCEL_DEFERRED + + + ) + +221 + mPTHREAD_CANCEL_ASYNCHRONOUS + + +222 + #PTHREAD_CANCEL_ASYNCHRONOUS + +PTHREAD_CANCEL_ASYNCHRONOUS + + + ) + +224 + #PTHREAD_CANCELED + ((*�-1) + + ) + +228 + #PTHREAD_ONCE_INIT + 0 + + ) + +231 #ifde� +__USE_XOPEN2K + + +235 + #PTHREAD_BARRIER_SERIAL_THREAD + -1 + + ) + +239 +__BEGIN_DECLS + + +244 +�h�ad_��� + ( +�h�ad_t + * +__��ri� + +__�wth�ad +, + +245 cڡ +�h�ad_��_t + * +__��ri� + +__�� +, + +246 *(* +__��t_rout�e +) (*), + +247 * +__��ri� + +__�g +� +__THROWNL + +__n�nu� + ((1, 3)); + +253 + $�h�ad_ex� + (* +__�tv� +� + `__��ibu�__ + (( +__nܑu�__ +)); + +261 + `�h�ad_jo� + ( +�h�ad_t + +__th +, ** +__th�ad_�tu� +); + +263 #ifde� +__USE_GNU + + +266 + $�h�ad_�yjo�_� + ( +�h�ad_t + +__th +, ** +__th�ad_�tu� +� +__THROW +; + +274 + `�h�ad_timedjo�_� + ( +�h�ad_t + +__th +, ** +__th�ad_�tu� +, + +275 cڡ +time�ec + * +__ab�ime +); + +282 + $�h�ad_d�ach + ( +�h�ad_t + +__th +� +__THROW +; + +286 +�h�ad_t + + $�h�ad_�lf + (� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +289 + $�h�ad_equ� + ( +�h�ad_t + +__th�ad1 +,�th�ad_� +__th�ad2 +) + +290 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +298 + $�h�ad_��_�� + ( +�h�ad_��_t + * +__�� +� +__THROW + + `__n�nu� + ((1)); + +301 + $�h�ad_��_de�roy + ( +�h�ad_��_t + * +__�� +) + +302 +__THROW + + `__n�nu� + ((1)); + +305 + $�h�ad_��_g�d�ach��e + (cڡ +�h�ad_��_t + * +__�� +, + +306 * +__d�ach��e +) + +307 +__THROW + + `__n�nu� + ((1, 2)); + +310 + $�h�ad_��_�td�ach��e + ( +�h�ad_��_t + * +__�� +, + +311 +__d�ach��e +) + +312 +__THROW + + `__n�nu� + ((1)); + +316 + $�h�ad_��_g�gu�dsize + (cڡ +�h�ad_��_t + * +__�� +, + +317 +size_t + * +__gu�dsize +) + +318 +__THROW + + `__n�nu� + ((1, 2)); + +321 + $�h�ad_��_�tgu�dsize + ( +�h�ad_��_t + * +__�� +, + +322 +size_t + +__gu�dsize +) + +323 +__THROW + + `__n�nu� + ((1)); + +327 + $�h�ad_��_g�sched��m + (cڡ +�h�ad_��_t + * +__��ri� + +__�� +, + +328 +sched_��m + * +__��ri� + +__��m +) + +329 +__THROW + + `__n�nu� + ((1, 2)); + +332 + $�h�ad_��_�tsched��m + ( +�h�ad_��_t + * +__��ri� + +__�� +, + +333 cڡ +sched_��m + * +__��ri� + + +334 +__��m +� +__THROW + + `__n�nu� + ((1, 2)); + +337 + $�h�ad_��_g�schedp�icy + (cڡ +�h�ad_��_t + * +__��ri� + + +338 +__�� +, * +__��ri� + +__p�icy +) + +339 +__THROW + + `__n�nu� + ((1, 2)); + +342 + $�h�ad_��_�tschedp�icy + ( +�h�ad_��_t + * +__�� +, +__p�icy +) + +343 +__THROW + + `__n�nu� + ((1)); + +346 + $�h�ad_��_g��h��sched + (cڡ +�h�ad_��_t + * +__��ri� + + +347 +__�� +, * +__��ri� + +__�h�� +) + +348 +__THROW + + `__n�nu� + ((1, 2)); + +351 + $�h�ad_��_�t�h��sched + ( +�h�ad_��_t + * +__�� +, + +352 +__�h�� +) + +353 +__THROW + + `__n�nu� + ((1)); + +357 + $�h�ad_��_g�sc�e + (cڡ +�h�ad_��_t + * +__��ri� + +__�� +, + +358 * +__��ri� + +__sc�e +) + +359 +__THROW + + `__n�nu� + ((1, 2)); + +362 + $�h�ad_��_�tsc�e + ( +�h�ad_��_t + * +__�� +, +__sc�e +) + +363 +__THROW + + `__n�nu� + ((1)); + +366 + $�h�ad_��_g��ackaddr + (cڡ +�h�ad_��_t + * +__��ri� + + +367 +__�� +, ** +__��ri� + +__�ackaddr +) + +368 +__THROW + + `__n�nu� + ((1, 2)� +__��ibu�_d����d__ +; + +374 + $�h�ad_��_�t�ackaddr + ( +�h�ad_��_t + * +__�� +, + +375 * +__�ackaddr +) + +376 +__THROW + + `__n�nu� + ((1)� +__��ibu�_d����d__ +; + +379 + $�h�ad_��_g��acksize + (cڡ +�h�ad_��_t + * +__��ri� + + +380 +__�� +, +size_t + * +__��ri� + +__�acksize +) + +381 +__THROW + + `__n�nu� + ((1, 2)); + +386 + $�h�ad_��_�t�acksize + ( +�h�ad_��_t + * +__�� +, + +387 +size_t + +__�acksize +) + +388 +__THROW + + `__n�nu� + ((1)); + +390 #ifde� +__USE_XOPEN2K + + +392 + $�h�ad_��_g��ack + (cڡ +�h�ad_��_t + * +__��ri� + +__�� +, + +393 ** +__��ri� + +__�ackaddr +, + +394 +size_t + * +__��ri� + +__�acksize +) + +395 +__THROW + + `__n�nu� + ((1, 2, 3)); + +400 + $�h�ad_��_�t�ack + ( +�h�ad_��_t + * +__�� +, * +__�ackaddr +, + +401 +size_t + +__�acksize +� +__THROW + + `__n�nu� + ((1)); + +404 #ifde� +__USE_GNU + + +407 + $�h�ad_��_��ff��y_� + ( +�h�ad_��_t + * +__�� +, + +408 +size_t + +__�u�tsize +, + +409 cڡ +�u_�t_t + * +__�u�t +) + +410 +__THROW + + `__n�nu� + ((1, 3)); + +414 + $�h�ad_��_g�aff��y_� + (cڡ +�h�ad_��_t + * +__�� +, + +415 +size_t + +__�u�tsize +, + +416 +�u_�t_t + * +__�u�t +) + +417 +__THROW + + `__n�nu� + ((1, 3)); + +420 + $�h�ad_g���_de�u�_� + ( +�h�ad_��_t + * +__�� +) + +421 +__THROW + + `__n�nu� + ((1)); + +425 + $�h�ad_���r_de�u�_� + (cڡ +�h�ad_��_t + * +__�� +) + +426 +__THROW + + `__n�nu� + ((1)); + +431 + $�h�ad_g���_� + ( +�h�ad_t + +__th +, +�h�ad_��_t + * +__�� +) + +432 +__THROW + + `__n�nu� + ((2)); + +440 + $�h�ad_�tsched��m + ( +�h�ad_t + +__�rg�_th�ad +, +__p�icy +, + +441 cڡ +sched_��m + * +__��m +) + +442 +__THROW + + `__n�nu� + ((3)); + +445 + $�h�ad_g�sched��m + ( +�h�ad_t + +__�rg�_th�ad +, + +446 * +__��ri� + +__p�icy +, + +447 +sched_��m + * +__��ri� + +__��m +) + +448 +__THROW + + `__n�nu� + ((2, 3)); + +451 + $�h�ad_�tsched�io + ( +�h�ad_t + +__�rg�_th�ad +, +__�io +) + +452 +__THROW +; + +455 #ifde� +__USE_GNU + + +457 + $�h�ad_g��me_� + ( +�h�ad_t + +__�rg�_th�ad +, * +__buf +, + +458 +size_t + +__bu� +) + +459 +__THROW + + `__n�nu� + ((2)); + +462 + $�h�ad_��ame_� + ( +�h�ad_t + +__�rg�_th�ad +, cڡ * +__�me +) + +463 +__THROW + + `__n�nu� + ((2)); + +467 #ifde� +__USE_UNIX98 + + +469 + $�h�ad_g�c�cu��cy + (� +__THROW +; + +472 + $�h�ad_�tc�cu��cy + ( +__�v� +� +__THROW +; + +475 #ifde� +__USE_GNU + + +480 + $�h�ad_y�ld + (� +__THROW +; + +485 + $�h�ad_��ff��y_� + ( +�h�ad_t + +__th +, +size_t + +__�u�tsize +, + +486 cڡ +�u_�t_t + * +__�u�t +) + +487 +__THROW + + `__n�nu� + ((3)); + +490 + $�h�ad_g�aff��y_� + ( +�h�ad_t + +__th +, +size_t + +__�u�tsize +, + +491 +�u_�t_t + * +__�u�t +) + +492 +__THROW + + `__n�nu� + ((3)); + +505 + `�h�ad_�� + ( +�h�ad_��_t + * +__��_cڌ� +, + +506 (* +__��_rout�e +�()� + `__n�nu� + ((1, 2)); + +517 + `�h�ad_�t�n�l��e + ( +__��e +, * +__�d��e +); + +521 + `�h�ad_�t�n��y� + ( +__ty� +, * +__�dty� +); + +524 + `�h�ad_�n�l + ( +�h�ad_t + +__th +); + +529 + `�h�ad_���n�l + (); + +538 +__jmp_buf + +__�n�l_jmp_buf +; + +539 +__mask_was_�ved +; + +540 } +__�n�l_jmp_buf +[1]; + +541 * +__�d +[4]; + +542 } + t__�h�ad_unw�d_buf_t + + t__��ibu�__ + (( + t__�ig�d__ +)); + +545 #i�de� +__��nup_f�_��ibu� + + +546 + #__��nup_f�_��ibu� + + + ) + +551 + s__�h�ad_��nup_�ame + + +553 (* +__�n�l_rout�e +) (*); + +554 * +__�n�l_�g +; + +555 +__do_� +; + +556 +__�n�l_ty� +; + +559 #i� +def�ed + +__GNUC__ + && def�ed +__EXCEPTIONS + + +560 #ifde� +__�lu�lus + + +562 �as� + c__�h�ad_��nup_�ass + + +564 (* +__�n�l_rout�e +) (*); + +565 * +__�n�l_�g +; + +566 +__do_� +; + +567 +__�n�l_ty� +; + +569 +public +: + +570 + `__�h�ad_��nup_�ass + ((* +__f� +�(*), * +__�g +) + +571 : + `__�n�l_rout�e + ( +__f� +), + `__�n�l_�g + ( +__�g +), + $__do_� + (1) { } + +572 ~ + $__�h�ad_��nup_�ass + (�{ i�( +__do_� +� + `__�n�l_rout�e + ( +__�n�l_�g +); + } +} + +573 + $__�tdo� + ( +__�wv� +�{ +__do_� + = __�wv�; + } +} + +574 + $__de�r + (�{ + `�h�ad_�t�n��y� + ( +PTHREAD_CANCEL_DEFERRED +, + +575 & +__�n�l_ty� +); + } +} + +576 + $__���e + (�cڡ { + `�h�ad_�t�n��y� + ( +__�n�l_ty� +, 0); + } +} + +586 + #�h�ad_��nup_push +( +rout�e +, +�g +) \ + +588 +__�h�ad_��nup_�ass + + `__��ame + ( +rout�e +, +�g +) + + ) + +592 + #�h�ad_��nup_p� +( +execu� +) \ + +593 +__��ame +. + `__�tdo� + ( +execu� +); \ + +594 } 0) + + ) + +596 #ifde� +__USE_GNU + + +600 + #�h�ad_��nup_push_de�r_� +( +rout�e +, +�g +) \ + +602 +__�h�ad_��nup_�ass + + `__��ame + ( +rout�e +, +�g +); \ + +603 +__��ame +. + `__de�r + () + + ) + +608 + #�h�ad_��nup_p�_���e_� +( +execu� +) \ + +609 +__��ame +. + `__���e + (); \ + +610 +__��ame +. + `__�tdo� + ( +execu� +); \ + +611 } 0) + + ) + +618 +__ex��_�l�e + + +619 + $__�h�ad_��nup_rout�e + ( +__�h�ad_��nup_�ame + * +__�ame +) + +621 i�( +__�ame +-> +__do_� +) + +622 +__�ame +-> + `__�n�l_rout�e + (__�ame-> +__�n�l_�g +); + +623 + } +} + +632 + #�h�ad_��nup_push +( +rout�e +, +�g +) \ + +634 +__�h�ad_��nup_�ame + +__��ame + \ + +635 + `__��ibu�__ + (( + `__��nup__ + ( +__�h�ad_��nup_rout�e +))) \ + +636 �{ . +__�n�l_rout�e + = ( +rout�e +), . +__�n�l_�g + = ( +�g +), \ + +637 . +__do_� + = 1 }; + + ) + +641 + #�h�ad_��nup_p� +( +execu� +) \ + +642 +__��ame +. +__do_� + = ( +execu� +); \ + +643 } 0) + + ) + +645 #ifde� +__USE_GNU + + +649 + #�h�ad_��nup_push_de�r_� +( +rout�e +, +�g +) \ + +651 +__�h�ad_��nup_�ame + +__��ame + \ + +652 + `__��ibu�__ + (( + `__��nup__ + ( +__�h�ad_��nup_rout�e +))) \ + +653 �{ . +__�n�l_rout�e + = ( +rout�e +), . +__�n�l_�g + = ( +�g +), \ + +654 . +__do_� + = 1 }; \ + +655 (� + `�h�ad_�t�n��y� + ( +PTHREAD_CANCEL_DEFERRED +, \ + +656 & +__��ame +. +__�n�l_ty� +) + + ) + +661 + #�h�ad_��nup_p�_���e_� +( +execu� +) \ + +662 (� + `�h�ad_�t�n��y� + ( +__��ame +. +__�n�l_ty� +, +NULL +); \ + +663 +__��ame +. +__do_� + = ( +execu� +); \ + +664 } 0) + + ) + +675 + #�h�ad_��nup_push +( +rout�e +, +�g +) \ + +677 +__�h�ad_unw�d_buf_t + +__�n�l_buf +; \ + +678 (* +__�n�l_rout�e +�(*��( +rout�e +); \ + +679 * +__�n�l_�g + = ( +�g +); \ + +680 +__n�_f��_�� + = + `__sig�tjmp + (( +__jmp_buf_�g + *) (*) \ + +681 +__�n�l_buf +. +__�n�l_jmp_buf +, 0); \ + +682 i�( + `__glibc_u�ik�y + ( +__n�_f��_�� +)) \ + +684 + `__�n�l_rout�e + ( +__�n�l_�g +); \ + +685 + `__�h�ad_unw�d_�xt + (& +__�n�l_buf +); \ + +689 + `__�h�ad_�gi��_�n�l + (& +__�n�l_buf +); \ + +690 d�{ + + ) + +691 +__�h�ad_�gi��_�n�l + ( +__�h�ad_unw�d_buf_t + * +__buf +) + +692 +__��nup_f�_��ibu� +; + +696 + #�h�ad_��nup_p� +( +execu� +) \ + +699 + `__�h�ad_u�egi��_�n�l + (& +__�n�l_buf +); \ + +700 i�( +execu� +) \ + +701 + `__�n�l_rout�e + ( +__�n�l_�g +); \ + +702 } 0) + + ) + +703 + $__�h�ad_u�egi��_�n�l + ( +__�h�ad_unw�d_buf_t + * +__buf +) + +704 +__��nup_f�_��ibu� +; + +706 #ifde� +__USE_GNU + + +710 + #�h�ad_��nup_push_de�r_� +( +rout�e +, +�g +) \ + +712 +__�h�ad_unw�d_buf_t + +__�n�l_buf +; \ + +713 (* +__�n�l_rout�e +�(*��( +rout�e +); \ + +714 * +__�n�l_�g + = ( +�g +); \ + +715 +__n�_f��_�� + = + `__sig�tjmp + (( +__jmp_buf_�g + *) (*) \ + +716 +__�n�l_buf +. +__�n�l_jmp_buf +, 0); \ + +717 i�( + `__glibc_u�ik�y + ( +__n�_f��_�� +)) \ + +719 + `__�n�l_rout�e + ( +__�n�l_�g +); \ + +720 + `__�h�ad_unw�d_�xt + (& +__�n�l_buf +); \ + +724 + `__�h�ad_�gi��_�n�l_de�r + (& +__�n�l_buf +); \ + +725 d�{ + + ) + +726 + `__�h�ad_�gi��_�n�l_de�r + ( +__�h�ad_unw�d_buf_t + * +__buf +) + +727 +__��nup_f�_��ibu� +; + +732 + #�h�ad_��nup_p�_���e_� +( +execu� +) \ + +735 + `__�h�ad_u�egi��_�n�l_���e + (& +__�n�l_buf +); \ + +736 i�( +execu� +) \ + +737 + `__�n�l_rout�e + ( +__�n�l_�g +); \ + +738 + } +} 0) + + ) + +739 + $__�h�ad_u�egi��_�n�l_���e + ( +__�h�ad_unw�d_buf_t + * +__buf +) + +740 +__��nup_f�_��ibu� +; + +744 + $__�h�ad_unw�d_�xt + ( +__�h�ad_unw�d_buf_t + * +__buf +) + +745 +__��nup_f�_��ibu� + + `__��ibu�__ + (( +__nܑu�__ +)) + +746 #i�de� +SHARED + + +747 + `__��ibu�__ + (( +__w�k__ +)) + +753 +__jmp_buf_�g +; + +754 + $__sig�tjmp + ( +__jmp_buf_�g + * +__�v +, +__�vemask +� +__THROWNL +; + +760 + $�h�ad_mu�x_�� + ( +�h�ad_mu�x_t + * +__mu�x +, + +761 cڡ +�h�ad_mu�x��_t + * +__mu�x�� +) + +762 +__THROW + + `__n�nu� + ((1)); + +765 + $�h�ad_mu�x_de�roy + ( +�h�ad_mu�x_t + * +__mu�x +) + +766 +__THROW + + `__n�nu� + ((1)); + +769 + $�h�ad_mu�x_�ylock + ( +�h�ad_mu�x_t + * +__mu�x +) + +770 +__THROWNL + + `__n�nu� + ((1)); + +773 + $�h�ad_mu�x_lock + ( +�h�ad_mu�x_t + * +__mu�x +) + +774 +__THROWNL + + `__n�nu� + ((1)); + +776 #ifde� +__USE_XOPEN2K + + +778 + $�h�ad_mu�x_timedlock + ( +�h�ad_mu�x_t + * +__��ri� + +__mu�x +, + +779 cڡ +time�ec + * +__��ri� + + +780 +__ab�ime +� +__THROWNL + + `__n�nu� + ((1, 2)); + +784 + $�h�ad_mu�x_u�ock + ( +�h�ad_mu�x_t + * +__mu�x +) + +785 +__THROWNL + + `__n�nu� + ((1)); + +789 + $�h�ad_mu�x_g��io���g + (cڡ +�h�ad_mu�x_t + * + +790 +__��ri� + +__mu�x +, + +791 * +__��ri� + +__�io���g +) + +792 +__THROW + + `__n�nu� + ((1, 2)); + +796 + $�h�ad_mu�x_��rio���g + ( +�h�ad_mu�x_t + * +__��ri� + +__mu�x +, + +797 +__�io���g +, + +798 * +__��ri� + +__�d_���g +) + +799 +__THROW + + `__n�nu� + ((1, 3)); + +802 #ifde� +__USE_XOPEN2K8 + + +804 + $�h�ad_mu�x_c�si��t + ( +�h�ad_mu�x_t + * +__mu�x +) + +805 +__THROW + + `__n�nu� + ((1)); + +806 #ifde� +__USE_GNU + + +807 + $�h�ad_mu�x_c�si��t_� + ( +�h�ad_mu�x_t + * +__mu�x +) + +808 +__THROW + + `__n�nu� + ((1)); + +817 + $�h�ad_mu�x��_�� + ( +�h�ad_mu�x��_t + * +__�� +) + +818 +__THROW + + `__n�nu� + ((1)); + +821 + $�h�ad_mu�x��_de�roy + ( +�h�ad_mu�x��_t + * +__�� +) + +822 +__THROW + + `__n�nu� + ((1)); + +825 + $�h�ad_mu�x��_g�psh�ed + (cڡ +�h�ad_mu�x��_t + * + +826 +__��ri� + +__�� +, + +827 * +__��ri� + +__psh�ed +) + +828 +__THROW + + `__n�nu� + ((1, 2)); + +831 + $�h�ad_mu�x��_��sh�ed + ( +�h�ad_mu�x��_t + * +__�� +, + +832 +__psh�ed +) + +833 +__THROW + + `__n�nu� + ((1)); + +835 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K8 + + +837 + $�h�ad_mu�x��_g�ty� + (cڡ +�h�ad_mu�x��_t + * +__��ri� + + +838 +__�� +, * +__��ri� + +__k�d +) + +839 +__THROW + + `__n�nu� + ((1, 2)); + +844 + $�h�ad_mu�x��_��y� + ( +�h�ad_mu�x��_t + * +__�� +, +__k�d +) + +845 +__THROW + + `__n�nu� + ((1)); + +849 + $�h�ad_mu�x��_g���oc� + (cڡ +�h�ad_mu�x��_t + * + +850 +__��ri� + +__�� +, + +851 * +__��ri� + +__��oc� +) + +852 +__THROW + + `__n�nu� + ((1, 2)); + +856 + $�h�ad_mu�x��_��r�oc� + ( +�h�ad_mu�x��_t + * +__�� +, + +857 +__��oc� +) + +858 +__THROW + + `__n�nu� + ((1)); + +861 + $�h�ad_mu�x��_g��io���g + (cڡ +�h�ad_mu�x��_t + * + +862 +__��ri� + +__�� +, + +863 * +__��ri� + +__�io���g +) + +864 +__THROW + + `__n�nu� + ((1, 2)); + +867 + $�h�ad_mu�x��_��rio���g + ( +�h�ad_mu�x��_t + * +__�� +, + +868 +__�io���g +) + +869 +__THROW + + `__n�nu� + ((1)); + +871 #ifde� +__USE_XOPEN2K + + +873 + $�h�ad_mu�x��_g�robu� + (cڡ +�h�ad_mu�x��_t + * +__�� +, + +874 * +__robu��ss +) + +875 +__THROW + + `__n�nu� + ((1, 2)); + +876 #ifde� +__USE_GNU + + +877 + $�h�ad_mu�x��_g�robu�_� + (cڡ +�h�ad_mu�x��_t + * +__�� +, + +878 * +__robu��ss +) + +879 +__THROW + + `__n�nu� + ((1, 2)); + +883 + $�h�ad_mu�x��_��obu� + ( +�h�ad_mu�x��_t + * +__�� +, + +884 +__robu��ss +) + +885 +__THROW + + `__n�nu� + ((1)); + +886 #ifde� +__USE_GNU + + +887 + $�h�ad_mu�x��_��obu�_� + ( +�h�ad_mu�x��_t + * +__�� +, + +888 +__robu��ss +) + +889 +__THROW + + `__n�nu� + ((1)); + +894 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K + + +899 + $�h�ad_rwlock_�� + ( +�h�ad_rwlock_t + * +__��ri� + +__rwlock +, + +900 cڡ +�h�ad_rwlock��_t + * +__��ri� + + +901 +__�� +� +__THROW + + `__n�nu� + ((1)); + +904 + $�h�ad_rwlock_de�roy + ( +�h�ad_rwlock_t + * +__rwlock +) + +905 +__THROW + + `__n�nu� + ((1)); + +908 + $�h�ad_rwlock_rdlock + ( +�h�ad_rwlock_t + * +__rwlock +) + +909 +__THROWNL + + `__n�nu� + ((1)); + +912 + $�h�ad_rwlock_�yrdlock + ( +�h�ad_rwlock_t + * +__rwlock +) + +913 +__THROWNL + + `__n�nu� + ((1)); + +915 #ifde� +__USE_XOPEN2K + + +917 + $�h�ad_rwlock_timedrdlock + ( +�h�ad_rwlock_t + * +__��ri� + +__rwlock +, + +918 cڡ +time�ec + * +__��ri� + + +919 +__ab�ime +� +__THROWNL + + `__n�nu� + ((1, 2)); + +923 + $�h�ad_rwlock_w�ock + ( +�h�ad_rwlock_t + * +__rwlock +) + +924 +__THROWNL + + `__n�nu� + ((1)); + +927 + $�h�ad_rwlock_�yw�ock + ( +�h�ad_rwlock_t + * +__rwlock +) + +928 +__THROWNL + + `__n�nu� + ((1)); + +930 #ifde� +__USE_XOPEN2K + + +932 + $�h�ad_rwlock_timedw�ock + ( +�h�ad_rwlock_t + * +__��ri� + +__rwlock +, + +933 cڡ +time�ec + * +__��ri� + + +934 +__ab�ime +� +__THROWNL + + `__n�nu� + ((1, 2)); + +938 + $�h�ad_rwlock_u�ock + ( +�h�ad_rwlock_t + * +__rwlock +) + +939 +__THROWNL + + `__n�nu� + ((1)); + +945 + $�h�ad_rwlock��_�� + ( +�h�ad_rwlock��_t + * +__�� +) + +946 +__THROW + + `__n�nu� + ((1)); + +949 + $�h�ad_rwlock��_de�roy + ( +�h�ad_rwlock��_t + * +__�� +) + +950 +__THROW + + `__n�nu� + ((1)); + +953 + $�h�ad_rwlock��_g�psh�ed + (cڡ +�h�ad_rwlock��_t + * + +954 +__��ri� + +__�� +, + +955 * +__��ri� + +__psh�ed +) + +956 +__THROW + + `__n�nu� + ((1, 2)); + +959 + $�h�ad_rwlock��_��sh�ed + ( +�h�ad_rwlock��_t + * +__�� +, + +960 +__psh�ed +) + +961 +__THROW + + `__n�nu� + ((1)); + +964 + $�h�ad_rwlock��_g�k�d_� + (cڡ +�h�ad_rwlock��_t + * + +965 +__��ri� + +__�� +, + +966 * +__��ri� + +__�ef +) + +967 +__THROW + + `__n�nu� + ((1, 2)); + +970 + $�h�ad_rwlock��_�tk�d_� + ( +�h�ad_rwlock��_t + * +__�� +, + +971 +__�ef +� +__THROW + + `__n�nu� + ((1)); + +979 + $�h�ad_c�d_�� + ( +�h�ad_c�d_t + * +__��ri� + +__c�d +, + +980 cڡ +�h�ad_c�d��_t + * +__��ri� + +__c�d_�� +) + +981 +__THROW + + `__n�nu� + ((1)); + +984 + $�h�ad_c�d_de�roy + ( +�h�ad_c�d_t + * +__c�d +) + +985 +__THROW + + `__n�nu� + ((1)); + +988 + $�h�ad_c�d_sig�l + ( +�h�ad_c�d_t + * +__c�d +) + +989 +__THROWNL + + `__n�nu� + ((1)); + +992 + $�h�ad_c�d_br�d�� + ( +�h�ad_c�d_t + * +__c�d +) + +993 +__THROWNL + + `__n�nu� + ((1)); + +1000 + $�h�ad_c�d_wa� + ( +�h�ad_c�d_t + * +__��ri� + +__c�d +, + +1001 +�h�ad_mu�x_t + * +__��ri� + +__mu�x +) + +1002 + `__n�nu� + ((1, 2)); + +1011 + $�h�ad_c�d_timedwa� + ( +�h�ad_c�d_t + * +__��ri� + +__c�d +, + +1012 +�h�ad_mu�x_t + * +__��ri� + +__mu�x +, + +1013 cڡ +time�ec + * +__��ri� + +__ab�ime +) + +1014 + `__n�nu� + ((1, 2, 3)); + +1019 + $�h�ad_c�d��_�� + ( +�h�ad_c�d��_t + * +__�� +) + +1020 +__THROW + + `__n�nu� + ((1)); + +1023 + $�h�ad_c�d��_de�roy + ( +�h�ad_c�d��_t + * +__�� +) + +1024 +__THROW + + `__n�nu� + ((1)); + +1027 + $�h�ad_c�d��_g�psh�ed + (cڡ +�h�ad_c�d��_t + * + +1028 +__��ri� + +__�� +, + +1029 * +__��ri� + +__psh�ed +) + +1030 +__THROW + + `__n�nu� + ((1, 2)); + +1033 + $�h�ad_c�d��_��sh�ed + ( +�h�ad_c�d��_t + * +__�� +, + +1034 +__psh�ed +� +__THROW + + `__n�nu� + ((1)); + +1036 #ifde� +__USE_XOPEN2K + + +1038 + $�h�ad_c�d��_g��ock + (cڡ +�h�ad_c�d��_t + * + +1039 +__��ri� + +__�� +, + +1040 +__�ockid_t + * +__��ri� + +__�ock_id +) + +1041 +__THROW + + `__n�nu� + ((1, 2)); + +1044 + $�h�ad_c�d��_�t�ock + ( +�h�ad_c�d��_t + * +__�� +, + +1045 +__�ockid_t + +__�ock_id +) + +1046 +__THROW + + `__n�nu� + ((1)); + +1050 #ifde� +__USE_XOPEN2K + + +1055 + $�h�ad_��_�� + ( +�h�ad_��lock_t + * +__lock +, +__psh�ed +) + +1056 +__THROW + + `__n�nu� + ((1)); + +1059 + $�h�ad_��_de�roy + ( +�h�ad_��lock_t + * +__lock +) + +1060 +__THROW + + `__n�nu� + ((1)); + +1063 + $�h�ad_��_lock + ( +�h�ad_��lock_t + * +__lock +) + +1064 +__THROWNL + + `__n�nu� + ((1)); + +1067 + $�h�ad_��_�ylock + ( +�h�ad_��lock_t + * +__lock +) + +1068 +__THROWNL + + `__n�nu� + ((1)); + +1071 + $�h�ad_��_u�ock + ( +�h�ad_��lock_t + * +__lock +) + +1072 +__THROWNL + + `__n�nu� + ((1)); + +1079 + $�h�ad_b�r�r_�� + ( +�h�ad_b�r�r_t + * +__��ri� + +__b�r�r +, + +1080 cڡ +�h�ad_b�r���r_t + * +__��ri� + + +1081 +__�� +, +__cou� +) + +1082 +__THROW + + `__n�nu� + ((1)); + +1085 + $�h�ad_b�r�r_de�roy + ( +�h�ad_b�r�r_t + * +__b�r�r +) + +1086 +__THROW + + `__n�nu� + ((1)); + +1089 + $�h�ad_b�r�r_wa� + ( +�h�ad_b�r�r_t + * +__b�r�r +) + +1090 +__THROWNL + + `__n�nu� + ((1)); + +1094 + $�h�ad_b�r���r_�� + ( +�h�ad_b�r���r_t + * +__�� +) + +1095 +__THROW + + `__n�nu� + ((1)); + +1098 + $�h�ad_b�r���r_de�roy + ( +�h�ad_b�r���r_t + * +__�� +) + +1099 +__THROW + + `__n�nu� + ((1)); + +1102 + $�h�ad_b�r���r_g�psh�ed + (cڡ +�h�ad_b�r���r_t + * + +1103 +__��ri� + +__�� +, + +1104 * +__��ri� + +__psh�ed +) + +1105 +__THROW + + `__n�nu� + ((1, 2)); + +1108 + $�h�ad_b�r���r_��sh�ed + ( +�h�ad_b�r���r_t + * +__�� +, + +1109 +__psh�ed +) + +1110 +__THROW + + `__n�nu� + ((1)); + +1122 + `�h�ad_key_��� + ( +�h�ad_key_t + * +__key +, + +1123 (* +__de�r_fun�i� +) (*)) + +1124 +__THROW + + `__n�nu� + ((1)); + +1127 + $�h�ad_key_d��e + ( +�h�ad_key_t + +__key +� +__THROW +; + +1130 * + $�h�ad_g��ecific + ( +�h�ad_key_t + +__key +� +__THROW +; + +1133 + $�h�ad_�t�ecific + ( +�h�ad_key_t + +__key +, + +1134 cڡ * +__po��r +� +__THROW + ; + +1137 #ifde� +__USE_XOPEN2K + + +1139 + $�h�ad_g��u�ockid + ( +�h�ad_t + +__th�ad_id +, + +1140 +__�ockid_t + * +__�ock_id +) + +1141 +__THROW + + `__n�nu� + ((2)); + +1156 + `�h�ad_�f�k + ((* +__���e +) (), + +1157 (* +__��� +) (), + +1158 (* +__ch�d +�()� +__THROW +; + +1161 #ifde� +__USE_EXTERN_INLINES + + +1163 +__ex��_�l�e + + +1164 + `__NTH + ( + $�h�ad_equ� + ( +�h�ad_t + +__th�ad1 +,�th�ad_� +__th�ad2 +)) + +1166 +__th�ad1 + =� +__th�ad2 +; + +1167 + } +} + +1170 + g__END_DECLS + + + @/usr/include/signal.h + +22 #i�def +_SIGNAL_H + + +24 #i�! +def�ed + +__�ed_sig_�omic_t + && !def�ed +__�ed_sig�t_t + + +25 + #_SIGNAL_H + + + ) + +28 + ~<�u�s.h +> + +30 + g__BEGIN_DECLS + + +32 + ~<b�s/sig�t.h +> + +36 #i� +def�ed + +__�ed_sig_�omic_t + || def�ed +_SIGNAL_H + + +37 #i�de� +__sig_�omic_t_def�ed + + +38 + #__sig_�omic_t_def�ed + + + ) + +39 +__BEGIN_NAMESPACE_STD + + +40 +__sig_�omic_t + + tsig_�omic_t +; + +41 + g__END_NAMESPACE_STD + + +43 #unde� +__�ed_sig_�omic_t + + +46 #i� +def�ed + +__�ed_sig�t_t + || (def�ed +_SIGNAL_H + && def�ed +__USE_POSIX +) + +47 #i�de� +__sig�t_t_def�ed + + +48 + #__sig�t_t_def�ed + + + ) + +49 +__sig�t_t + + tsig�t_t +; + +51 #unde� +__�ed_sig�t_t + + +54 #ifde� +_SIGNAL_H + + +56 + ~<b�s/ty�s.h +> + +57 + ~<b�s/signum.h +> + +59 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_XOPEN2K + + +60 #i�de� +__pid_t_def�ed + + +61 +__pid_t + + tpid_t +; + +62 + #__pid_t_def�ed + + + ) + +64 #ifde� +__USE_XOPEN + + +66 #i�de� +__uid_t_def�ed + + +67 +__uid_t + + tuid_t +; + +68 + #__uid_t_def�ed + + + ) + +72 #ifde� +__USE_POSIX199309 + + +74 + #__�ed_time�ec + + + ) + +75 + ~<time.h +> + +78 #i� +def�ed + +__USE_POSIX199309 + || def�ed +__USE_XOPEN_EXTENDED + + +80 + ~<b�s/sig�fo.h +> + +85 (* + t__sigh�d�r_t +) (); + +90 +__sigh�d�r_t + + $__sysv_sig�l + ( +__sig +, +__sigh�d�r_t + +__h�d�r +) + +91 +__THROW +; + +92 #ifde� +__USE_GNU + + +93 +__sigh�d�r_t + + $sysv_sig�l + ( +__sig +, +__sigh�d�r_t + +__h�d�r +) + +94 +__THROW +; + +100 +__BEGIN_NAMESPACE_STD + + +101 #ifde� +__USE_BSD + + +102 +__sigh�d�r_t + + $sig�l + ( +__sig +, +__sigh�d�r_t + +__h�d�r +) + +103 +__THROW +; + +106 #ifde� +__REDIRECT_NTH + + +107 +__sigh�d�r_t + + `__REDIRECT_NTH + ( +sig�l +, + +108 ( +__sig +, +__sigh�d�r_t + +__h�d�r +), + +109 +__sysv_sig�l +); + +111 + #sig�l + +__sysv_sig�l + + + ) + +114 +__END_NAMESPACE_STD + + +116 #ifde� +__USE_XOPEN + + +119 +__sigh�d�r_t + + $bsd_sig�l + ( +__sig +, +__sigh�d�r_t + +__h�d�r +) + +120 +__THROW +; + +126 #ifde� +__USE_POSIX + + +127 + $k�l + ( +__pid_t + +__pid +, +__sig +� +__THROW +; + +130 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +134 + $k��g + ( +__pid_t + +__pg� +, +__sig +� +__THROW +; + +137 +__BEGIN_NAMESPACE_STD + + +139 + $�i� + ( +__sig +� +__THROW +; + +140 +__END_NAMESPACE_STD + + +142 #ifde� +__USE_SVID + + +144 +__sigh�d�r_t + + $ssig�l + ( +__sig +, +__sigh�d�r_t + +__h�d�r +) + +145 +__THROW +; + +146 + $gsig�l + ( +__sig +� +__THROW +; + +149 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN2K + + +151 + `psig�l + ( +__sig +, cڡ * +__s +); + +154 #ifde� +__USE_XOPEN2K + + +156 + `psig�fo + (cڡ +sig�fo_t + * +__p�fo +, cڡ * +__s +); + +167 + `__sig�u� + ( +__sig_�_mask +, +__is_sig +); + +169 #ifde� +__USE_XOPEN + + +170 #ifde� +__GNUC__ + + +171 + $sig�u� + ( +__sig +� + `__asm__ + ("__xpg_sigpause"); + +174 + #sig�u� +( +sig +� + `__sig�u� + ((sig), 1) + + ) + +179 #ifde� +__USE_BSD + + +186 + #sigmask +( +sig +� + `__sigmask +(sig) + + ) + +189 + $sigblock + ( +__mask +� +__THROW + +__��ibu�_d����d__ +; + +192 + $sig�tmask + ( +__mask +� +__THROW + +__��ibu�_d����d__ +; + +195 + $sigg�mask + (� +__THROW + +__��ibu�_d����d__ +; + +199 #ifde� +__USE_MISC + + +200 + #NSIG + +_NSIG + + + ) + +203 #ifde� +__USE_GNU + + +204 +__sigh�d�r_t + + tsigh�d�r_t +; + +208 #ifde� +__USE_BSD + + +209 +__sigh�d�r_t + + tsig_t +; + +212 #ifde� +__USE_POSIX + + +215 + $sigem�y�t + ( +sig�t_t + * +__�t +� +__THROW + + `__n�nu� + ((1)); + +218 + $sigf�l�t + ( +sig�t_t + * +__�t +� +__THROW + + `__n�nu� + ((1)); + +221 + $sigadd�t + ( +sig�t_t + * +__�t +, +__signo +� +__THROW + + `__n�nu� + ((1)); + +224 + $sigd��t + ( +sig�t_t + * +__�t +, +__signo +� +__THROW + + `__n�nu� + ((1)); + +227 + $sigismemb� + (cڡ +sig�t_t + * +__�t +, +__signo +) + +228 +__THROW + + `__n�nu� + ((1)); + +230 #ifde� +__USE_GNU + + +232 + $sigi�m�y�t + (cڡ +sig�t_t + * +__�t +� +__THROW + + `__n�nu� + ((1)); + +235 + $sig�d�t + ( +sig�t_t + * +__�t +, cڡ sig�t_�* +__�� +, + +236 cڡ +sig�t_t + * +__right +� +__THROW + + `__n�nu� + ((1, 2, 3)); + +239 + $sigܣt + ( +sig�t_t + * +__�t +, cڡ sig�t_�* +__�� +, + +240 cڡ +sig�t_t + * +__right +� +__THROW + + `__n�nu� + ((1, 2, 3)); + +245 + ~<b�s/siga�i�.h +> + +248 + $sig�ocmask + ( +__how +, cڡ +sig�t_t + * +__��ri� + +__�t +, + +249 +sig�t_t + * +__��ri� + +__o�t +� +__THROW +; + +256 + $sigsu��d + (cڡ +sig�t_t + * +__�t +� + `__n�nu� + ((1)); + +259 + $siga�i� + ( +__sig +, cڡ +siga�i� + * +__��ri� + +__a� +, + +260 +siga�i� + * +__��ri� + +__�� +� +__THROW +; + +263 + $sig�nd�g + ( +sig�t_t + * +__�t +� +__THROW + + `__n�nu� + ((1)); + +270 + $sigwa� + (cڡ +sig�t_t + * +__��ri� + +__�t +, *__��ri� +__sig +) + +271 + `__n�nu� + ((1, 2)); + +273 #ifde� +__USE_POSIX199309 + + +278 + $sigwa��fo + (cڡ +sig�t_t + * +__��ri� + +__�t +, + +279 +sig�fo_t + * +__��ri� + +__�fo +� + `__n�nu� + ((1)); + +286 + $sigtimedwa� + (cڡ +sig�t_t + * +__��ri� + +__�t +, + +287 +sig�fo_t + * +__��ri� + +__�fo +, + +288 cڡ +time�ec + * +__��ri� + +__timeout +) + +289 + `__n�nu� + ((1)); + +293 + $sigqueue + ( +__pid_t + +__pid +, +__sig +, cڡ +sigv� + +__v� +) + +294 +__THROW +; + +299 #ifde� +__USE_BSD + + +303 cڡ *cڡ +_sys_sigli� +[ +_NSIG +]; + +304 cڡ *cڡ +sys_sigli� +[ +_NSIG +]; + +307 + ssigvec + + +309 +__sigh�d�r_t + +sv_h�d�r +; + +310 +sv_mask +; + +312 +sv_�ags +; + +313 + #sv_ڡack + +sv_�ags + + + ) + +317 + #SV_ONSTACK + (1 << 0) + + ) + +318 + #SV_INTERRUPT + (1 << 1) + + ) + +319 + #SV_RESETHAND + (1 << 2) + + ) + +327 + $sigvec + ( +__sig +, cڡ +sigvec + * +__vec +, + +328 +sigvec + * +__ovec +� +__THROW +; + +332 + ~<b�s/sigcڋxt.h +> + +335 + $sig�tu� + ( +sigcڋxt + * +__s� +� +__THROW +; + +340 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_XOPEN2K8 + + +341 + #__�ed_size_t + + + ) + +342 + ~<�ddef.h +> + +347 + $sig���u� + ( +__sig +, +__���u� +� +__THROW +; + +349 + ~<b�s/sig�ack.h +> + +350 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_XOPEN2K8 + + +352 + ~<sys/ucڋxt.h +> + +358 + $sig�ack + ( +sig�ack + * +__ss +, sig�ack * +__oss +) + +359 +__THROW + +__��ibu�_d����d__ +; + +363 + $sig�t�ack + (cڡ +sig�t�ack + * +__��ri� + +__ss +, + +364 +sig�t�ack + * +__��ri� + +__oss +� +__THROW +; + +368 #ifde� +__USE_XOPEN_EXTENDED + + +372 + $sigh�d + ( +__sig +� +__THROW +; + +375 + $sig�l� + ( +__sig +� +__THROW +; + +378 + $sigign�e + ( +__sig +� +__THROW +; + +381 +__sigh�d�r_t + + $sig�t + ( +__sig +, +__sigh�d�r_t + +__di� +� +__THROW +; + +384 #i� +def�ed + +__USE_POSIX199506 + || def�ed +__USE_UNIX98 + + +387 + ~<b�s/�h�adty�s.h +> + +388 + ~<b�s/sigth�ad.h +> + +395 + $__libc_cu��t_sig�m� + (� +__THROW +; + +397 + $__libc_cu��t_sig�max + (� +__THROW +; + +401 +__END_DECLS + + + @/usr/include/stdio.h + +23 #i�de� +_STDIO_H + + +25 #i�! +def�ed + +__�ed_FILE + && !def�ed +__�ed___FILE + + +26 + #_STDIO_H + 1 + + ) + +27 + ~<�u�s.h +> + +29 + g__BEGIN_DECLS + + +31 + #__�ed_size_t + + + ) + +32 + #__�ed_NULL + + + ) + +33 + ~<�ddef.h +> + +35 + ~<b�s/ty�s.h +> + +36 + #__�ed_FILE + + + ) + +37 + #__�ed___FILE + + + ) + +41 #i�! +def�ed + +__FILE_def�ed + && def�ed +__�ed_FILE + + +44 + g_IO_FILE +; + +46 +__BEGIN_NAMESPACE_STD + + +48 +_IO_FILE + + tFILE +; + +49 + g__END_NAMESPACE_STD + + +50 #i� +def�ed + +__USE_LARGEFILE64 + || def�ed +__USE_SVID + || def�ed +__USE_POSIX + \ + +51 || +def�ed + + g__USE_BSD + || def�ed + g__USE_ISOC99 + || def�ed + g__USE_XOPEN + \ + +52 || +def�ed + +__USE_POSIX2 + + +53 + $__USING_NAMESPACE_STD +( +FILE +) + +56 + #__FILE_def�ed + 1 + + ) + +58 #unde� +__�ed_FILE + + +61 #i�! +def�ed + +____FILE_def�ed + && def�ed +__�ed___FILE + + +64 +_IO_FILE + + t__FILE +; + +66 + #____FILE_def�ed + 1 + + ) + +68 #unde� +__�ed___FILE + + +71 #ifdef +_STDIO_H + + +72 + #_STDIO_USES_IOSTREAM + + + ) + +74 + ~<libio.h +> + +76 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_XOPEN2K8 + + +77 #ifde� +__GNUC__ + + +78 #i�de� +_VA_LIST_DEFINED + + +79 +_G_va_li� + + tva_li� +; + +80 + #_VA_LIST_DEFINED + + + ) + +83 + ~<�d�g.h +> + +87 #ifde� +__USE_XOPEN2K8 + + +88 #i�de� +__off_t_def�ed + + +89 #i�de� +__USE_FILE_OFFSET64 + + +90 +__off_t + + toff_t +; + +92 +__off64_t + + toff_t +; + +94 + #__off_t_def�ed + + + ) + +96 #i� +def�ed + +__USE_LARGEFILE64 + && !def�ed +__off64_t_def�ed + + +97 +__off64_t + + toff64_t +; + +98 + #__off64_t_def�ed + + + ) + +101 #i�de� +__ssize_t_def�ed + + +102 +__ssize_t + + tssize_t +; + +103 + #__ssize_t_def�ed + + + ) + +108 +__BEGIN_NAMESPACE_STD + + +109 #i�de� +__USE_FILE_OFFSET64 + + +110 +_G_�os_t + + t�os_t +; + +112 +_G_�os64_t + + t�os_t +; + +114 +__END_NAMESPACE_STD + + +115 #ifde� +__USE_LARGEFILE64 + + +116 +_G_�os64_t + + t�os64_t +; + +120 + #_IOFBF + 0 + + ) + +121 + #_IOLBF + 1 + + ) + +122 + #_IONBF + 2 + + ) + +126 #i�de� +BUFSIZ + + +127 + #BUFSIZ + +_IO_BUFSIZ + + + ) + +133 #i�de� +EOF + + +134 + #EOF + (-1) + + ) + +140 + #SEEK_SET + 0 + + ) + +141 + #SEEK_CUR + 1 + + ) + +142 + #SEEK_END + 2 + + ) + +143 #ifde� +__USE_GNU + + +144 + #SEEK_DATA + 3 + + ) + +145 + #SEEK_HOLE + 4 + + ) + +149 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN + + +151 + #P_tmpd� + "/tmp" + + ) + +164 + ~<b�s/�dio_lim.h +> + +168 +_IO_FILE + * +�d� +; + +169 +_IO_FILE + * +�dout +; + +170 +_IO_FILE + * +�d�r +; + +172 + #�d� + +�d� + + + ) + +173 + #�dout + +�dout + + + ) + +174 + #�d�r + +�d�r + + + ) + +176 +__BEGIN_NAMESPACE_STD + + +178 + $�move + (cڡ * +__f��ame +� +__THROW +; + +180 + $��me + (cڡ * +__�d +, cڡ * +__�w +� +__THROW +; + +181 +__END_NAMESPACE_STD + + +183 #ifde� +__USE_ATFILE + + +185 + $��m�t + ( +__�dfd +, cڡ * +__�d +, +__�wfd +, + +186 cڡ * +__�w +� +__THROW +; + +189 +__BEGIN_NAMESPACE_STD + + +194 #i�de� +__USE_FILE_OFFSET64 + + +195 +FILE + * + $tmpf�e + (� +__wur +; + +197 #ifde� +__REDIRECT + + +198 +FILE + * + `__REDIRECT + ( +tmpf�e +, (), +tmpf�e64 +� +__wur +; + +200 + #tmpf�e + +tmpf�e64 + + + ) + +204 #ifde� +__USE_LARGEFILE64 + + +205 +FILE + * + $tmpf�e64 + (� +__wur +; + +209 * + $tm�am + (* +__s +� +__THROW + +__wur +; + +210 +__END_NAMESPACE_STD + + +212 #ifde� +__USE_MISC + + +215 * + $tm�am_r + (* +__s +� +__THROW + +__wur +; + +219 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN + + +227 * + $�m�am + (cڡ * +__d� +, cڡ * +__pfx +) + +228 +__THROW + +__��ibu�_m�loc__ + +__wur +; + +232 +__BEGIN_NAMESPACE_STD + + +237 + `f�o� + ( +FILE + * +__��am +); + +242 + `f�ush + ( +FILE + * +__��am +); + +243 +__END_NAMESPACE_STD + + +245 #ifde� +__USE_MISC + + +252 + `f�ush_u�ocked + ( +FILE + * +__��am +); + +255 #ifde� +__USE_GNU + + +262 + `f�o��l + (); + +266 +__BEGIN_NAMESPACE_STD + + +267 #i�de� +__USE_FILE_OFFSET64 + + +272 +FILE + * + $fݒ + (cڡ * +__��ri� + +__f��ame +, + +273 cڡ * +__��ri� + +__modes +� +__wur +; + +278 +FILE + * + $�eݒ + (cڡ * +__��ri� + +__f��ame +, + +279 cڡ * +__��ri� + +__modes +, + +280 +FILE + * +__��ri� + +__��am +� +__wur +; + +282 #ifde� +__REDIRECT + + +283 +FILE + * + `__REDIRECT + ( +fݒ +, (cڡ * +__��ri� + +__f��ame +, + +284 cڡ * +__��ri� + +__modes +), +fݒ64 +) + +285 +__wur +; + +286 +FILE + * + `__REDIRECT + ( +�eݒ +, (cڡ * +__��ri� + +__f��ame +, + +287 cڡ * +__��ri� + +__modes +, + +288 +FILE + * +__��ri� + +__��am +), +�eݒ64 +) + +289 +__wur +; + +291 + #fݒ + +fݒ64 + + + ) + +292 + #�eݒ + +�eݒ64 + + + ) + +295 +__END_NAMESPACE_STD + + +296 #ifde� +__USE_LARGEFILE64 + + +297 +FILE + * + $fݒ64 + (cڡ * +__��ri� + +__f��ame +, + +298 cڡ * +__��ri� + +__modes +� +__wur +; + +299 +FILE + * + $�eݒ64 + (cڡ * +__��ri� + +__f��ame +, + +300 cڡ * +__��ri� + +__modes +, + +301 +FILE + * +__��ri� + +__��am +� +__wur +; + +304 #ifdef +__USE_POSIX + + +306 +FILE + * + $fdݒ + ( +__fd +, cڡ * +__modes +� +__THROW + +__wur +; + +309 #ifdef +__USE_GNU + + +312 +FILE + * + $fݒcook� + (* +__��ri� + +__magic_cook� +, + +313 cڡ * +__��ri� + +__modes +, + +314 +_IO_cook�_io_fun�i�s_t + +__io_funcs +� +__THROW + +__wur +; + +317 #ifde� +__USE_XOPEN2K8 + + +319 +FILE + * + $fmemݒ + (* +__s +, +size_t + +__�n +, cڡ * +__modes +) + +320 +__THROW + +__wur +; + +325 +FILE + * + $ݒ_mem��am + (** +__bu�oc +, +size_t + * +__siz�oc +� +__THROW + +__wur +; + +329 +__BEGIN_NAMESPACE_STD + + +332 + $�tbuf + ( +FILE + * +__��ri� + +__��am +, *__��ri� +__buf +� +__THROW +; + +336 + $�tvbuf + ( +FILE + * +__��ri� + +__��am +, *__��ri� +__buf +, + +337 +__modes +, +size_t + +__n +� +__THROW +; + +338 +__END_NAMESPACE_STD + + +340 #ifdef +__USE_BSD + + +343 + $�tbuf�r + ( +FILE + * +__��ri� + +__��am +, *__��ri� +__buf +, + +344 +size_t + +__size +� +__THROW +; + +347 + $���ebuf + ( +FILE + * +__��am +� +__THROW +; + +351 +__BEGIN_NAMESPACE_STD + + +356 + `�r�tf + ( +FILE + * +__��ri� + +__��am +, + +357 cڡ * +__��ri� + +__f�m� +, ...); + +362 + `��tf + (cڡ * +__��ri� + +__f�m� +, ...); + +364 + $�r�tf + (* +__��ri� + +__s +, + +365 cڡ * +__��ri� + +__f�m� +, ...� +__THROWNL +; + +371 + `v�r�tf + ( +FILE + * +__��ri� + +__s +, cڡ *__��ri� +__f�m� +, + +372 +_G_va_li� + +__�g +); + +377 + `v��tf + (cڡ * +__��ri� + +__f�m� +, +_G_va_li� + +__�g +); + +379 + $v�r�tf + (* +__��ri� + +__s +, cڡ *__��ri� +__f�m� +, + +380 +_G_va_li� + +__�g +� +__THROWNL +; + +381 +__END_NAMESPACE_STD + + +383 #i� +def�ed + +__USE_BSD + || def�ed +__USE_ISOC99 + || def�ed +__USE_UNIX98 + + +384 +__BEGIN_NAMESPACE_C99 + + +386 + $���tf + (* +__��ri� + +__s +, +size_t + +__max�n +, + +387 cڡ * +__��ri� + +__f�m� +, ...) + +388 +__THROWNL + + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 3, 4))); + +390 + $v���tf + (* +__��ri� + +__s +, +size_t + +__max�n +, + +391 cڡ * +__��ri� + +__f�m� +, +_G_va_li� + +__�g +) + +392 +__THROWNL + + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 3, 0))); + +393 +__END_NAMESPACE_C99 + + +396 #ifde� +__USE_GNU + + +399 + $va�r�tf + (** +__��ri� + +__�r +, cڡ *__��ri� +__f +, + +400 +_G_va_li� + +__�g +) + +401 +__THROWNL + + `__��ibu�__ + (( + $__f�m�__ + ( +__��tf__ +, 2, 0))� +__wur +; + +402 + $__a�r�tf + (** +__��ri� + +__�r +, + +403 cڡ * +__��ri� + +__fmt +, ...) + +404 +__THROWNL + + `__��ibu�__ + (( + $__f�m�__ + ( +__��tf__ +, 2, 3))� +__wur +; + +405 + $a�r�tf + (** +__��ri� + +__�r +, + +406 cڡ * +__��ri� + +__fmt +, ...) + +407 +__THROWNL + + `__��ibu�__ + (( + $__f�m�__ + ( +__��tf__ +, 2, 3))� +__wur +; + +410 #ifde� +__USE_XOPEN2K8 + + +412 + $vd��tf + ( +__fd +, cڡ * +__��ri� + +__fmt +, + +413 +_G_va_li� + +__�g +) + +414 + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 2, 0))); + +415 + $d��tf + ( +__fd +, cڡ * +__��ri� + +__fmt +, ...) + +416 + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 2, 3))); + +420 +__BEGIN_NAMESPACE_STD + + +425 + $fs�nf + ( +FILE + * +__��ri� + +__��am +, + +426 cڡ * +__��ri� + +__f�m� +, ...� +__wur +; + +431 + $s�nf + (cڡ * +__��ri� + +__f�m� +, ...� +__wur +; + +433 + $ss�nf + (cڡ * +__��ri� + +__s +, + +434 cڡ * +__��ri� + +__f�m� +, ...� +__THROW +; + +436 #i� +def�ed + +__USE_ISOC99 + && !def�ed +__USE_GNU + \ + +437 && (! +def�ed + +__LDBL_COMPAT + || !def�ed +__REDIRECT +) \ + +438 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +439 #ifde� +__REDIRECT + + +443 + `__REDIRECT + ( +fs�nf +, ( +FILE + * +__��ri� + +__��am +, + +444 cڡ * +__��ri� + +__f�m� +, ...), + +445 +__isoc99_fs�nf +� +__wur +; + +446 + `__REDIRECT + ( +s�nf +, (cڡ * +__��ri� + +__f�m� +, ...), + +447 +__isoc99_s�nf +� +__wur +; + +448 + `__REDIRECT_NTH + ( +ss�nf +, (cڡ * +__��ri� + +__s +, + +449 cڡ * +__��ri� + +__f�m� +, ...), + +450 +__isoc99_ss�nf +); + +452 + $__isoc99_fs�nf + ( +FILE + * +__��ri� + +__��am +, + +453 cڡ * +__��ri� + +__f�m� +, ...� +__wur +; + +454 + $__isoc99_s�nf + (cڡ * +__��ri� + +__f�m� +, ...� +__wur +; + +455 + $__isoc99_ss�nf + (cڡ * +__��ri� + +__s +, + +456 cڡ * +__��ri� + +__f�m� +, ...� +__THROW +; + +457 + #fs�nf + +__isoc99_fs�nf + + + ) + +458 + #s�nf + +__isoc99_s�nf + + + ) + +459 + #ss�nf + +__isoc99_ss�nf + + + ) + +463 +__END_NAMESPACE_STD + + +465 #ifdef +__USE_ISOC99 + + +466 +__BEGIN_NAMESPACE_C99 + + +471 + $vfs�nf + ( +FILE + * +__��ri� + +__s +, cڡ *__��ri� +__f�m� +, + +472 +_G_va_li� + +__�g +) + +473 + `__��ibu�__ + (( + $__f�m�__ + ( +__s�nf__ +, 2, 0))� +__wur +; + +479 + $vs�nf + (cڡ * +__��ri� + +__f�m� +, +_G_va_li� + +__�g +) + +480 + `__��ibu�__ + (( + $__f�m�__ + ( +__s�nf__ +, 1, 0))� +__wur +; + +483 + $vss�nf + (cڡ * +__��ri� + +__s +, + +484 cڡ * +__��ri� + +__f�m� +, +_G_va_li� + +__�g +) + +485 +__THROW + + `__��ibu�__ + (( + `__f�m�__ + ( +__s�nf__ +, 2, 0))); + +487 #i�! +def�ed + +__USE_GNU + \ + +488 && (! +def�ed + +__LDBL_COMPAT + || !def�ed +__REDIRECT +) \ + +489 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +490 #ifde� +__REDIRECT + + +494 + `__REDIRECT + ( +vfs�nf +, + +495 ( +FILE + * +__��ri� + +__s +, + +496 cڡ * +__��ri� + +__f�m� +, +_G_va_li� + +__�g +), + +497 +__isoc99_vfs�nf +) + +498 + `__��ibu�__ + (( + $__f�m�__ + ( +__s�nf__ +, 2, 0))� +__wur +; + +499 + `__REDIRECT + ( +vs�nf +, (cڡ * +__��ri� + +__f�m� +, + +500 +_G_va_li� + +__�g +), +__isoc99_vs�nf +) + +501 + `__��ibu�__ + (( + $__f�m�__ + ( +__s�nf__ +, 1, 0))� +__wur +; + +502 + `__REDIRECT_NTH + ( +vss�nf +, + +503 (cڡ * +__��ri� + +__s +, + +504 cڡ * +__��ri� + +__f�m� +, + +505 +_G_va_li� + +__�g +), +__isoc99_vss�nf +) + +506 + `__��ibu�__ + (( + `__f�m�__ + ( +__s�nf__ +, 2, 0))); + +508 + $__isoc99_vfs�nf + ( +FILE + * +__��ri� + +__s +, + +509 cڡ * +__��ri� + +__f�m� +, + +510 +_G_va_li� + +__�g +� +__wur +; + +511 + $__isoc99_vs�nf + (cڡ * +__��ri� + +__f�m� +, + +512 +_G_va_li� + +__�g +� +__wur +; + +513 + $__isoc99_vss�nf + (cڡ * +__��ri� + +__s +, + +514 cڡ * +__��ri� + +__f�m� +, + +515 +_G_va_li� + +__�g +� +__THROW +; + +516 + #vfs�nf + +__isoc99_vfs�nf + + + ) + +517 + #vs�nf + +__isoc99_vs�nf + + + ) + +518 + #vss�nf + +__isoc99_vss�nf + + + ) + +522 +__END_NAMESPACE_C99 + + +526 +__BEGIN_NAMESPACE_STD + + +531 + `fg�c + ( +FILE + * +__��am +); + +532 + `g�c + ( +FILE + * +__��am +); + +538 + `g�ch� + (); + +539 +__END_NAMESPACE_STD + + +543 + #g�c +( +_� +� + `_IO_g�c + (_�) + + ) + +545 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +550 + `g�c_u�ocked + ( +FILE + * +__��am +); + +551 + `g�ch�_u�ocked + (); + +554 #ifde� +__USE_MISC + + +561 + `fg�c_u�ocked + ( +FILE + * +__��am +); + +565 +__BEGIN_NAMESPACE_STD + + +573 + `�utc + ( +__c +, +FILE + * +__��am +); + +574 + `putc + ( +__c +, +FILE + * +__��am +); + +580 + `putch� + ( +__c +); + +581 +__END_NAMESPACE_STD + + +585 + #putc +( +_ch +, +_� +� + `_IO_putc + (_ch, _�) + + ) + +587 #ifde� +__USE_MISC + + +594 + `�utc_u�ocked + ( +__c +, +FILE + * +__��am +); + +597 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +602 + `putc_u�ocked + ( +__c +, +FILE + * +__��am +); + +603 + `putch�_u�ocked + ( +__c +); + +607 #i� +def�ed + +__USE_SVID + || def�ed +__USE_MISC + \ + +608 || ( +def�ed + +__USE_XOPEN + && !def�ed +__USE_XOPEN2K +) + +610 + `g�w + ( +FILE + * +__��am +); + +613 + `putw + ( +__w +, +FILE + * +__��am +); + +617 +__BEGIN_NAMESPACE_STD + + +622 * + $fg�s + (* +__��ri� + +__s +, +__n +, +FILE + *__��ri� +__��am +) + +623 +__wur +; + +625 #i�! +def�ed + +__USE_ISOC11 + \ + +626 || ( +def�ed + +__�lu�lus + && __cplusplus <= 201103L) + +638 * + $g�s + (* +__s +� +__wur + +__��ibu�_d����d__ +; + +640 +__END_NAMESPACE_STD + + +642 #ifde� +__USE_GNU + + +649 * + $fg�s_u�ocked + (* +__��ri� + +__s +, +__n +, + +650 +FILE + * +__��ri� + +__��am +� +__wur +; + +654 #ifdef +__USE_XOPEN2K8 + + +665 +_IO_ssize_t + + $__g�d�im + (** +__��ri� + +__l��� +, + +666 +size_t + * +__��ri� + +__n +, +__d�im�� +, + +667 +FILE + * +__��ri� + +__��am +� +__wur +; + +668 +_IO_ssize_t + + $g�d�im + (** +__��ri� + +__l��� +, + +669 +size_t + * +__��ri� + +__n +, +__d�im�� +, + +670 +FILE + * +__��ri� + +__��am +� +__wur +; + +678 +_IO_ssize_t + + $g�l�e + (** +__��ri� + +__l��� +, + +679 +size_t + * +__��ri� + +__n +, + +680 +FILE + * +__��ri� + +__��am +� +__wur +; + +684 +__BEGIN_NAMESPACE_STD + + +689 + `�uts + (cڡ * +__��ri� + +__s +, +FILE + *__��ri� +__��am +); + +695 + `puts + (cڡ * +__s +); + +702 + `ung�c + ( +__c +, +FILE + * +__��am +); + +709 +size_t + + $�d + (* +__��ri� + +__�r +, +size_t + +__size +, + +710 +size_t + +__n +, +FILE + * +__��ri� + +__��am +� +__wur +; + +715 +size_t + + `fwr�e + (cڡ * +__��ri� + +__�r +, size_� +__size +, + +716 +size_t + +__n +, +FILE + * +__��ri� + +__s +); + +717 +__END_NAMESPACE_STD + + +719 #ifde� +__USE_GNU + + +726 + `�uts_u�ocked + (cڡ * +__��ri� + +__s +, + +727 +FILE + * +__��ri� + +__��am +); + +730 #ifde� +__USE_MISC + + +737 +size_t + + $�d_u�ocked + (* +__��ri� + +__�r +, +size_t + +__size +, + +738 +size_t + +__n +, +FILE + * +__��ri� + +__��am +� +__wur +; + +739 +size_t + + `fwr�e_u�ocked + (cڡ * +__��ri� + +__�r +, size_� +__size +, + +740 +size_t + +__n +, +FILE + * +__��ri� + +__��am +); + +744 +__BEGIN_NAMESPACE_STD + + +749 + `f�ek + ( +FILE + * +__��am +, +__off +, +__wh�� +); + +754 + $�l + ( +FILE + * +__��am +� +__wur +; + +759 + `�w�d + ( +FILE + * +__��am +); + +760 +__END_NAMESPACE_STD + + +767 #i� +def�ed + +__USE_LARGEFILE + || def�ed +__USE_XOPEN2K + + +768 #i�de� +__USE_FILE_OFFSET64 + + +773 + `f�eko + ( +FILE + * +__��am +, +__off_t + +__off +, +__wh�� +); + +778 +__off_t + + $�lo + ( +FILE + * +__��am +� +__wur +; + +780 #ifde� +__REDIRECT + + +781 + `__REDIRECT + ( +f�eko +, + +782 ( +FILE + * +__��am +, +__off64_t + +__off +, +__wh�� +), + +783 +f�eko64 +); + +784 +__off64_t + + `__REDIRECT + ( +�lo +, ( +FILE + * +__��am +), +�lo64 +); + +786 + #f�eko + +f�eko64 + + + ) + +787 + #�lo + +�lo64 + + + ) + +792 +__BEGIN_NAMESPACE_STD + + +793 #i�de� +__USE_FILE_OFFSET64 + + +798 + `fg�pos + ( +FILE + * +__��ri� + +__��am +, +�os_t + *__��ri� +__pos +); + +803 + `f��os + ( +FILE + * +__��am +, cڡ +�os_t + * +__pos +); + +805 #ifde� +__REDIRECT + + +806 + `__REDIRECT + ( +fg�pos +, ( +FILE + * +__��ri� + +__��am +, + +807 +�os_t + * +__��ri� + +__pos +), +fg�pos64 +); + +808 + `__REDIRECT + ( +f��os +, + +809 ( +FILE + * +__��am +, cڡ +�os_t + * +__pos +), +f��os64 +); + +811 + #fg�pos + +fg�pos64 + + + ) + +812 + #f��os + +f��os64 + + + ) + +815 +__END_NAMESPACE_STD + + +817 #ifde� +__USE_LARGEFILE64 + + +818 + `f�eko64 + ( +FILE + * +__��am +, +__off64_t + +__off +, +__wh�� +); + +819 +__off64_t + + $�lo64 + ( +FILE + * +__��am +� +__wur +; + +820 + `fg�pos64 + ( +FILE + * +__��ri� + +__��am +, +�os64_t + *__��ri� +__pos +); + +821 + `f��os64 + ( +FILE + * +__��am +, cڡ +�os64_t + * +__pos +); + +824 +__BEGIN_NAMESPACE_STD + + +826 + $���� + ( +FILE + * +__��am +� +__THROW +; + +828 + $�of + ( +FILE + * +__��am +� +__THROW + +__wur +; + +830 + $�� + ( +FILE + * +__��am +� +__THROW + +__wur +; + +831 +__END_NAMESPACE_STD + + +833 #ifde� +__USE_MISC + + +835 + $����_u�ocked + ( +FILE + * +__��am +� +__THROW +; + +836 + $�of_u�ocked + ( +FILE + * +__��am +� +__THROW + +__wur +; + +837 + $��_u�ocked + ( +FILE + * +__��am +� +__THROW + +__wur +; + +841 +__BEGIN_NAMESPACE_STD + + +846 + `��� + (cڡ * +__s +); + +847 +__END_NAMESPACE_STD + + +853 + ~<b�s/sys_��i�.h +> + +856 #ifdef +__USE_POSIX + + +858 + $f��o + ( +FILE + * +__��am +� +__THROW + +__wur +; + +861 #ifde� +__USE_MISC + + +863 + $f��o_u�ocked + ( +FILE + * +__��am +� +__THROW + +__wur +; + +867 #i�( +def�ed + +__USE_POSIX2 + || def�ed +__USE_SVID + || def�ed +__USE_BSD + || \ + +868 +def�ed + +__USE_MISC +) + +873 +FILE + * + $pݒ + (cڡ * +__comm�d +, cڡ * +__modes +� +__wur +; + +879 + `p�o� + ( +FILE + * +__��am +); + +883 #ifdef +__USE_POSIX + + +885 * + $��mid + (* +__s +� +__THROW +; + +889 #ifde� +__USE_XOPEN + + +891 * + `cu�rid + (* +__s +); + +895 #ifdef +__USE_GNU + + +896 +ob�ack +; + +899 + $ob�ack_��tf + ( +ob�ack + * +__��ri� + +__ob�ack +, + +900 cڡ * +__��ri� + +__f�m� +, ...) + +901 +__THROWNL + + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 2, 3))); + +902 + $ob�ack_v��tf + ( +ob�ack + * +__��ri� + +__ob�ack +, + +903 cڡ * +__��ri� + +__f�m� +, + +904 +_G_va_li� + +__�gs +) + +905 +__THROWNL + + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 2, 0))); + +909 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +913 + $�ockf�e + ( +FILE + * +__��am +� +__THROW +; + +917 + $�rylockf�e + ( +FILE + * +__��am +� +__THROW + +__wur +; + +920 + $fu�ockf�e + ( +FILE + * +__��am +� +__THROW +; + +923 #i� +def�ed + +__USE_XOPEN + && !def�ed +__USE_XOPEN2K + && !def�ed +__USE_GNU + + +927 + #__�ed_g��t + + + ) + +928 + ~<g��t.h +> + +933 #ifde� +__USE_EXTERN_INLINES + + +934 + ~<b�s/�dio.h +> + +936 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__ex��_�ways_�l�e + + +937 + ~<b�s/�dio2.h +> + +939 #ifde� +__LDBL_COMPAT + + +940 + ~<b�s/�dio-ldbl.h +> + +943 +__END_DECLS + + + @/usr/include/stdlib.h + +22 #i�def +_STDLIB_H + + +24 + ~<�u�s.h +> + +27 + #__�ed_size_t + + + ) + +28 #i�de� +__�ed_m�loc_�d_��oc + + +29 + #__�ed_wch�_t + + + ) + +30 + #__�ed_NULL + + + ) + +32 + ~<�ddef.h +> + +34 + g__BEGIN_DECLS + + +36 #i�de� +__�ed_m�loc_�d_��oc + + +37 + #_STDLIB_H + 1 + + ) + +39 #i�( +def�ed + +__USE_XOPEN + || def�ed +__USE_XOPEN2K8 +�&& !def�ed +_SYS_WAIT_H + + +41 + ~<b�s/wa��ags.h +> + +42 + ~<b�s/wa���us.h +> + +44 #ifde� +__USE_BSD + + +49 #i� +def�ed + +__GNUC__ + && !def�ed +__�lu�lus + + +50 + #__WAIT_INT +( +��us +) \ + +51 ( + `__ex�nsi�__ + (((uni� { + `__ty�of +( +��us +� +__� +; +__i +; }) \ + +52 { . +__� + = ( +��us +�}). +__i +)) + + ) + +54 + #__WAIT_INT +( +��us +�(*(*�&(��us)) + + ) + +62 #i�! +def�ed + +__GNUC__ + || __GNUC__ < 2 || def�ed +__�lu�lus + + +63 + #__WAIT_STATUS + * + + ) + +64 + #__WAIT_STATUS_DEFN + * + + ) + +69 +wa� + * + m__u�r +; + +70 * + m__�� +; + +71 } + t__WAIT_STATUS + + t__��ibu�__ + (( + t__�����t_uni�__ +)); + +72 + #__WAIT_STATUS_DEFN + * + + ) + +77 + #__WAIT_INT +( +��us +�(��us) + + ) + +78 + #__WAIT_STATUS + * + + ) + +79 + #__WAIT_STATUS_DEFN + * + + ) + +84 + #WEXITSTATUS +( +��us +� + `__WEXITSTATUS + ( + `__WAIT_INT + (��us)) + + ) + +85 + #WTERMSIG +( +��us +� + `__WTERMSIG + ( + `__WAIT_INT + (��us)) + + ) + +86 + #WSTOPSIG +( +��us +� + `__WSTOPSIG + ( + `__WAIT_INT + (��us)) + + ) + +87 + #WIFEXITED +( +��us +� + `__WIFEXITED + ( + `__WAIT_INT + (��us)) + + ) + +88 + #WIFSIGNALED +( +��us +� + `__WIFSIGNALED + ( + `__WAIT_INT + (��us)) + + ) + +89 + #WIFSTOPPED +( +��us +� + `__WIFSTOPPED + ( + `__WAIT_INT + (��us)) + + ) + +90 #ifde� +__WIFCONTINUED + + +91 + #WIFCONTINUED +( +��us +� + `__WIFCONTINUED + ( + `__WAIT_INT + (��us)) + + ) + +95 +__BEGIN_NAMESPACE_STD + + +99 + mqu� +; + +100 + m�m +; + +101 } + tdiv_t +; + +104 #i�de� +__ldiv_t_def�ed + + +107 + mqu� +; + +108 + m�m +; + +109 } + tldiv_t +; + +110 + #__ldiv_t_def�ed + 1 + + ) + +112 + g__END_NAMESPACE_STD + + +114 #i� +def�ed + +__USE_ISOC99 + && !def�ed +__�div_t_def�ed + + +115 +__BEGIN_NAMESPACE_C99 + + +117 +__ex�nsi�__ + struct + +119 + mqu� +; + +120 + m�m +; + +121 } + t�div_t +; + +122 + #__�div_t_def�ed + 1 + + ) + +123 + g__END_NAMESPACE_C99 + + +128 + #RAND_MAX + 2147483647 + + ) + +133 + #EXIT_FAILURE + 1 + + ) + +134 + #EXIT_SUCCESS + 0 + + ) + +138 + #MB_CUR_MAX + ( + `__�y�_g�_mb_cur_max + ()) + + ) + +139 +size_t + + $__�y�_g�_mb_cur_max + (� +__THROW + +__wur +; + +142 +__BEGIN_NAMESPACE_STD + + +144 + $�of + (cڡ * +__Ō +) + +145 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)� +__wur +; + +147 + $�oi + (cڡ * +__Ō +) + +148 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)� +__wur +; + +150 + $�� + (cڡ * +__Ō +) + +151 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)� +__wur +; + +152 +__END_NAMESPACE_STD + + +154 #i� +def�ed + +__USE_ISOC99 + || def�ed +__USE_MISC + + +155 +__BEGIN_NAMESPACE_C99 + + +157 +__ex�nsi�__ + + $��l + (cڡ * +__Ō +) + +158 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)� +__wur +; + +159 +__END_NAMESPACE_C99 + + +162 +__BEGIN_NAMESPACE_STD + + +164 + $��od + (cڡ * +__��ri� + +__Ō +, + +165 ** +__��ri� + +__�d�r +) + +166 +__THROW + + `__n�nu� + ((1)); + +167 +__END_NAMESPACE_STD + + +169 #ifdef +__USE_ISOC99 + + +170 +__BEGIN_NAMESPACE_C99 + + +172 + $��of + (cڡ * +__��ri� + +__Ō +, + +173 ** +__��ri� + +__�d�r +� +__THROW + + `__n�nu� + ((1)); + +175 + $���d + (cڡ * +__��ri� + +__Ō +, + +176 ** +__��ri� + +__�d�r +) + +177 +__THROW + + `__n�nu� + ((1)); + +178 +__END_NAMESPACE_C99 + + +181 +__BEGIN_NAMESPACE_STD + + +183 + $��� + (cڡ * +__��ri� + +__Ō +, + +184 ** +__��ri� + +__�d�r +, +__ba� +) + +185 +__THROW + + `__n�nu� + ((1)); + +187 + $��oul + (cڡ * +__��ri� + +__Ō +, + +188 ** +__��ri� + +__�d�r +, +__ba� +) + +189 +__THROW + + `__n�nu� + ((1)); + +190 +__END_NAMESPACE_STD + + +192 #ifde� +__USE_BSD + + +194 +__ex�nsi�__ + + +195 + $��oq + (cڡ * +__��ri� + +__Ō +, + +196 ** +__��ri� + +__�d�r +, +__ba� +) + +197 +__THROW + + `__n�nu� + ((1)); + +199 +__ex�nsi�__ + + +200 + $��ouq + (cڡ * +__��ri� + +__Ō +, + +201 ** +__��ri� + +__�d�r +, +__ba� +) + +202 +__THROW + + `__n�nu� + ((1)); + +205 #i� +def�ed + +__USE_ISOC99 + || def�ed +__USE_MISC + + +206 +__BEGIN_NAMESPACE_C99 + + +208 +__ex�nsi�__ + + +209 + $���l + (cڡ * +__��ri� + +__Ō +, + +210 ** +__��ri� + +__�d�r +, +__ba� +) + +211 +__THROW + + `__n�nu� + ((1)); + +213 +__ex�nsi�__ + + +214 + $��ou� + (cڡ * +__��ri� + +__Ō +, + +215 ** +__��ri� + +__�d�r +, +__ba� +) + +216 +__THROW + + `__n�nu� + ((1)); + +217 +__END_NAMESPACE_C99 + + +221 #ifde� +__USE_GNU + + +235 + ~<xlo��.h +> + +239 + $���_l + (cڡ * +__��ri� + +__Ō +, + +240 ** +__��ri� + +__�d�r +, +__ba� +, + +241 +__lo��_t + +__loc +� +__THROW + + `__n�nu� + ((1, 4)); + +243 + $��oul_l + (cڡ * +__��ri� + +__Ō +, + +244 ** +__��ri� + +__�d�r +, + +245 +__ba� +, +__lo��_t + +__loc +) + +246 +__THROW + + `__n�nu� + ((1, 4)); + +248 +__ex�nsi�__ + + +249 + $���l_l + (cڡ * +__��ri� + +__Ō +, + +250 ** +__��ri� + +__�d�r +, +__ba� +, + +251 +__lo��_t + +__loc +) + +252 +__THROW + + `__n�nu� + ((1, 4)); + +254 +__ex�nsi�__ + + +255 + $��ou�_l + (cڡ * +__��ri� + +__Ō +, + +256 ** +__��ri� + +__�d�r +, + +257 +__ba� +, +__lo��_t + +__loc +) + +258 +__THROW + + `__n�nu� + ((1, 4)); + +260 + $��od_l + (cڡ * +__��ri� + +__Ō +, + +261 ** +__��ri� + +__�d�r +, +__lo��_t + +__loc +) + +262 +__THROW + + `__n�nu� + ((1, 3)); + +264 + $��of_l + (cڡ * +__��ri� + +__Ō +, + +265 ** +__��ri� + +__�d�r +, +__lo��_t + +__loc +) + +266 +__THROW + + `__n�nu� + ((1, 3)); + +268 + $���d_l + (cڡ * +__��ri� + +__Ō +, + +269 ** +__��ri� + +__�d�r +, + +270 +__lo��_t + +__loc +) + +271 +__THROW + + `__n�nu� + ((1, 3)); + +275 #ifde� +__USE_EXTERN_INLINES + + +276 +__BEGIN_NAMESPACE_STD + + +277 +__ex��_�l�e + + +278 + `__NTH + ( + $�oi + (cڡ * +__Ō +)) + +280 (� + `��� + ( +__Ō +, (**� +NULL +, 10); + +281 + } +} + +282 +__ex��_�l�e + + +283 +__NTH + ( + $�� + (cڡ * +__Ō +)) + +285 + `��� + ( +__Ō +, (**� +NULL +, 10); + +286 + } +} + +287 + g__END_NAMESPACE_STD + + +289 #i� +def�ed + +__USE_MISC + || def�ed +__USE_ISOC99 + + +290 +__BEGIN_NAMESPACE_C99 + + +291 +__ex�nsi�__ + +__ex��_�l�e + + +292 +__NTH + ( + $��l + (cڡ * +__Ō +)) + +294 + `���l + ( +__Ō +, (**� +NULL +, 10); + +295 + } +} + +296 + g__END_NAMESPACE_C99 + + +301 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN_EXTENDED + + +305 * + $l64a + ( +__n +� +__THROW + +__wur +; + +308 + $a64l + (cڡ * +__s +) + +309 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)� +__wur +; + +313 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_BSD + + +314 + ~<sys/ty�s.h +> + +321 + $�ndom + (� +__THROW +; + +324 + $��dom + ( +__�ed +� +__THROW +; + +330 * + $����e + ( +__�ed +, * +__��ebuf +, + +331 +size_t + +__���� +� +__THROW + + `__n�nu� + ((2)); + +335 * + $�t��e + (* +__��ebuf +� +__THROW + + `__n�nu� + ((1)); + +338 #ifde� +__USE_MISC + + +343 + s�ndom_d�a + + +345 +�t32_t + * +� +; + +346 +�t32_t + * +�� +; + +347 +�t32_t + * +��e +; + +348 +�nd_ty� +; + +349 +�nd_deg +; + +350 +�nd_�p +; + +351 +�t32_t + * +�d_�r +; + +354 + $�ndom_r + ( +�ndom_d�a + * +__��ri� + +__buf +, + +355 +�t32_t + * +__��ri� + +__�su� +� +__THROW + + `__n�nu� + ((1, 2)); + +357 + $��dom_r + ( +__�ed +, +�ndom_d�a + * +__buf +) + +358 +__THROW + + `__n�nu� + ((2)); + +360 + $����e_r + ( +__�ed +, * +__��ri� + +__��ebuf +, + +361 +size_t + +__���� +, + +362 +�ndom_d�a + * +__��ri� + +__buf +) + +363 +__THROW + + `__n�nu� + ((2, 4)); + +365 + $�t��e_r + (* +__��ri� + +__��ebuf +, + +366 +�ndom_d�a + * +__��ri� + +__buf +) + +367 +__THROW + + `__n�nu� + ((1, 2)); + +372 +__BEGIN_NAMESPACE_STD + + +374 + $�nd + (� +__THROW +; + +376 + $��d + ( +__�ed +� +__THROW +; + +377 +__END_NAMESPACE_STD + + +379 #ifde� +__USE_POSIX + + +381 + $�nd_r + (* +__�ed +� +__THROW +; + +385 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN + + +389 + $d�nd48 + (� +__THROW +; + +390 + $��d48 + ( +__xsubi +[3]� +__THROW + + `__n�nu� + ((1)); + +393 + $̪d48 + (� +__THROW +; + +394 + $Īd48 + ( +__xsubi +[3]) + +395 +__THROW + + `__n�nu� + ((1)); + +398 + $m�nd48 + (� +__THROW +; + +399 + $j�nd48 + ( +__xsubi +[3]) + +400 +__THROW + + `__n�nu� + ((1)); + +403 + $��d48 + ( +__�edv� +� +__THROW +; + +404 * + $�ed48 + ( +__�ed16v +[3]) + +405 +__THROW + + `__n�nu� + ((1)); + +406 + $lc�g48 + ( +__��m +[7]� +__THROW + + `__n�nu� + ((1)); + +408 #ifde� +__USE_MISC + + +412 + sd�nd48_d�a + + +414 +__x +[3]; + +415 +__�d_x +[3]; + +416 +__c +; + +417 +__�� +; + +418 +__ex�nsi�__ + +__a +; + +423 + $d�nd48_r + ( +d�nd48_d�a + * +__��ri� + +__buf�r +, + +424 * +__��ri� + +__�su� +� +__THROW + + `__n�nu� + ((1, 2)); + +425 + $��d48_r + ( +__xsubi +[3], + +426 +d�nd48_d�a + * +__��ri� + +__buf�r +, + +427 * +__��ri� + +__�su� +� +__THROW + + `__n�nu� + ((1, 2)); + +430 + $̪d48_r + ( +d�nd48_d�a + * +__��ri� + +__buf�r +, + +431 * +__��ri� + +__�su� +) + +432 +__THROW + + `__n�nu� + ((1, 2)); + +433 + $Īd48_r + ( +__xsubi +[3], + +434 +d�nd48_d�a + * +__��ri� + +__buf�r +, + +435 * +__��ri� + +__�su� +) + +436 +__THROW + + `__n�nu� + ((1, 2)); + +439 + $m�nd48_r + ( +d�nd48_d�a + * +__��ri� + +__buf�r +, + +440 * +__��ri� + +__�su� +) + +441 +__THROW + + `__n�nu� + ((1, 2)); + +442 + $j�nd48_r + ( +__xsubi +[3], + +443 +d�nd48_d�a + * +__��ri� + +__buf�r +, + +444 * +__��ri� + +__�su� +) + +445 +__THROW + + `__n�nu� + ((1, 2)); + +448 + $��d48_r + ( +__�edv� +, +d�nd48_d�a + * +__buf�r +) + +449 +__THROW + + `__n�nu� + ((2)); + +451 + $�ed48_r + ( +__�ed16v +[3], + +452 +d�nd48_d�a + * +__buf�r +� +__THROW + + `__n�nu� + ((1, 2)); + +454 + $lc�g48_r + ( +__��m +[7], + +455 +d�nd48_d�a + * +__buf�r +) + +456 +__THROW + + `__n�nu� + ((1, 2)); + +462 #i�de� +__m�loc_�d_��oc_def�ed + + +463 + #__m�loc_�d_��oc_def�ed + + + ) + +464 +__BEGIN_NAMESPACE_STD + + +466 * + $m�loc + ( +size_t + +__size +� +__THROW + +__��ibu�_m�loc__ + +__wur +; + +468 * + $��oc + ( +size_t + +__nmemb +, size_� +__size +) + +469 +__THROW + +__��ibu�_m�loc__ + +__wur +; + +470 +__END_NAMESPACE_STD + + +473 #i�de� +__�ed_m�loc_�d_��oc + + +474 +__BEGIN_NAMESPACE_STD + + +480 * + $��loc + (* +__�r +, +size_t + +__size +) + +481 +__THROW + +__��ibu�_w�n_unu�d_�su�__ +; + +483 + $� + (* +__�r +� +__THROW +; + +484 +__END_NAMESPACE_STD + + +486 #ifdef +__USE_MISC + + +488 + $c� + (* +__�r +� +__THROW +; + +491 #i� +def�ed + +__USE_GNU + || def�ed +__USE_BSD + || def�ed +__USE_MISC + + +492 + ~<�lo�.h +> + +495 #i�( +def�ed + +__USE_XOPEN_EXTENDED + && !def�ed +__USE_XOPEN2K +) \ + +496 || +def�ed + +__USE_BSD + + +498 * + $v�loc + ( +size_t + +__size +� +__THROW + +__��ibu�_m�loc__ + +__wur +; + +501 #ifde� +__USE_XOPEN2K + + +503 + $posix_mem�ign + (** +__mem�r +, +size_t + +__�ignm�t +, size_� +__size +) + +504 +__THROW + + `__n�nu� + ((1)� +__wur +; + +507 #ifde� +__USE_ISOC11 + + +509 * + $�ig�d_�loc + ( +size_t + +__�ignm�t +, size_� +__size +) + +510 +__THROW + +__��ibu�_m�loc__ + + `__��ibu�_�loc_size__ + ((2)� +__wur +; + +513 +__BEGIN_NAMESPACE_STD + + +515 + $ab�t + (� +__THROW + + `__��ibu�__ + (( +__nܑu�__ +)); + +519 + `�ex� + ((* +__func +�()� +__THROW + + `__n�nu� + ((1)); + +521 #i� +def�ed + +__USE_ISOC11 + || def�ed +__USE_ISOCXX11 + + +523 #ifde� +__�lu�lus + + +524 "C++" + `�_quick_ex� + ((* +__func +) ()) + +525 +__THROW + + `__asm + ("�_quick_ex�"� + `__n�nu� + ((1)); + +527 + `�_quick_ex� + ((* +__func +�()� +__THROW + + `__n�nu� + ((1)); + +530 +__END_NAMESPACE_STD + + +532 #ifdef +__USE_MISC + + +535 + `�_ex� + ((* +__func +�( +__��us +, * +__�g +), *__arg) + +536 +__THROW + + `__n�nu� + ((1)); + +539 +__BEGIN_NAMESPACE_STD + + +543 + $ex� + ( +__��us +� +__THROW + + `__��ibu�__ + (( +__nܑu�__ +)); + +545 #i� +def�ed + +__USE_ISOC11 + || def�ed +__USE_ISOCXX11 + + +549 + $quick_ex� + ( +__��us +� +__THROW + + `__��ibu�__ + (( +__nܑu�__ +)); + +551 +__END_NAMESPACE_STD + + +553 #ifde� +__USE_ISOC99 + + +554 +__BEGIN_NAMESPACE_C99 + + +557 + $_Ex� + ( +__��us +� +__THROW + + `__��ibu�__ + (( +__nܑu�__ +)); + +558 +__END_NAMESPACE_C99 + + +562 +__BEGIN_NAMESPACE_STD + + +564 * + $g��v + (cڡ * +__�me +� +__THROW + + `__n�nu� + ((1)� +__wur +; + +565 +__END_NAMESPACE_STD + + +567 #ifde� +__USE_GNU + + +570 * + $�cu�_g��v + (cڡ * +__�me +) + +571 +__THROW + + `__n�nu� + ((1)� +__wur +; + +574 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN + + +578 + $pu�nv + (* +__�r�g +� +__THROW + + `__n�nu� + ((1)); + +581 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN2K + + +584 + $��nv + (cڡ * +__�me +, cڡ * +__v�ue +, +__��a� +) + +585 +__THROW + + `__n�nu� + ((2)); + +588 + $un��nv + (cڡ * +__�me +� +__THROW + + `__n�nu� + ((1)); + +591 #ifdef +__USE_MISC + + +595 + $���nv + (� +__THROW +; + +599 #i� +def�ed + +__USE_MISC + \ + +600 || ( +def�ed + +__USE_XOPEN_EXTENDED + && !def�ed +__USE_XOPEN2K8 +) + +606 * + $mk�mp + (* +__�m��e +� +__THROW + + `__n�nu� + ((1)); + +609 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN_EXTENDED + \ + +610 || +def�ed + +__USE_XOPEN2K8 + + +619 #i�de� +__USE_FILE_OFFSET64 + + +620 + $mk�emp + (* +__�m��e +� + `__n�nu� + ((1)� +__wur +; + +622 #ifde� +__REDIRECT + + +623 + `__REDIRECT + ( +mk�emp +, (* +__�m��e +), +mk�emp64 +) + +624 + `__n�nu� + ((1)� +__wur +; + +626 + #mk�emp + +mk�emp64 + + + ) + +629 #ifde� +__USE_LARGEFILE64 + + +630 + $mk�emp64 + (* +__�m��e +� + `__n�nu� + ((1)� +__wur +; + +634 #ifde� +__USE_MISC + + +641 #i�de� +__USE_FILE_OFFSET64 + + +642 + $mk�emps + (* +__�m��e +, +__suffix�n +� + `__n�nu� + ((1)� +__wur +; + +644 #ifde� +__REDIRECT + + +645 + `__REDIRECT + ( +mk�emps +, (* +__�m��e +, +__suffix�n +), + +646 +mk�emps64 +� + `__n�nu� + ((1)� +__wur +; + +648 + #mk�emps + +mk�emps64 + + + ) + +651 #ifde� +__USE_LARGEFILE64 + + +652 + $mk�emps64 + (* +__�m��e +, +__suffix�n +) + +653 + `__n�nu� + ((1)� +__wur +; + +657 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN2K8 + + +663 * + $mkd�mp + (* +__�m��e +� +__THROW + + `__n�nu� + ((1)� +__wur +; + +666 #ifde� +__USE_GNU + + +673 #i�de� +__USE_FILE_OFFSET64 + + +674 + $mko�emp + (* +__�m��e +, +__�ags +� + `__n�nu� + ((1)� +__wur +; + +676 #ifde� +__REDIRECT + + +677 + `__REDIRECT + ( +mko�emp +, (* +__�m��e +, +__�ags +), +mko�emp64 +) + +678 + `__n�nu� + ((1)� +__wur +; + +680 + #mko�emp + +mko�emp64 + + + ) + +683 #ifde� +__USE_LARGEFILE64 + + +684 + $mko�emp64 + (* +__�m��e +, +__�ags +� + `__n�nu� + ((1)� +__wur +; + +693 #i�de� +__USE_FILE_OFFSET64 + + +694 + $mko�emps + (* +__�m��e +, +__suffix�n +, +__�ags +) + +695 + `__n�nu� + ((1)� +__wur +; + +697 #ifde� +__REDIRECT + + +698 + `__REDIRECT + ( +mko�emps +, (* +__�m��e +, +__suffix�n +, + +699 +__�ags +), +mko�emps64 +) + +700 + `__n�nu� + ((1)� +__wur +; + +702 + #mko�emps + +mko�emps64 + + + ) + +705 #ifde� +__USE_LARGEFILE64 + + +706 + $mko�emps64 + (* +__�m��e +, +__suffix�n +, +__�ags +) + +707 + `__n�nu� + ((1)� +__wur +; + +712 +__BEGIN_NAMESPACE_STD + + +717 + $sy�em + (cڡ * +__comm�d +� +__wur +; + +718 +__END_NAMESPACE_STD + + +721 #ifdef +__USE_GNU + + +724 * + $�n�i�lize_f�e_�me + (cڡ * +__�me +) + +725 +__THROW + + `__n�nu� + ((1)� +__wur +; + +728 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +734 * + $���th + (cڡ * +__��ri� + +__�me +, + +735 * +__��ri� + +__�s�ved +� +__THROW + +__wur +; + +740 #i�de� +__COMPAR_FN_T + + +741 + #__COMPAR_FN_T + + + ) + +742 (* + t__com�r_�_t +) (const *, const *); + +744 #ifdef +__USE_GNU + + +745 +__com�r_�_t + + tcom�ris�_�_t +; + +748 #ifde� +__USE_GNU + + +749 (* + t__com�r_d_�_t +) (const *, const *, *); + +752 +__BEGIN_NAMESPACE_STD + + +755 * + $b��ch + (cڡ * +__key +, cڡ * +__ba� +, + +756 +size_t + +__nmemb +, size_� +__size +, +__com�r_�_t + +__com�r +) + +757 + `__n�nu� + ((1, 2, 5)� +__wur +; + +759 #ifde� +__USE_EXTERN_INLINES + + +760 + ~<b�s/�dlib-b��ch.h +> + +765 + $qs�t + (* +__ba� +, +size_t + +__nmemb +, size_� +__size +, + +766 +__com�r_�_t + +__com�r +� + `__n�nu� + ((1, 4)); + +767 #ifde� +__USE_GNU + + +768 + $qs�t_r + (* +__ba� +, +size_t + +__nmemb +, size_� +__size +, + +769 +__com�r_d_�_t + +__com�r +, * +__�g +) + +770 + `__n�nu� + ((1, 4)); + +775 + $abs + ( +__x +� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)� +__wur +; + +776 + $�bs + ( +__x +� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)� +__wur +; + +777 +__END_NAMESPACE_STD + + +779 #ifde� +__USE_ISOC99 + + +780 +__ex�nsi�__ + + $�abs + ( +__x +) + +781 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)� +__wur +; + +785 +__BEGIN_NAMESPACE_STD + + +789 +div_t + + $div + ( +__num� +, +__d�om +) + +790 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)� +__wur +; + +791 +ldiv_t + + $ldiv + ( +__num� +, +__d�om +) + +792 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)� +__wur +; + +793 +__END_NAMESPACE_STD + + +795 #ifde� +__USE_ISOC99 + + +796 +__BEGIN_NAMESPACE_C99 + + +797 +__ex�nsi�__ + +�div_t + + $�div + ( +__num� +, + +798 +__d�om +) + +799 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)� +__wur +; + +800 +__END_NAMESPACE_C99 + + +804 #i�( +def�ed + +__USE_XOPEN_EXTENDED + && !def�ed +__USE_XOPEN2K8 +) \ + +805 || +def�ed + +__USE_SVID + + +812 * + $ecvt + ( +__v�ue +, +__ndig� +, * +__��ri� + +__de�t +, + +813 * +__��ri� + +__sign +� +__THROW + + `__n�nu� + ((3, 4)� +__wur +; + +818 * + $fcvt + ( +__v�ue +, +__ndig� +, * +__��ri� + +__de�t +, + +819 * +__��ri� + +__sign +� +__THROW + + `__n�nu� + ((3, 4)� +__wur +; + +824 * + $gcvt + ( +__v�ue +, +__ndig� +, * +__buf +) + +825 +__THROW + + `__n�nu� + ((3)� +__wur +; + +828 #ifde� +__USE_MISC + + +830 * + $qecvt + ( +__v�ue +, +__ndig� +, + +831 * +__��ri� + +__de�t +, *__��ri� +__sign +) + +832 +__THROW + + `__n�nu� + ((3, 4)� +__wur +; + +833 * + $qfcvt + ( +__v�ue +, +__ndig� +, + +834 * +__��ri� + +__de�t +, *__��ri� +__sign +) + +835 +__THROW + + `__n�nu� + ((3, 4)� +__wur +; + +836 * + $qgcvt + ( +__v�ue +, +__ndig� +, * +__buf +) + +837 +__THROW + + `__n�nu� + ((3)� +__wur +; + +842 + $ecvt_r + ( +__v�ue +, +__ndig� +, * +__��ri� + +__de�t +, + +843 * +__��ri� + +__sign +, *__��ri� +__buf +, + +844 +size_t + +__�n +� +__THROW + + `__n�nu� + ((3, 4, 5)); + +845 + $fcvt_r + ( +__v�ue +, +__ndig� +, * +__��ri� + +__de�t +, + +846 * +__��ri� + +__sign +, *__��ri� +__buf +, + +847 +size_t + +__�n +� +__THROW + + `__n�nu� + ((3, 4, 5)); + +849 + $qecvt_r + ( +__v�ue +, +__ndig� +, + +850 * +__��ri� + +__de�t +, *__��ri� +__sign +, + +851 * +__��ri� + +__buf +, +size_t + +__�n +) + +852 +__THROW + + `__n�nu� + ((3, 4, 5)); + +853 + $qfcvt_r + ( +__v�ue +, +__ndig� +, + +854 * +__��ri� + +__de�t +, *__��ri� +__sign +, + +855 * +__��ri� + +__buf +, +size_t + +__�n +) + +856 +__THROW + + `__n�nu� + ((3, 4, 5)); + +860 +__BEGIN_NAMESPACE_STD + + +863 + $mb�n + (cڡ * +__s +, +size_t + +__n +� +__THROW +; + +866 + $mbtowc + ( +wch�_t + * +__��ri� + +__pwc +, + +867 cڡ * +__��ri� + +__s +, +size_t + +__n +� +__THROW +; + +870 + $w�omb + (* +__s +, +wch�_t + +__wch� +� +__THROW +; + +874 +size_t + + $mb�owcs + ( +wch�_t + * +__��ri� + +__pwcs +, + +875 cڡ * +__��ri� + +__s +, +size_t + +__n +� +__THROW +; + +877 +size_t + + $wc�ombs + (* +__��ri� + +__s +, + +878 cڡ +wch�_t + * +__��ri� + +__pwcs +, +size_t + +__n +) + +879 +__THROW +; + +880 +__END_NAMESPACE_STD + + +883 #ifde� +__USE_SVID + + +888 + $�m�ch + (cڡ * +__��ڣ +� +__THROW + + `__n�nu� + ((1)� +__wur +; + +892 #i� +def�ed + +__USE_XOPEN_EXTENDED + || def�ed +__USE_XOPEN2K8 + + +899 + $g�sub�t + (** +__��ri� + +__�ti�p +, + +900 *cڡ * +__��ri� + +__tok�s +, + +901 ** +__��ri� + +__v�u� +) + +902 +__THROW + + `__n�nu� + ((1, 2, 3)� +__wur +; + +906 #ifde� +__USE_XOPEN + + +908 + $�tkey + (cڡ * +__key +� +__THROW + + `__n�nu� + ((1)); + +914 #ifde� +__USE_XOPEN2KXSI + + +916 + $posix_ݒ� + ( +__o�ag +� +__wur +; + +919 #ifde� +__USE_XOPEN + + +924 + $g��� + ( +__fd +� +__THROW +; + +928 + $u�ock� + ( +__fd +� +__THROW +; + +933 * + $��ame + ( +__fd +� +__THROW + +__wur +; + +936 #ifde� +__USE_GNU + + +940 + $��ame_r + ( +__fd +, * +__buf +, +size_t + +__bu� +) + +941 +__THROW + + `__n�nu� + ((2)); + +944 + `g�� + (); + +947 #ifde� +__USE_BSD + + +951 + $g�l�davg + ( +__l�davg +[], +__��m +) + +952 +__THROW + + `__n�nu� + ((1)); + +955 + ~<b�s/�dlib-��t.h +> + +958 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__f�tify_fun�i� + + +959 + ~<b�s/�dlib.h +> + +961 #ifde� +__LDBL_COMPAT + + +962 + ~<b�s/�dlib-ldbl.h +> + +966 #unde� +__�ed_m�loc_�d_��oc + + +968 +__END_DECLS + + + @/usr/include/string.h + +22 #i�def +_STRING_H + + +23 + #_STRING_H + 1 + + ) + +25 + ~<�u�s.h +> + +27 + g__BEGIN_DECLS + + +30 + #__�ed_size_t + + + ) + +31 + #__�ed_NULL + + + ) + +32 + ~<�ddef.h +> + +39 #i� +def�ed + +__�lu�lus + && (__�lu�lu�>�199711L || +__GNUC_PREREQ + (4, 4)) + +40 + #__CORRECT_ISO_CPP_STRING_H_PROTO + + + ) + +44 +__BEGIN_NAMESPACE_STD + + +46 * + $mem�y + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +, + +47 +size_t + +__n +� +__THROW + + `__n�nu� + ((1, 2)); + +50 * + $memmove + (* +__de� +, cڡ * +__�c +, +size_t + +__n +) + +51 +__THROW + + `__n�nu� + ((1, 2)); + +52 +__END_NAMESPACE_STD + + +57 #i� +def�ed + +__USE_SVID + || def�ed +__USE_BSD + || def�ed +__USE_XOPEN + + +58 * + $memc�y + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +, + +59 +__c +, +size_t + +__n +) + +60 +__THROW + + `__n�nu� + ((1, 2)); + +64 +__BEGIN_NAMESPACE_STD + + +66 * + $mem�t + (* +__s +, +__c +, +size_t + +__n +� +__THROW + + `__n�nu� + ((1)); + +69 + $memcmp + (cڡ * +__s1 +, cڡ * +__s2 +, +size_t + +__n +) + +70 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +73 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +76 * + `memchr + (* +__s +, +__c +, +size_t + +__n +) + +77 +__THROW + + `__asm + ("memchr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +78 cڡ * + `memchr + (cڡ * +__s +, +__c +, +size_t + +__n +) + +79 +__THROW + + `__asm + ("memchr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +81 #ifde� +__OPTIMIZE__ + + +82 +__ex��_�ways_�l�e + * + +83 + `memchr + (* +__s +, +__c +, +size_t + +__n +� +__THROW + + +85 + `__bu�t�_memchr + ( +__s +, +__c +, +__n +); + +88 +__ex��_�ways_�l�e + const * + +89 + `memchr + (cڡ * +__s +, +__c +, +size_t + +__n +� +__THROW + + +91 + `__bu�t�_memchr + ( +__s +, +__c +, +__n +); + +94 + } +} + +96 * + $memchr + (cڡ * +__s +, +__c +, +size_t + +__n +) + +97 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +99 +__END_NAMESPACE_STD + + +101 #ifde� +__USE_GNU + + +104 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +105 "C++" * + $�wmemchr + (* +__s +, +__c +) + +106 +__THROW + + `__asm + ("�wmemchr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +107 "C++" cڡ * + $�wmemchr + (cڡ * +__s +, +__c +) + +108 +__THROW + + `__asm + ("�wmemchr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +110 * + $�wmemchr + (cڡ * +__s +, +__c +) + +111 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +115 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +116 "C++" * + $memrchr + (* +__s +, +__c +, +size_t + +__n +) + +117 +__THROW + + `__asm + ("memrchr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +118 "C++" cڡ * + $memrchr + (cڡ * +__s +, +__c +, +size_t + +__n +) + +119 +__THROW + + `__asm + ("memrchr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +121 * + $memrchr + (cڡ * +__s +, +__c +, +size_t + +__n +) + +122 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +127 +__BEGIN_NAMESPACE_STD + + +129 * + $�r�y + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +) + +130 +__THROW + + `__n�nu� + ((1, 2)); + +132 * + $���y + (* +__��ri� + +__de� +, + +133 cڡ * +__��ri� + +__�c +, +size_t + +__n +) + +134 +__THROW + + `__n�nu� + ((1, 2)); + +137 * + $�r�t + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +) + +138 +__THROW + + `__n�nu� + ((1, 2)); + +140 * + $���t + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +, + +141 +size_t + +__n +� +__THROW + + `__n�nu� + ((1, 2)); + +144 + $�rcmp + (cڡ * +__s1 +, cڡ * +__s2 +) + +145 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +147 + $��cmp + (cڡ * +__s1 +, cڡ * +__s2 +, +size_t + +__n +) + +148 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +151 + $�rc�l + (cڡ * +__s1 +, cڡ * +__s2 +) + +152 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +154 +size_t + + $�rx�m + (* +__��ri� + +__de� +, + +155 cڡ * +__��ri� + +__�c +, +size_t + +__n +) + +156 +__THROW + + `__n�nu� + ((2)); + +157 +__END_NAMESPACE_STD + + +159 #ifde� +__USE_XOPEN2K8 + + +163 + ~<xlo��.h +> + +166 + $�rc�l_l + (cڡ * +__s1 +, cڡ * +__s2 +, +__lo��_t + +__l +) + +167 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2, 3)); + +169 +size_t + + $�rx�m_l + (* +__de� +, cڡ * +__�c +, +size_t + +__n +, + +170 +__lo��_t + +__l +� +__THROW + + `__n�nu� + ((2, 4)); + +173 #i� +def�ed + +__USE_SVID + || def�ed +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + \ + +174 || +def�ed + +__USE_XOPEN2K8 + + +176 * + $�rdup + (cڡ * +__s +) + +177 +__THROW + +__��ibu�_m�loc__ + + `__n�nu� + ((1)); + +183 #i� +def�ed + +__USE_XOPEN2K8 + + +184 * + $��dup + (cڡ * +__�r�g +, +size_t + +__n +) + +185 +__THROW + +__��ibu�_m�loc__ + + `__n�nu� + ((1)); + +188 #i� +def�ed + +__USE_GNU + && def�ed +__GNUC__ + + +190 + #�rdu� +( +s +) \ + +191 ( +__ex�nsi�__ + \ + +193 cڡ * +__�d + = ( +s +); \ + +194 +size_t + +__�n + = + `��� + ( +__�d +) + 1; \ + +195 * +__�w + = (*� + `__bu�t�_�lo� + ( +__�n +); \ + +196 (*� + `mem�y + ( +__�w +, +__�d +, +__�n +); \ + +197 + } +})) + + ) + +200 + #��du� +( +s +, +n +) \ + +201 ( +__ex�nsi�__ + \ + +203 cڡ * +__�d + = ( +s +); \ + +204 +size_t + +__�n + = + `���n + ( +__�d +, ( +n +)); \ + +205 * +__�w + = (*� + `__bu�t�_�lo� + ( +__�n + + 1); \ + +206 +__�w +[ +__�n +] = '\0'; \ + +207 (*� + `mem�y + ( +__�w +, +__�d +, +__�n +); \ + +208 })) + + ) + +211 + g__BEGIN_NAMESPACE_STD + + +213 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +216 * +�rchr + (* +__s +, +__c +) + +217 +__THROW + +__asm + ("�rchr"� +__��ibu�_pu�__ + +__n�nu� + ((1)); + +218 cڡ * +�rchr + (cڡ * +__s +, +__c +) + +219 +__THROW + +__asm + ("�rchr"� +__��ibu�_pu�__ + +__n�nu� + ((1)); + +221 #ifde� +__OPTIMIZE__ + + +222 +__ex��_�ways_�l�e + * + +223 +�rchr + (* +__s +, +__c +� + g__THROW + + +225 +__bu�t�_�rchr + ( +__s +, +__c +); + +228 +__ex��_�ways_�l�e + const * + +229 +�rchr + (cڡ * +__s +, +__c +� + g__THROW + + +231 +__bu�t�_�rchr + ( +__s +, +__c +); + +236 * + $�rchr + (cڡ * +__s +, +__c +) + +237 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +240 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +243 * + `��chr + (* +__s +, +__c +) + +244 +__THROW + + `__asm + ("��chr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +245 cڡ * + `��chr + (cڡ * +__s +, +__c +) + +246 +__THROW + + `__asm + ("��chr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +248 #ifde� +__OPTIMIZE__ + + +249 +__ex��_�ways_�l�e + * + +250 + `��chr + (* +__s +, +__c +� +__THROW + + +252 + `__bu�t�_��chr + ( +__s +, +__c +); + +255 +__ex��_�ways_�l�e + const * + +256 + `��chr + (cڡ * +__s +, +__c +� +__THROW + + +258 + `__bu�t�_��chr + ( +__s +, +__c +); + +261 + } +} + +263 * + $��chr + (cڡ * +__s +, +__c +) + +264 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +266 +__END_NAMESPACE_STD + + +268 #ifde� +__USE_GNU + + +271 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +272 "C++" * + $�rch�ul + (* +__s +, +__c +) + +273 +__THROW + + `__asm + ("�rch�ul"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +274 "C++" cڡ * + $�rch�ul + (cڡ * +__s +, +__c +) + +275 +__THROW + + `__asm + ("�rch�ul"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +277 * + $�rch�ul + (cڡ * +__s +, +__c +) + +278 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +282 +__BEGIN_NAMESPACE_STD + + +285 +size_t + + $�rc�n + (cڡ * +__s +, cڡ * +__�je� +) + +286 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +289 +size_t + + $�r�n + (cڡ * +__s +, cڡ * +__ac�� +) + +290 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +292 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +295 * + `��brk + (* +__s +, cڡ * +__ac�� +) + +296 +__THROW + + `__asm + ("��brk"� +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +297 cڡ * + `��brk + (cڡ * +__s +, cڡ * +__ac�� +) + +298 +__THROW + + `__asm + ("��brk"� +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +300 #ifde� +__OPTIMIZE__ + + +301 +__ex��_�ways_�l�e + * + +302 + `��brk + (* +__s +, cڡ * +__ac�� +� +__THROW + + +304 + `__bu�t�_��brk + ( +__s +, +__ac�� +); + +307 +__ex��_�ways_�l�e + const * + +308 + `��brk + (cڡ * +__s +, cڡ * +__ac�� +� +__THROW + + +310 + `__bu�t�_��brk + ( +__s +, +__ac�� +); + +313 + } +} + +315 * + $��brk + (cڡ * +__s +, cڡ * +__ac�� +) + +316 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +319 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +322 * + `�r�r + (* +__hay�ack +, cڡ * +__�ed� +) + +323 +__THROW + + `__asm + ("�r�r"� +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +324 cڡ * + `�r�r + (cڡ * +__hay�ack +, cڡ * +__�ed� +) + +325 +__THROW + + `__asm + ("�r�r"� +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +327 #ifde� +__OPTIMIZE__ + + +328 +__ex��_�ways_�l�e + * + +329 + `�r�r + (* +__hay�ack +, cڡ * +__�ed� +� +__THROW + + +331 + `__bu�t�_�r�r + ( +__hay�ack +, +__�ed� +); + +334 +__ex��_�ways_�l�e + const * + +335 + `�r�r + (cڡ * +__hay�ack +, cڡ * +__�ed� +� +__THROW + + +337 + `__bu�t�_�r�r + ( +__hay�ack +, +__�ed� +); + +340 + } +} + +342 * + $�r�r + (cڡ * +__hay�ack +, cڡ * +__�ed� +) + +343 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +348 * + $��ok + (* +__��ri� + +__s +, cڡ *__��ri� +__d�im +) + +349 +__THROW + + `__n�nu� + ((2)); + +350 +__END_NAMESPACE_STD + + +354 * + $__��ok_r + (* +__��ri� + +__s +, + +355 cڡ * +__��ri� + +__d�im +, + +356 ** +__��ri� + +__�ve_�r +) + +357 +__THROW + + `__n�nu� + ((2, 3)); + +358 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +359 * + $��ok_r + (* +__��ri� + +__s +, cڡ *__��ri� +__d�im +, + +360 ** +__��ri� + +__�ve_�r +) + +361 +__THROW + + `__n�nu� + ((2, 3)); + +364 #ifde� +__USE_GNU + + +366 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +367 "C++" * + $�r���r + (* +__hay�ack +, cڡ * +__�ed� +) + +368 +__THROW + + `__asm + ("�r���r"� +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +369 "C++" cڡ * + $�r���r + (cڡ * +__hay�ack +, + +370 cڡ * +__�ed� +) + +371 +__THROW + + `__asm + ("�r���r"� +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +373 * + $�r���r + (cڡ * +__hay�ack +, cڡ * +__�ed� +) + +374 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +378 #ifde� +__USE_GNU + + +382 * + $memmem + (cڡ * +__hay�ack +, +size_t + +__hay�ack�n +, + +383 cڡ * +__�ed� +, +size_t + +__�ed��n +) + +384 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 3)); + +388 * + $__memp�y + (* +__��ri� + +__de� +, + +389 cڡ * +__��ri� + +__�c +, +size_t + +__n +) + +390 +__THROW + + `__n�nu� + ((1, 2)); + +391 * + $memp�y + (* +__��ri� + +__de� +, + +392 cڡ * +__��ri� + +__�c +, +size_t + +__n +) + +393 +__THROW + + `__n�nu� + ((1, 2)); + +397 +__BEGIN_NAMESPACE_STD + + +399 +size_t + + $��� + (cڡ * +__s +) + +400 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +401 +__END_NAMESPACE_STD + + +403 #ifdef +__USE_XOPEN2K8 + + +406 +size_t + + $���n + (cڡ * +__�r�g +, +size_t + +__max�n +) + +407 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +411 +__BEGIN_NAMESPACE_STD + + +413 * + $���� + ( +__��um +� +__THROW +; + +414 +__END_NAMESPACE_STD + + +415 #i� +def�ed + +__USE_XOPEN2K + || def�ed +__USE_MISC + + +423 #i� +def�ed + +__USE_XOPEN2K + && !def�ed +__USE_GNU + + +426 #ifde� +__REDIRECT_NTH + + +427 + `__REDIRECT_NTH + ( +����_r +, + +428 ( +__��um +, * +__buf +, +size_t + +__bu� +), + +429 +__xpg_����_r +� + `__n�nu� + ((2)); + +431 + $__xpg_����_r + ( +__��um +, * +__buf +, +size_t + +__bu� +) + +432 +__THROW + + `__n�nu� + ((2)); + +433 + #����_r + +__xpg_����_r + + + ) + +438 * + $����_r + ( +__��um +, * +__buf +, +size_t + +__bu� +) + +439 +__THROW + + `__n�nu� + ((2)� +__wur +; + +443 #ifde� +__USE_XOPEN2K8 + + +445 * + $����_l + ( +__��um +, +__lo��_t + +__l +� +__THROW +; + +451 + $__bz�o + (* +__s +, +size_t + +__n +� +__THROW + + `__n�nu� + ((1)); + +453 #ifde� +__USE_BSD + + +455 + $bc�y + (cڡ * +__�c +, * +__de� +, +size_t + +__n +) + +456 +__THROW + + `__n�nu� + ((1, 2)); + +459 + $bz�o + (* +__s +, +size_t + +__n +� +__THROW + + `__n�nu� + ((1)); + +462 + $bcmp + (cڡ * +__s1 +, cڡ * +__s2 +, +size_t + +__n +) + +463 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +466 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +469 * + `�dex + (* +__s +, +__c +) + +470 +__THROW + + `__asm + ("�dex"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +471 cڡ * + `�dex + (cڡ * +__s +, +__c +) + +472 +__THROW + + `__asm + ("�dex"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +474 #i� +def�ed + +__OPTIMIZE__ + && !def�ed +__CORRECT_ISO_CPP_STRINGS_H_PROTO + + +475 +__ex��_�ways_�l�e + * + +476 + `�dex + (* +__s +, +__c +� +__THROW + + +478 + `__bu�t�_�dex + ( +__s +, +__c +); + +481 +__ex��_�ways_�l�e + const * + +482 + `�dex + (cڡ * +__s +, +__c +� +__THROW + + +484 + `__bu�t�_�dex + ( +__s +, +__c +); + +487 + } +} + +489 * + $�dex + (cڡ * +__s +, +__c +) + +490 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +494 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +497 * + `r�dex + (* +__s +, +__c +) + +498 +__THROW + + `__asm + ("r�dex"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +499 cڡ * + `r�dex + (cڡ * +__s +, +__c +) + +500 +__THROW + + `__asm + ("r�dex"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +502 #i� +def�ed + +__OPTIMIZE__ + && !def�ed +__CORRECT_ISO_CPP_STRINGS_H_PROTO + + +503 +__ex��_�ways_�l�e + * + +504 + `r�dex + (* +__s +, +__c +� +__THROW + + +506 + `__bu�t�_r�dex + ( +__s +, +__c +); + +509 +__ex��_�ways_�l�e + const * + +510 + `r�dex + (cڡ * +__s +, +__c +� +__THROW + + +512 + `__bu�t�_r�dex + ( +__s +, +__c +); + +515 + } +} + +517 * + $r�dex + (cڡ * +__s +, +__c +) + +518 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +523 + $ffs + ( +__i +� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +527 #ifdef +__USE_GNU + + +528 + $ff� + ( +__l +� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +529 +__ex�nsi�__ + + $ff�l + ( +__� +) + +530 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +534 + $�r��cmp + (cڡ * +__s1 +, cڡ * +__s2 +) + +535 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +538 + $����cmp + (cڡ * +__s1 +, cڡ * +__s2 +, +size_t + +__n +) + +539 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +542 #ifdef +__USE_GNU + + +545 + $�r��cmp_l + (cڡ * +__s1 +, cڡ * +__s2 +, + +546 +__lo��_t + +__loc +) + +547 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2, 3)); + +549 + $����cmp_l + (cڡ * +__s1 +, cڡ * +__s2 +, + +550 +size_t + +__n +, +__lo��_t + +__loc +) + +551 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2, 4)); + +554 #ifdef +__USE_BSD + + +557 * + $�r�p + (** +__��ri� + +__�r�gp +, + +558 cڡ * +__��ri� + +__d�im +) + +559 +__THROW + + `__n�nu� + ((1, 2)); + +562 #ifdef +__USE_XOPEN2K8 + + +564 * + $�rsig�l + ( +__sig +� +__THROW +; + +567 * + $__�p�y + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +) + +568 +__THROW + + `__n�nu� + ((1, 2)); + +569 * + $�p�y + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +) + +570 +__THROW + + `__n�nu� + ((1, 2)); + +574 * + $__���y + (* +__��ri� + +__de� +, + +575 cڡ * +__��ri� + +__�c +, +size_t + +__n +) + +576 +__THROW + + `__n�nu� + ((1, 2)); + +577 * + $���y + (* +__��ri� + +__de� +, + +578 cڡ * +__��ri� + +__�c +, +size_t + +__n +) + +579 +__THROW + + `__n�nu� + ((1, 2)); + +582 #ifdef +__USE_GNU + + +584 + $�rv�scmp + (cڡ * +__s1 +, cڡ * +__s2 +) + +585 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +588 * + $�r�y + (* +__�r�g +� +__THROW + + `__n�nu� + ((1)); + +591 * + $mem�ob + (* +__s +, +size_t + +__n +� +__THROW + + `__n�nu� + ((1)); + +593 #i�de� +ba��me + + +598 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +599 "C++" * + $ba��me + (* +__f��ame +) + +600 +__THROW + + `__asm + ("ba��me"� + `__n�nu� + ((1)); + +601 "C++" cڡ * + $ba��me + (cڡ * +__f��ame +) + +602 +__THROW + + `__asm + ("ba��me"� + `__n�nu� + ((1)); + +604 * + $ba��me + (cڡ * +__f��ame +� +__THROW + + `__n�nu� + ((1)); + +610 #i� +def�ed + +__GNUC__ + && __GNUC__ >= 2 + +611 #i� +def�ed + +__OPTIMIZE__ + && !def�ed +__OPTIMIZE_SIZE__ + \ + +612 && ! +def�ed + +__NO_INLINE__ + && !def�ed +__�lu�lus + + +632 + ~<b�s/�r�g.h +> + +635 + ~<b�s/�r�g2.h +> + +638 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__f�tify_fun�i� + + +640 + ~<b�s/�r�g3.h +> + +644 +__END_DECLS + + + @/usr/include/sys/epoll.h + +18 #i�def +_SYS_EPOLL_H + + +19 + #_SYS_EPOLL_H + 1 + + ) + +21 + ~<�d�t.h +> + +22 + ~<sys/ty�s.h +> + +25 + ~<b�s/sig�t.h +> + +27 #i�de� +__sig�t_t_def�ed + + +28 + #__sig�t_t_def�ed + + + ) + +29 +__sig�t_t + + tsig�t_t +; + +33 + ~<b�s/��l.h +> + +35 #i�de� +__EPOLL_PACKED + + +36 + #__EPOLL_PACKED + + + ) + +40 + eEPOLL_EVENTS + + +42 + mEPOLLIN + = 0x001, + +43 + #EPOLLIN + +EPOLLIN + + + ) + +44 + mEPOLLPRI + = 0x002, + +45 + #EPOLLPRI + +EPOLLPRI + + + ) + +46 + mEPOLLOUT + = 0x004, + +47 + #EPOLLOUT + +EPOLLOUT + + + ) + +48 + mEPOLLRDNORM + = 0x040, + +49 + #EPOLLRDNORM + +EPOLLRDNORM + + + ) + +50 + mEPOLLRDBAND + = 0x080, + +51 + #EPOLLRDBAND + +EPOLLRDBAND + + + ) + +52 + mEPOLLWRNORM + = 0x100, + +53 + #EPOLLWRNORM + +EPOLLWRNORM + + + ) + +54 + mEPOLLWRBAND + = 0x200, + +55 + #EPOLLWRBAND + +EPOLLWRBAND + + + ) + +56 + mEPOLLMSG + = 0x400, + +57 + #EPOLLMSG + +EPOLLMSG + + + ) + +58 + mEPOLLERR + = 0x008, + +59 + #EPOLLERR + +EPOLLERR + + + ) + +60 + mEPOLLHUP + = 0x010, + +61 + #EPOLLHUP + +EPOLLHUP + + + ) + +62 + mEPOLLRDHUP + = 0x2000, + +63 + #EPOLLRDHUP + +EPOLLRDHUP + + + ) + +64 + mEPOLLWAKEUP + = 1u << 29, + +65 + #EPOLLWAKEUP + +EPOLLWAKEUP + + + ) + +66 + mEPOLLONESHOT + = 1u << 30, + +67 + #EPOLLONESHOT + +EPOLLONESHOT + + + ) + +68 + mEPOLLET + = 1u << 31 + +69 + #EPOLLET + +EPOLLET + + + ) + +74 + #EPOLL_CTL_ADD + 1 + + ) + +75 + #EPOLL_CTL_DEL + 2 + + ) + +76 + #EPOLL_CTL_MOD + 3 + + ) + +79 + u��l_d�a + + +81 * + m�r +; + +82 + mfd +; + +83 +u�t32_t + + mu32 +; + +84 +u�t64_t + + mu64 +; + +85 } + t��l_d�a_t +; + +87 + s��l_ev�t + + +89 +u�t32_t + + mev�ts +; + +90 +��l_d�a_t + + md�a +; + +91 } + g__EPOLL_PACKED +; + +94 +__BEGIN_DECLS + + +100 + $��l_��� + ( +__size +� +__THROW +; + +104 + $��l_���1 + ( +__�ags +� +__THROW +; + +113 + $��l_�l + ( +__�fd +, +__� +, +__fd +, + +114 +��l_ev�t + * +__ev�t +� +__THROW +; + +127 + `��l_wa� + ( +__�fd +, +��l_ev�t + * +__ev�ts +, + +128 +__maxev�ts +, +__timeout +); + +136 + `��l_pwa� + ( +__�fd +, +��l_ev�t + * +__ev�ts +, + +137 +__maxev�ts +, +__timeout +, + +138 cڡ +__sig�t_t + * +__ss +); + +140 +__END_DECLS + + + @/usr/include/sys/ioctl.h + +18 #i�def +_SYS_IOCTL_H + + +19 + #_SYS_IOCTL_H + 1 + + ) + +21 + ~<�u�s.h +> + +23 + g__BEGIN_DECLS + + +26 + ~<b�s/io�ls.h +> + +29 + ~<b�s/io�l-ty�s.h +> + +36 + ~<sys/�yde�u�s.h +> + +41 + $io�l + ( +__fd +, +__�que� +, ...� +__THROW +; + +43 +__END_DECLS + + + @/usr/include/sys/resource.h + +18 #i�def +_SYS_RESOURCE_H + + +19 + #_SYS_RESOURCE_H + 1 + + ) + +21 + ~<�u�s.h +> + +24 + ~<b�s/�sour�.h +> + +26 #i�de� +__id_t_def�ed + + +27 +__id_t + + tid_t +; + +28 + #__id_t_def�ed + + + ) + +31 + g__BEGIN_DECLS + + +37 #i� +def�ed + +__USE_GNU + && !def�ed +__�lu�lus + + +38 +__�im�_�sour� + + t__�im�_�sour�_t +; + +39 +__ru�ge_who + + t__ru�ge_who_t +; + +40 +__�iܙy_which + + t__�iܙy_which_t +; + +42 + t__�im�_�sour�_t +; + +43 + t__ru�ge_who_t +; + +44 + t__�iܙy_which_t +; + +49 #i�de� +__USE_FILE_OFFSET64 + + +50 + $g��im� + ( +__�im�_�sour�_t + +__�sour� +, + +51 +�im� + * +__�im�s +� +__THROW +; + +53 #ifde� +__REDIRECT_NTH + + +54 + `__REDIRECT_NTH + ( +g��im� +, ( +__�im�_�sour�_t + +__�sour� +, + +55 +�im� + * +__�im�s +), +g��im�64 +); + +57 + #g��im� + +g��im�64 + + + ) + +60 #ifde� +__USE_LARGEFILE64 + + +61 + $g��im�64 + ( +__�im�_�sour�_t + +__�sour� +, + +62 +�im�64 + * +__�im�s +� +__THROW +; + +68 #i�de� +__USE_FILE_OFFSET64 + + +69 + $��lim� + ( +__�im�_�sour�_t + +__�sour� +, + +70 cڡ +�im� + * +__�im�s +� +__THROW +; + +72 #ifde� +__REDIRECT_NTH + + +73 + `__REDIRECT_NTH + ( +��lim� +, ( +__�im�_�sour�_t + +__�sour� +, + +74 cڡ +�im� + * +__�im�s +), + +75 +��lim�64 +); + +77 + #��lim� + +��lim�64 + + + ) + +80 #ifde� +__USE_LARGEFILE64 + + +81 + $��lim�64 + ( +__�im�_�sour�_t + +__�sour� +, + +82 cڡ +�im�64 + * +__�im�s +� +__THROW +; + +87 + $g�ru�ge + ( +__ru�ge_who_t + +__who +, +ru�ge + * +__u�ge +� +__THROW +; + +93 + $g��iܙy + ( +__�iܙy_which_t + +__which +, +id_t + +__who +� +__THROW +; + +97 + $��riܙy + ( +__�iܙy_which_t + +__which +, +id_t + +__who +, +__�io +) + +98 +__THROW +; + +100 +__END_DECLS + + + @/usr/include/sys/select.h + +21 #i�de� +_SYS_SELECT_H + + +22 + #_SYS_SELECT_H + 1 + + ) + +24 + ~<�u�s.h +> + +27 + ~<b�s/ty�s.h +> + +30 + ~<b�s/���.h +> + +33 + ~<b�s/sig�t.h +> + +35 #i�de� +__sig�t_t_def�ed + + +36 + #__sig�t_t_def�ed + + + ) + +37 +__sig�t_t + + tsig�t_t +; + +41 + #__�ed_time_t + + + ) + +42 + #__�ed_time�ec + + + ) + +43 + ~<time.h +> + +44 + #__�ed_timev� + + + ) + +45 + ~<b�s/time.h +> + +47 #i�de� +__su�c�ds_t_def�ed + + +48 +__su�c�ds_t + + tsu�c�ds_t +; + +49 + #__su�c�ds_t_def�ed + + + ) + +54 + t__fd_mask +; + +57 #unde� +__NFDBITS + + +59 + #__NFDBITS + (8 * (� ( +__fd_mask +)) + + ) + +60 + #__FD_ELT +( +d +�((d�/ +__NFDBITS +) + + ) + +61 + #__FD_MASK +( +d +�(( +__fd_mask +�1 << ((d�% +__NFDBITS +)) + + ) + +68 #ifde� +__USE_XOPEN + + +69 +__fd_mask + + mfds_b�s +[ +__FD_SETSIZE + / +__NFDBITS +]; + +70 + #__FDS_BITS +( +�t +�((�t)-> +fds_b�s +) + + ) + +72 +__fd_mask + + m__fds_b�s +[ +__FD_SETSIZE + / +__NFDBITS +]; + +73 + #__FDS_BITS +( +�t +�((�t)-> +__fds_b�s +) + + ) + +75 } + tfd_�t +; + +78 + #FD_SETSIZE + +__FD_SETSIZE + + + ) + +80 #ifde� +__USE_MISC + + +82 +__fd_mask + + tfd_mask +; + +85 + #NFDBITS + +__NFDBITS + + + ) + +90 + #FD_SET +( +fd +, +fd�� +� + `__FD_SET + (fd, fd��) + + ) + +91 + #FD_CLR +( +fd +, +fd�� +� + `__FD_CLR + (fd, fd��) + + ) + +92 + #FD_ISSET +( +fd +, +fd�� +� + `__FD_ISSET + (fd, fd��) + + ) + +93 + #FD_ZERO +( +fd�� +� + `__FD_ZERO + (fd��) + + ) + +96 +__BEGIN_DECLS + + +106 +��� + ( +__nfds +, +fd_�t + * +__��ri� + +__�adfds +, + +107 +fd_�t + * +__��ri� + +__wr�efds +, + +108 +fd_�t + * +__��ri� + +__ex��fds +, + +109 +timev� + * +__��ri� + +__timeout +); + +111 #ifde� +__USE_XOPEN2K + + +118 +p��� + ( +__nfds +, +fd_�t + * +__��ri� + +__�adfds +, + +119 +fd_�t + * +__��ri� + +__wr�efds +, + +120 +fd_�t + * +__��ri� + +__ex��fds +, + +121 cڡ +time�ec + * +__��ri� + +__timeout +, + +122 cڡ +__sig�t_t + * +__��ri� + +__sigmask +); + +127 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__GNUC__ + + +128 + ~<b�s/���2.h +> + +131 + g__END_DECLS + + + @/usr/include/sys/socket.h + +19 #i�def +_SYS_SOCKET_H + + +20 + #_SYS_SOCKET_H + 1 + + ) + +22 + ~<�u�s.h +> + +24 + g__BEGIN_DECLS + + +26 + ~<sys/uio.h +> + +27 + #__�ed_size_t + + + ) + +28 + ~<�ddef.h +> + +29 #ifde� +__USE_GNU + + +31 + ~<b�s/sig�t.h +> + +38 + ~<b�s/sock�.h +> + +40 #ifde� +__USE_BSD + + +43 + sosockaddr + + +45 + m�_�m�y +; + +46 + m�_d�a +[14]; + +54 + mSHUT_RD + = 0, + +55 + #SHUT_RD + +SHUT_RD + + + ) + +56 + mSHUT_WR +, + +57 + #SHUT_WR + +SHUT_WR + + + ) + +58 + mSHUT_RDWR + + +59 + #SHUT_RDWR + +SHUT_RDWR + + + ) + +68 #i� +def�ed + +__�lu�lus + || ! +__GNUC_PREREQ + (2, 7�|| !def�ed +__USE_GNU + + +69 + #__SOCKADDR_ARG + +sockaddr + * +__��ri� + + + ) + +70 + #__CONST_SOCKADDR_ARG + cڡ +sockaddr + * + + ) + +74 + #__SOCKADDR_ALLTYPES + \ + +75 + `__SOCKADDR_ONETYPE + ( +sockaddr +) \ + +76 + `__SOCKADDR_ONETYPE + ( +sockaddr_� +) \ + +77 + `__SOCKADDR_ONETYPE + ( +sockaddr_ax25 +) \ + +78 + `__SOCKADDR_ONETYPE + ( +sockaddr_dl +) \ + +79 + `__SOCKADDR_ONETYPE + ( +sockaddr_e� +) \ + +80 + `__SOCKADDR_ONETYPE + ( +sockaddr_� +) \ + +81 + `__SOCKADDR_ONETYPE + ( +sockaddr_�6 +) \ + +82 + `__SOCKADDR_ONETYPE + ( +sockaddr_��p +) \ + +83 + `__SOCKADDR_ONETYPE + ( +sockaddr_�x +) \ + +84 + `__SOCKADDR_ONETYPE + ( +sockaddr_iso +) \ + +85 + `__SOCKADDR_ONETYPE + ( +sockaddr_ns +) \ + +86 + `__SOCKADDR_ONETYPE + ( +sockaddr_un +) \ + +87 + `__SOCKADDR_ONETYPE + ( +sockaddr_x25 +) + + ) + +89 + #__SOCKADDR_ONETYPE +( +ty� +�ty� * +__��ri� + +__ +##ty�##__; + + ) + +90 uni� { + m__SOCKADDR_ALLTYPES + + +91 } + t__SOCKADDR_ARG + + t__��ibu�__ + (( + t__�����t_uni�__ +)); + +92 #unde� +__SOCKADDR_ONETYPE + + +93 + #__SOCKADDR_ONETYPE +( +ty� +�cڡ ty� * +__��ri� + +__ +##ty�##__; + + ) + +94 uni� { + m__SOCKADDR_ALLTYPES + + +95 } + t__CONST_SOCKADDR_ARG + + t__��ibu�__ + (( + t__�����t_uni�__ +)); + +96 #unde� +__SOCKADDR_ONETYPE + + +99 #ifde� +__USE_GNU + + +101 + smmsghdr + + +103 +msghdr + + mmsg_hdr +; + +104 + mmsg_�n +; + +113 + $sock� + ( +__doma� +, +__ty� +, +__��oc� +� +__THROW +; + +119 + $sock��� + ( +__doma� +, +__ty� +, +__��oc� +, + +120 +__fds +[2]� +__THROW +; + +123 + $b�d + ( +__fd +, +__CONST_SOCKADDR_ARG + +__addr +, +sock�n_t + +__�n +) + +124 +__THROW +; + +127 + $g�sock�me + ( +__fd +, +__SOCKADDR_ARG + +__addr +, + +128 +sock�n_t + * +__��ri� + +__�n +� +__THROW +; + +137 + `c��� + ( +__fd +, +__CONST_SOCKADDR_ARG + +__addr +, +sock�n_t + +__�n +); + +141 + $g����me + ( +__fd +, +__SOCKADDR_ARG + +__addr +, + +142 +sock�n_t + * +__��ri� + +__�n +� +__THROW +; + +149 +ssize_t + + `�nd + ( +__fd +, cڡ * +__buf +, +size_t + +__n +, +__�ags +); + +156 +ssize_t + + `�cv + ( +__fd +, * +__buf +, +size_t + +__n +, +__�ags +); + +163 +ssize_t + + `�ndto + ( +__fd +, cڡ * +__buf +, +size_t + +__n +, + +164 +__�ags +, +__CONST_SOCKADDR_ARG + +__addr +, + +165 +sock�n_t + +__addr_�n +); + +174 +ssize_t + + `�cv�om + ( +__fd +, * +__��ri� + +__buf +, +size_t + +__n +, + +175 +__�ags +, +__SOCKADDR_ARG + +__addr +, + +176 +sock�n_t + * +__��ri� + +__addr_�n +); + +184 +ssize_t + + `�ndmsg + ( +__fd +, cڡ +msghdr + * +__mes�ge +, + +185 +__�ags +); + +187 #ifde� +__USE_GNU + + +193 + `�ndmmsg + ( +__fd +, +mmsghdr + * +__vmes�ges +, + +194 +__v�n +, +__�ags +); + +202 +ssize_t + + `�cvmsg + ( +__fd +, +msghdr + * +__mes�ge +, +__�ags +); + +204 #ifde� +__USE_GNU + + +210 + `�cvmmsg + ( +__fd +, +mmsghdr + * +__vmes�ges +, + +211 +__v�n +, +__�ags +, + +212 cڡ +time�ec + * +__tmo +); + +219 + $g�sock�t + ( +__fd +, +__�v� +, +__݊ame +, + +220 * +__��ri� + +__�tv� +, + +221 +sock�n_t + * +__��ri� + +__ݎ� +� +__THROW +; + +226 + $�tsock�t + ( +__fd +, +__�v� +, +__݊ame +, + +227 cڡ * +__�tv� +, +sock�n_t + +__ݎ� +� +__THROW +; + +233 + $li�� + ( +__fd +, +__n +� +__THROW +; + +243 + `ac�� + ( +__fd +, +__SOCKADDR_ARG + +__addr +, + +244 +sock�n_t + * +__��ri� + +__addr_�n +); + +246 #ifde� +__USE_GNU + + +251 + `ac��4 + ( +__fd +, +__SOCKADDR_ARG + +__addr +, + +252 +sock�n_t + * +__��ri� + +__addr_�n +, +__�ags +); + +261 + $shutdown + ( +__fd +, +__how +� +__THROW +; + +264 #ifde� +__USE_XOPEN2K + + +266 + $sock�m�k + ( +__fd +� +__THROW +; + +270 #ifde� +__USE_MISC + + +274 + $isfdty� + ( +__fd +, +__fdty� +� +__THROW +; + +279 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__f�tify_fun�i� + + +280 + ~<b�s/sock�2.h +> + +283 +__END_DECLS + + + @/usr/include/sys/stat.h + +22 #i�def +_SYS_STAT_H + + +23 + #_SYS_STAT_H + 1 + + ) + +25 + ~<�u�s.h +> + +27 + ~<b�s/ty�s.h +> + +29 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_XOPEN2K + || def�ed +__USE_MISC + \ + +30 || +def�ed + + g__USE_ATFILE + + +31 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_XOPEN2K + + +32 + #__�ed_time_t + + + ) + +34 #i� +def�ed + +__USE_MISC + || def�ed +__USE_ATFILE + + +35 + #__�ed_time�ec + + + ) + +37 + ~<time.h +> + +40 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_XOPEN2K + + +43 #i�de� +__dev_t_def�ed + + +44 +__dev_t + + tdev_t +; + +45 + #__dev_t_def�ed + + + ) + +48 #i�de� +__gid_t_def�ed + + +49 +__gid_t + + tgid_t +; + +50 + #__gid_t_def�ed + + + ) + +53 #i�de� +__�o_t_def�ed + + +54 #i�de� +__USE_FILE_OFFSET64 + + +55 +__�o_t + + t�o_t +; + +57 +__�o64_t + + t�o_t +; + +59 + #__�o_t_def�ed + + + ) + +62 #i�de� +__mode_t_def�ed + + +63 +__mode_t + + tmode_t +; + +64 + #__mode_t_def�ed + + + ) + +67 #i�de� +__ƚk_t_def�ed + + +68 +__ƚk_t + + tƚk_t +; + +69 + #__ƚk_t_def�ed + + + ) + +72 #i�de� +__off_t_def�ed + + +73 #i�de� +__USE_FILE_OFFSET64 + + +74 +__off_t + + toff_t +; + +76 +__off64_t + + toff_t +; + +78 + #__off_t_def�ed + + + ) + +81 #i�de� +__uid_t_def�ed + + +82 +__uid_t + + tuid_t +; + +83 + #__uid_t_def�ed + + + ) + +87 #ifde� +__USE_UNIX98 + + +88 #i�de� +__blk�t_t_def�ed + + +89 #i�de� +__USE_FILE_OFFSET64 + + +90 +__blk�t_t + + tblk�t_t +; + +92 +__blk�t64_t + + tblk�t_t +; + +94 + #__blk�t_t_def�ed + + + ) + +97 #i�de� +__blksize_t_def�ed + + +98 +__blksize_t + + tblksize_t +; + +99 + #__blksize_t_def�ed + + + ) + +103 + g__BEGIN_DECLS + + +105 + ~<b�s/��.h +> + +107 #i� +def�ed + +__USE_BSD + || def�ed +__USE_MISC + || def�ed +__USE_XOPEN + + +108 + #S_IFMT + +__S_IFMT + + + ) + +109 + #S_IFDIR + +__S_IFDIR + + + ) + +110 + #S_IFCHR + +__S_IFCHR + + + ) + +111 + #S_IFBLK + +__S_IFBLK + + + ) + +112 + #S_IFREG + +__S_IFREG + + + ) + +113 #ifde� +__S_IFIFO + + +114 + #S_IFIFO + +__S_IFIFO + + + ) + +116 #ifde� +__S_IFLNK + + +117 + #S_IFLNK + +__S_IFLNK + + + ) + +119 #i�( +def�ed + +__USE_BSD + || def�ed +__USE_MISC + || def�ed +__USE_UNIX98 +) \ + +120 && +def�ed + + g__S_IFSOCK + + +121 + #S_IFSOCK + +__S_IFSOCK + + + ) + +127 + #__S_ISTYPE +( +mode +, +mask +�(((mode�& +__S_IFMT +�=�(mask)) + + ) + +129 + #S_ISDIR +( +mode +� + `__S_ISTYPE +((mode), +__S_IFDIR +) + + ) + +130 + #S_ISCHR +( +mode +� + `__S_ISTYPE +((mode), +__S_IFCHR +) + + ) + +131 + #S_ISBLK +( +mode +� + `__S_ISTYPE +((mode), +__S_IFBLK +) + + ) + +132 + #S_ISREG +( +mode +� + `__S_ISTYPE +((mode), +__S_IFREG +) + + ) + +133 #ifde� +__S_IFIFO + + +134 + #S_ISFIFO +( +mode +� + `__S_ISTYPE +((mode), +__S_IFIFO +) + + ) + +136 #ifde� +__S_IFLNK + + +137 + #S_ISLNK +( +mode +� + `__S_ISTYPE +((mode), +__S_IFLNK +) + + ) + +140 #i� +def�ed + +__USE_BSD + && !def�ed +__S_IFLNK + + +141 + #S_ISLNK +( +mode +�0 + + ) + +144 #i�( +def�ed + +__USE_BSD + || def�ed +__USE_UNIX98 + || def�ed +__USE_XOPEN2K +) \ + +145 && +def�ed + + g__S_IFSOCK + + +146 + #S_ISSOCK +( +mode +� + `__S_ISTYPE +((mode), +__S_IFSOCK +) + + ) + +147 #�i� +def�ed + +__USE_XOPEN2K + + +148 + #S_ISSOCK +( +mode +�0 + + ) + +155 #ifdef +__USE_POSIX199309 + + +156 + #S_TYPEISMQ +( +buf +� + `__S_TYPEISMQ +(buf) + + ) + +157 + #S_TYPEISSEM +( +buf +� + `__S_TYPEISSEM +(buf) + + ) + +158 + #S_TYPEISSHM +( +buf +� + `__S_TYPEISSHM +(buf) + + ) + +164 + #S_ISUID + +__S_ISUID + + + ) + +165 + #S_ISGID + +__S_ISGID + + + ) + +167 #i� +def�ed + +__USE_BSD + || def�ed +__USE_MISC + || def�ed +__USE_XOPEN + + +169 + #S_ISVTX + +__S_ISVTX + + + ) + +172 + #S_IRUSR + +__S_IREAD + + + ) + +173 + #S_IWUSR + +__S_IWRITE + + + ) + +174 + #S_IXUSR + +__S_IEXEC + + + ) + +176 + #S_IRWXU + ( +__S_IREAD +| +__S_IWRITE +| +__S_IEXEC +) + + ) + +178 #i� +def�ed + +__USE_MISC + && def�ed +__USE_BSD + + +179 + #S_IREAD + +S_IRUSR + + + ) + +180 + #S_IWRITE + +S_IWUSR + + + ) + +181 + #S_IEXEC + +S_IXUSR + + + ) + +184 + #S_IRGRP + ( +S_IRUSR + >> 3� + + ) + +185 + #S_IWGRP + ( +S_IWUSR + >> 3� + + ) + +186 + #S_IXGRP + ( +S_IXUSR + >> 3� + + ) + +188 + #S_IRWXG + ( +S_IRWXU + >> 3) + + ) + +190 + #S_IROTH + ( +S_IRGRP + >> 3� + + ) + +191 + #S_IWOTH + ( +S_IWGRP + >> 3� + + ) + +192 + #S_IXOTH + ( +S_IXGRP + >> 3� + + ) + +194 + #S_IRWXO + ( +S_IRWXG + >> 3) + + ) + +197 #ifdef +__USE_BSD + + +199 + #ACCESSPERMS + ( +S_IRWXU +| +S_IRWXG +| +S_IRWXO +� + + ) + +200 + #ALLPERMS + ( +S_ISUID +| +S_ISGID +| +S_ISVTX +| +S_IRWXU +| +S_IRWXG +| +S_IRWXO +) + + ) + +201 + #DEFFILEMODE + ( +S_IRUSR +| +S_IWUSR +| +S_IRGRP +| +S_IWGRP +| +S_IROTH +| +S_IWOTH +) + + ) + +203 + #S_BLKSIZE + 512 + + ) + +207 #i�de� +__USE_FILE_OFFSET64 + + +209 + $�� + (cڡ * +__��ri� + +__f�e +, + +210 +�� + * +__��ri� + +__buf +� +__THROW + + `__n�nu� + ((1, 2)); + +214 + $f�� + ( +__fd +, +�� + * +__buf +� +__THROW + + `__n�nu� + ((2)); + +216 #ifde� +__REDIRECT_NTH + + +217 + `__REDIRECT_NTH + ( +�� +, (cڡ * +__��ri� + +__f�e +, + +218 +�� + * +__��ri� + +__buf +), +��64 +) + +219 + `__n�nu� + ((1, 2)); + +220 + `__REDIRECT_NTH + ( +f�� +, ( +__fd +, +�� + * +__buf +), +f��64 +) + +221 + `__n�nu� + ((2)); + +223 + #�� + +��64 + + + ) + +224 + #f�� + +f��64 + + + ) + +227 #ifde� +__USE_LARGEFILE64 + + +228 + $��64 + (cڡ * +__��ri� + +__f�e +, + +229 +��64 + * +__��ri� + +__buf +� +__THROW + + `__n�nu� + ((1, 2)); + +230 + $f��64 + ( +__fd +, +��64 + * +__buf +� +__THROW + + `__n�nu� + ((2)); + +233 #ifde� +__USE_ATFILE + + +237 #i�de� +__USE_FILE_OFFSET64 + + +238 + $f��� + ( +__fd +, cڡ * +__��ri� + +__f�e +, + +239 +�� + * +__��ri� + +__buf +, +__�ag +) + +240 +__THROW + + `__n�nu� + ((2, 3)); + +242 #ifde� +__REDIRECT_NTH + + +243 + `__REDIRECT_NTH + ( +f��� +, ( +__fd +, cڡ * +__��ri� + +__f�e +, + +244 +�� + * +__��ri� + +__buf +, + +245 +__�ag +), + +246 +f���64 +� + `__n�nu� + ((2, 3)); + +248 + #f��� + +f���64 + + + ) + +252 #ifde� +__USE_LARGEFILE64 + + +253 + $f���64 + ( +__fd +, cڡ * +__��ri� + +__f�e +, + +254 +��64 + * +__��ri� + +__buf +, +__�ag +) + +255 +__THROW + + `__n�nu� + ((2, 3)); + +259 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_XOPEN2K + + +260 #i�de� +__USE_FILE_OFFSET64 + + +263 + $l�� + (cڡ * +__��ri� + +__f�e +, + +264 +�� + * +__��ri� + +__buf +� +__THROW + + `__n�nu� + ((1, 2)); + +266 #ifde� +__REDIRECT_NTH + + +267 + `__REDIRECT_NTH + ( +l�� +, + +268 (cڡ * +__��ri� + +__f�e +, + +269 +�� + * +__��ri� + +__buf +), +l��64 +) + +270 + `__n�nu� + ((1, 2)); + +272 + #l�� + +l��64 + + + ) + +275 #ifde� +__USE_LARGEFILE64 + + +276 + $l��64 + (cڡ * +__��ri� + +__f�e +, + +277 +��64 + * +__��ri� + +__buf +) + +278 +__THROW + + `__n�nu� + ((1, 2)); + +284 + $chmod + (cڡ * +__f�e +, +__mode_t + +__mode +) + +285 +__THROW + + `__n�nu� + ((1)); + +287 #ifde� +__USE_BSD + + +291 + $lchmod + (cڡ * +__f�e +, +__mode_t + +__mode +) + +292 +__THROW + + `__n�nu� + ((1)); + +296 #i� +def�ed + +__USE_BSD + || def�ed +__USE_POSIX + + +297 + $fchmod + ( +__fd +, +__mode_t + +__mode +� +__THROW +; + +300 #ifde� +__USE_ATFILE + + +303 + $fchmod� + ( +__fd +, cڡ * +__f�e +, +__mode_t + +__mode +, + +304 +__�ag +) + +305 +__THROW + + `__n�nu� + ((2)� +__wur +; + +312 +__mode_t + + $umask + ( +__mode_t + +__mask +� +__THROW +; + +314 #ifdef +__USE_GNU + + +317 +__mode_t + + $g�umask + (� +__THROW +; + +321 + $mkd� + (cڡ * +__�th +, +__mode_t + +__mode +) + +322 +__THROW + + `__n�nu� + ((1)); + +324 #ifde� +__USE_ATFILE + + +328 + $mkd�� + ( +__fd +, cڡ * +__�th +, +__mode_t + +__mode +) + +329 +__THROW + + `__n�nu� + ((2)); + +335 #i� +def�ed + +__USE_MISC + || def�ed +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +336 + $mknod + (cڡ * +__�th +, +__mode_t + +__mode +, +__dev_t + +__dev +) + +337 +__THROW + + `__n�nu� + ((1)); + +339 #ifde� +__USE_ATFILE + + +343 + $mknod� + ( +__fd +, cڡ * +__�th +, +__mode_t + +__mode +, + +344 +__dev_t + +__dev +� +__THROW + + `__n�nu� + ((2)); + +350 + $mkfifo + (cڡ * +__�th +, +__mode_t + +__mode +) + +351 +__THROW + + `__n�nu� + ((1)); + +353 #ifde� +__USE_ATFILE + + +357 + $mkfif�t + ( +__fd +, cڡ * +__�th +, +__mode_t + +__mode +) + +358 +__THROW + + `__n�nu� + ((2)); + +361 #ifde� +__USE_ATFILE + + +364 + $utim��t + ( +__fd +, cڡ * +__�th +, + +365 cڡ +time�ec + +__times +[2], + +366 +__�ags +) + +367 +__THROW + + `__n�nu� + ((2)); + +370 #ifde� +__USE_XOPEN2K8 + + +372 + $futim�s + ( +__fd +, cڡ +time�ec + +__times +[2]� +__THROW +; + +390 #i�de� +_STAT_VER + + +391 + #_STAT_VER + 0 + + ) + +393 #i�de� +_MKNOD_VER + + +394 + #_MKNOD_VER + 0 + + ) + +398 #i�de� +__USE_FILE_OFFSET64 + + +399 + $__fx�� + ( +__v� +, +__f�des +, +�� + * +__��_buf +) + +400 +__THROW + + `__n�nu� + ((3)); + +401 + $__x�� + ( +__v� +, cڡ * +__f��ame +, + +402 +�� + * +__��_buf +� +__THROW + + `__n�nu� + ((2, 3)); + +403 + $__lx�� + ( +__v� +, cڡ * +__f��ame +, + +404 +�� + * +__��_buf +� +__THROW + + `__n�nu� + ((2, 3)); + +405 + $__fx��� + ( +__v� +, +__f�des +, cڡ * +__f��ame +, + +406 +�� + * +__��_buf +, +__�ag +) + +407 +__THROW + + `__n�nu� + ((3, 4)); + +409 #ifde� +__REDIRECT_NTH + + +410 + `__REDIRECT_NTH + ( +__fx�� +, ( +__v� +, +__f�des +, + +411 +�� + * +__��_buf +), +__fx��64 +) + +412 + `__n�nu� + ((3)); + +413 + `__REDIRECT_NTH + ( +__x�� +, ( +__v� +, cڡ * +__f��ame +, + +414 +�� + * +__��_buf +), +__x��64 +) + +415 + `__n�nu� + ((2, 3)); + +416 + `__REDIRECT_NTH + ( +__lx�� +, ( +__v� +, cڡ * +__f��ame +, + +417 +�� + * +__��_buf +), +__lx��64 +) + +418 + `__n�nu� + ((2, 3)); + +419 + `__REDIRECT_NTH + ( +__fx��� +, ( +__v� +, +__f�des +, + +420 cڡ * +__f��ame +, + +421 +�� + * +__��_buf +, +__�ag +), + +422 +__fx���64 +� + `__n�nu� + ((3, 4)); + +425 + #__fx�� + +__fx��64 + + + ) + +426 + #__x�� + +__x��64 + + + ) + +427 + #__lx�� + +__lx��64 + + + ) + +431 #ifde� +__USE_LARGEFILE64 + + +432 + $__fx��64 + ( +__v� +, +__f�des +, +��64 + * +__��_buf +) + +433 +__THROW + + `__n�nu� + ((3)); + +434 + $__x��64 + ( +__v� +, cڡ * +__f��ame +, + +435 +��64 + * +__��_buf +� +__THROW + + `__n�nu� + ((2, 3)); + +436 + $__lx��64 + ( +__v� +, cڡ * +__f��ame +, + +437 +��64 + * +__��_buf +� +__THROW + + `__n�nu� + ((2, 3)); + +438 + $__fx���64 + ( +__v� +, +__f�des +, cڡ * +__f��ame +, + +439 +��64 + * +__��_buf +, +__�ag +) + +440 +__THROW + + `__n�nu� + ((3, 4)); + +442 + $__xmknod + ( +__v� +, cڡ * +__�th +, +__mode_t + +__mode +, + +443 +__dev_t + * +__dev +� +__THROW + + `__n�nu� + ((2, 4)); + +445 + $__xmknod� + ( +__v� +, +__fd +, cڡ * +__�th +, + +446 +__mode_t + +__mode +, +__dev_t + * +__dev +) + +447 +__THROW + + `__n�nu� + ((3, 5)); + +449 #ifde� +__USE_EXTERN_INLINES + + +452 +__ex��_�l�e + + +453 + `__NTH + ( + $�� + (cڡ * +__�th +, +�� + * +__��buf +)) + +455 + `__x�� + ( +_STAT_VER +, +__�th +, +__��buf +); + +456 + } +} + +458 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +459 +__ex��_�l�e + + +460 +__NTH + ( + $l�� + (cڡ * +__�th +, +�� + * +__��buf +)) + +462 + `__lx�� + ( +_STAT_VER +, +__�th +, +__��buf +); + +463 + } +} + +466 +__ex��_�l�e + + +467 +__NTH + ( + $f�� + ( +__fd +, +�� + * +__��buf +)) + +469 + `__fx�� + ( +_STAT_VER +, +__fd +, +__��buf +); + +470 + } +} + +472 #ifde� +__USE_ATFILE + + +473 +__ex��_�l�e + + +474 +__NTH + ( + $f��� + ( +__fd +, cڡ * +__f��ame +, +�� + * +__��buf +, + +475 +__�ag +)) + +477 + `__fx��� + ( +_STAT_VER +, +__fd +, +__f��ame +, +__��buf +, +__�ag +); + +478 + } +} + +481 #i� +def�ed + +__USE_MISC + || def�ed +__USE_BSD + + +482 +__ex��_�l�e + + +483 +__NTH + ( + $mknod + (cڡ * +__�th +, +__mode_t + +__mode +, +__dev_t + +__dev +)) + +485 + `__xmknod + ( +_MKNOD_VER +, +__�th +, +__mode +, & +__dev +); + +486 + } +} + +489 #ifde� +__USE_ATFILE + + +490 +__ex��_�l�e + + +491 +__NTH + ( + $mknod� + ( +__fd +, cڡ * +__�th +, +__mode_t + +__mode +, + +492 +__dev_t + +__dev +)) + +494 + `__xmknod� + ( +_MKNOD_VER +, +__fd +, +__�th +, +__mode +, & +__dev +); + +495 + } +} + +498 #i� +def�ed + +__USE_LARGEFILE64 + \ + +499 && (! +def�ed + + g__USE_FILE_OFFSET64 + \ + +500 || ( +def�ed + + g__REDIRECT_NTH + && def�ed + g__OPTIMIZE__ +)) + +501 +__ex��_�l�e + + +502 +__NTH + ( + $��64 + (cڡ * +__�th +, +��64 + * +__��buf +)) + +504 + `__x��64 + ( +_STAT_VER +, +__�th +, +__��buf +); + +505 + } +} + +507 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +508 +__ex��_�l�e + + +509 +__NTH + ( + $l��64 + (cڡ * +__�th +, +��64 + * +__��buf +)) + +511 + `__lx��64 + ( +_STAT_VER +, +__�th +, +__��buf +); + +512 + } +} + +515 +__ex��_�l�e + + +516 +__NTH + ( + $f��64 + ( +__fd +, +��64 + * +__��buf +)) + +518 + `__fx��64 + ( +_STAT_VER +, +__fd +, +__��buf +); + +519 + } +} + +521 #ifde� +__USE_ATFILE + + +522 +__ex��_�l�e + + +523 +__NTH + ( + $f���64 + ( +__fd +, cڡ * +__f��ame +, +��64 + * +__��buf +, + +524 +__�ag +)) + +526 + `__fx���64 + ( +_STAT_VER +, +__fd +, +__f��ame +, +__��buf +, +__�ag +); + +527 + } +} + +534 + g__END_DECLS + + + @/usr/include/sys/time.h + +18 #i�de� +_SYS_TIME_H + + +19 + #_SYS_TIME_H + 1 + + ) + +21 + ~<�u�s.h +> + +23 + ~<b�s/ty�s.h +> + +24 + #__�ed_time_t + + + ) + +25 + ~<time.h +> + +26 + #__�ed_timev� + + + ) + +27 + ~<b�s/time.h +> + +29 + ~<sys/���.h +> + +31 #i�de� +__su�c�ds_t_def�ed + + +32 +__su�c�ds_t + + tsu�c�ds_t +; + +33 + #__su�c�ds_t_def�ed + + + ) + +37 + g__BEGIN_DECLS + + +39 #ifde� +__USE_GNU + + +41 + #TIMEVAL_TO_TIMESPEC +( +tv +, +ts +) { \ + +42 ( +ts +)-> +tv_�c + = ( +tv +)->tv_sec; \ + +43 ( +ts +)-> +tv_n�c + = ( +tv +)-> +tv_u�c + * 1000; \ + +44 } + + ) + +45 + #TIMESPEC_TO_TIMEVAL +( +tv +, +ts +) { \ + +46 ( +tv +)-> +tv_�c + = ( +ts +)->tv_sec; \ + +47 ( +tv +)-> +tv_u�c + = ( +ts +)-> +tv_n�c + / 1000; \ + +48 } + + ) + +52 #ifde� +__USE_BSD + + +55 + stimez�e + + +57 + mtz_m�u�swe� +; + +58 + mtz_d�time +; + +61 +timez�e + * + t__��ri� + + t__timez�e_�r_t +; + +63 * + t__��ri� + + t__timez�e_�r_t +; + +71 + $g�timeofday + ( +timev� + * +__��ri� + +__tv +, + +72 +__timez�e_�r_t + +__tz +� +__THROW + + `__n�nu� + ((1)); + +74 #ifde� +__USE_BSD + + +77 + $��imeofday + (cڡ +timev� + * +__tv +, + +78 cڡ +timez�e + * +__tz +) + +79 +__THROW +; + +85 + $adjtime + (cڡ +timev� + * +__d�� +, + +86 +timev� + * +__�dd�� +� +__THROW +; + +91 + e__�im�_which + + +94 +ITIMER_REAL + = 0, + +95 + #ITIMER_REAL + +ITIMER_REAL + + + ) + +97 +ITIMER_VIRTUAL + = 1, + +98 + #ITIMER_VIRTUAL + +ITIMER_VIRTUAL + + + ) + +101 +ITIMER_PROF + = 2 + +102 + #ITIMER_PROF + +ITIMER_PROF + + + ) + +107 + s�im�v� + + +110 +timev� + +�_��rv� +; + +112 +timev� + +�_v�ue +; + +115 #i� +def�ed + +__USE_GNU + && !def�ed +__�lu�lus + + +118 +__�im�_which + + t__�im�_which_t +; + +120 + t__�im�_which_t +; + +125 + $g��im� + ( +__�im�_which_t + +__which +, + +126 +�im�v� + * +__v�ue +� +__THROW +; + +131 + $�t�im� + ( +__�im�_which_t + +__which +, + +132 cڡ +�im�v� + * +__��ri� + +__�w +, + +133 +�im�v� + * +__��ri� + +__�d +� +__THROW +; + +138 + $utimes + (cڡ * +__f�e +, cڡ +timev� + +__tvp +[2]) + +139 +__THROW + + `__n�nu� + ((1)); + +141 #ifde� +__USE_BSD + + +143 + $lutimes + (cڡ * +__f�e +, cڡ +timev� + +__tvp +[2]) + +144 +__THROW + + `__n�nu� + ((1)); + +147 + $futimes + ( +__fd +, cڡ +timev� + +__tvp +[2]� +__THROW +; + +150 #ifde� +__USE_GNU + + +154 + $futime�t + ( +__fd +, cڡ * +__f�e +, + +155 cڡ +timev� + +__tvp +[2]� +__THROW +; + +159 #ifde� +__USE_BSD + + +162 + #tim�is�t +( +tvp +�(�vp)-> +tv_�c + || (tvp)-> +tv_u�c +) + + ) + +163 + #tim���r +( +tvp +�(�vp)-> +tv_�c + = (tvp)-> +tv_u�c + = 0) + + ) + +164 + #tim�cmp +( +a +, +b +, +CMP +) \ + +165 ((( +a +)-> +tv_�c + =�( +b +)->tv_sec) ? \ + +166 (( +a +)-> +tv_u�c + + `CMP + ( +b +)->tv_usec) : \ + +167 (( +a +)-> +tv_�c + + `CMP + ( +b +)->tv_�c)) + + ) + +168 + #tim�add +( +a +, +b +, +�su� +) \ + +170 ( +�su� +)-> +tv_�c + = ( +a +)->tv_��+ ( +b +)->tv_sec; \ + +171 ( +�su� +)-> +tv_u�c + = ( +a +)->tv_u��+ ( +b +)->tv_usec; \ + +172 i�(( +�su� +)-> +tv_u�c + >= 1000000) \ + +174 ++( +�su� +)-> +tv_�c +; \ + +175 ( +�su� +)-> +tv_u�c + -= 1000000; \ + +177 + } +} 0) + + ) + +178 + #tim�sub +( +a +, +b +, +�su� +) \ + +180 ( +�su� +)-> +tv_�c + = ( +a +)->tv_��- ( +b +)->tv_sec; \ + +181 ( +�su� +)-> +tv_u�c + = ( +a +)->tv_u��- ( +b +)->tv_usec; \ + +182 i�(( +�su� +)-> +tv_u�c + < 0) { \ + +183 --( +�su� +)-> +tv_�c +; \ + +184 ( +�su� +)-> +tv_u�c + += 1000000; \ + +186 } 0) + + ) + +189 + g__END_DECLS + + + @/usr/include/sys/types.h + +22 #i�def +_SYS_TYPES_H + + +23 + #_SYS_TYPES_H + 1 + + ) + +25 + ~<�u�s.h +> + +27 + g__BEGIN_DECLS + + +29 + ~<b�s/ty�s.h +> + +31 #ifdef +__USE_BSD + + +32 #i�de� +__u_ch�_def�ed + + +33 +__u_ch� + + tu_ch� +; + +34 +__u_sh�t + + tu_sh�t +; + +35 +__u_�t + + tu_�t +; + +36 +__u_l�g + + tu_l�g +; + +37 +__quad_t + + tquad_t +; + +38 +__u_quad_t + + tu_quad_t +; + +39 +__fsid_t + + tfsid_t +; + +40 + #__u_ch�_def�ed + + + ) + +44 +__loff_t + + tloff_t +; + +46 #i�de� +__�o_t_def�ed + + +47 #i�de� +__USE_FILE_OFFSET64 + + +48 +__�o_t + + t�o_t +; + +50 +__�o64_t + + t�o_t +; + +52 + #__�o_t_def�ed + + + ) + +54 #i� +def�ed + +__USE_LARGEFILE64 + && !def�ed +__�o64_t_def�ed + + +55 +__�o64_t + + t�o64_t +; + +56 + #__�o64_t_def�ed + + + ) + +59 #i�de� +__dev_t_def�ed + + +60 +__dev_t + + tdev_t +; + +61 + #__dev_t_def�ed + + + ) + +64 #i�de� +__gid_t_def�ed + + +65 +__gid_t + + tgid_t +; + +66 + #__gid_t_def�ed + + + ) + +69 #i�de� +__mode_t_def�ed + + +70 +__mode_t + + tmode_t +; + +71 + #__mode_t_def�ed + + + ) + +74 #i�de� +__ƚk_t_def�ed + + +75 +__ƚk_t + + tƚk_t +; + +76 + #__ƚk_t_def�ed + + + ) + +79 #i�de� +__uid_t_def�ed + + +80 +__uid_t + + tuid_t +; + +81 + #__uid_t_def�ed + + + ) + +84 #i�de� +__off_t_def�ed + + +85 #i�de� +__USE_FILE_OFFSET64 + + +86 +__off_t + + toff_t +; + +88 +__off64_t + + toff_t +; + +90 + #__off_t_def�ed + + + ) + +92 #i� +def�ed + +__USE_LARGEFILE64 + && !def�ed +__off64_t_def�ed + + +93 +__off64_t + + toff64_t +; + +94 + #__off64_t_def�ed + + + ) + +97 #i�de� +__pid_t_def�ed + + +98 +__pid_t + + tpid_t +; + +99 + #__pid_t_def�ed + + + ) + +102 #i�( +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN + || def�ed +__USE_XOPEN2K8 +) \ + +103 && ! +def�ed + +__id_t_def�ed + + +104 +__id_t + + tid_t +; + +105 + #__id_t_def�ed + + + ) + +108 #i�de� +__ssize_t_def�ed + + +109 +__ssize_t + + tssize_t +; + +110 + #__ssize_t_def�ed + + + ) + +113 #ifdef +__USE_BSD + + +114 #i�de� +__daddr_t_def�ed + + +115 +__daddr_t + + tdaddr_t +; + +116 +__�ddr_t + + t�ddr_t +; + +117 + #__daddr_t_def�ed + + + ) + +121 #i�( +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN +�&& !def�ed +__key_t_def�ed + + +122 +__key_t + + tkey_t +; + +123 + #__key_t_def�ed + + + ) + +126 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_XOPEN2K8 + + +127 + #__�ed_�ock_t + + + ) + +129 + #__�ed_time_t + + + ) + +130 + #__�ed_tim�_t + + + ) + +131 + #__�ed_�ockid_t + + + ) + +132 + ~<time.h +> + +134 #ifde� +__USE_XOPEN + + +135 #i�de� +__u�c�ds_t_def�ed + + +136 +__u�c�ds_t + + tu�c�ds_t +; + +137 + #__u�c�ds_t_def�ed + + + ) + +139 #i�de� +__su�c�ds_t_def�ed + + +140 +__su�c�ds_t + + tsu�c�ds_t +; + +141 + #__su�c�ds_t_def�ed + + + ) + +145 + #__�ed_size_t + + + ) + +146 + ~<�ddef.h +> + +148 #ifde� +__USE_MISC + + +150 + tul�g +; + +151 + tush�t +; + +152 + tu�t +; + +157 #i�! +__GNUC_PREREQ + (2, 7) + +160 #i�de� +__�t8_t_def�ed + + +161 + #__�t8_t_def�ed + + + ) + +162 + t�t8_t +; + +163 + t�t16_t +; + +164 + t�t32_t +; + +165 #i� +__WORDSIZE + == 64 + +166 + t�t64_t +; + +168 +__ex�nsi�__ + + t�t64_t +; + +173 + tu_�t8_t +; + +174 + tu_�t16_t +; + +175 + tu_�t32_t +; + +176 #i� +__WORDSIZE + == 64 + +177 + tu_�t64_t +; + +179 +__ex�nsi�__ + + tu_�t64_t +; + +182 + t�gi��_t +; + +187 + #__�tN_t +( +N +, +MODE +) \ + +188 ## + tN +## + t_t + + t__��ibu�__ + (( + t__mode__ + ( + tMODE +))) + + ) + +189 + t__u_�tN_t +( + tN +, + tMODE +) \ + +190 + tu_�t +## + tN +## + t_t + + t__��ibu�__ + (( + t__mode__ + ( + tMODE +))) + + ) + +192 #i�de� + t__�t8_t_def�ed + + +193 + t__�t8_t_def�ed + + + ) + +194 + t__�tN_t + (8, + t__QI__ +); + +195 +__�tN_t + (16, +__HI__ +); + +196 +__�tN_t + (32, +__SI__ +); + +197 +__�tN_t + (64, +__DI__ +); + +200 +__u_�tN_t + (8, +__QI__ +); + +201 +__u_�tN_t + (16, +__HI__ +); + +202 +__u_�tN_t + (32, +__SI__ +); + +203 +__u_�tN_t + (64, +__DI__ +); + +205 + t�gi��_t + + t__��ibu�__ + (( + t__mode__ + ( + t__w�d__ +))); + +211 + #__BIT_TYPES_DEFINED__ + 1 + + ) + +214 #ifdef +__USE_BSD + + +216 + ~<�d�n.h +> + +219 + ~<sys/���.h +> + +222 + ~<sys/sysma�os.h +> + +226 #i�( +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K8 +) \ + +227 && ! +def�ed + +__blksize_t_def�ed + + +228 +__blksize_t + + tblksize_t +; + +229 + #__blksize_t_def�ed + + + ) + +233 #i�de� +__USE_FILE_OFFSET64 + + +234 #i�de� +__blk�t_t_def�ed + + +235 +__blk�t_t + + tblk�t_t +; + +236 + #__blk�t_t_def�ed + + + ) + +238 #i�de� +__fsblk�t_t_def�ed + + +239 +__fsblk�t_t + + tfsblk�t_t +; + +240 + #__fsblk�t_t_def�ed + + + ) + +242 #i�de� +__fsf��t_t_def�ed + + +243 +__fsf��t_t + + tfsf��t_t +; + +244 + #__fsf��t_t_def�ed + + + ) + +247 #i�de� +__blk�t_t_def�ed + + +248 +__blk�t64_t + + tblk�t_t +; + +249 + #__blk�t_t_def�ed + + + ) + +251 #i�de� +__fsblk�t_t_def�ed + + +252 +__fsblk�t64_t + + tfsblk�t_t +; + +253 + #__fsblk�t_t_def�ed + + + ) + +255 #i�de� +__fsf��t_t_def�ed + + +256 +__fsf��t64_t + + tfsf��t_t +; + +257 + #__fsf��t_t_def�ed + + + ) + +261 #ifde� +__USE_LARGEFILE64 + + +262 +__blk�t64_t + + tblk�t64_t +; + +263 +__fsblk�t64_t + + tfsblk�t64_t +; + +264 +__fsf��t64_t + + tfsf��t64_t +; + +269 #i� +def�ed + +__USE_POSIX199506 + || def�ed +__USE_UNIX98 + + +270 + ~<b�s/�h�adty�s.h +> + +273 + g__END_DECLS + + + @/usr/include/sys/un.h + +18 #i�def +_SYS_UN_H + + +19 + #_SYS_UN_H + 1 + + ) + +21 + ~<sys/cdefs.h +> + +24 + ~<b�s/sockaddr.h +> + +26 +__BEGIN_DECLS + + +29 + ssockaddr_un + + +31 +__SOCKADDR_COMMON + ( +sun_ +); + +32 + msun_�th +[108]; + +36 #ifde� +__USE_MISC + + +37 + ~<�r�g.h +> + +40 + #SUN_LEN +( +�r +�(( +size_t +�((( +sockaddr_un + *�0)-> +sun_�th +) \ + +41 + + `��� + (( +�r +)-> +sun_�th +)) + + ) + +44 + g__END_DECLS + + + @/usr/include/sys/wait.h + +22 #i�def +_SYS_WAIT_H + + +23 + #_SYS_WAIT_H + 1 + + ) + +25 + ~<�u�s.h +> + +27 + g__BEGIN_DECLS + + +29 + ~<sig�l.h +> + +32 #i�! +def�ed + +_STDLIB_H + || (!def�ed +__USE_XOPEN + && !def�ed +__USE_XOPEN2K8 +) + +35 + ~<b�s/wa��ags.h +> + +37 #ifdef +__USE_BSD + + +42 #i� +def�ed + +__GNUC__ + && !def�ed +__�lu�lus + + +43 + #__WAIT_INT +( +��us +) \ + +44 ( + `__ex�nsi�__ + (((uni� { + `__ty�of +( +��us +� +__� +; +__i +; }) \ + +45 { . +__� + = ( +��us +�}). +__i +)) + + ) + +47 + #__WAIT_INT +( +��us +�(*(cڡ *�&(��us)) + + ) + +55 #i�! +def�ed + +__GNUC__ + || __GNUC__ < 2 || def�ed +__�lu�lus + + +56 + #__WAIT_STATUS + * + + ) + +57 + #__WAIT_STATUS_DEFN + * + + ) + +62 +wa� + * + m__u�r +; + +63 * + m__�� +; + +64 } + t__WAIT_STATUS + + t__��ibu�__ + (( + t__�����t_uni�__ +)); + +65 + #__WAIT_STATUS_DEFN + * + + ) + +70 + #__WAIT_INT +( +��us +�(��us) + + ) + +71 + #__WAIT_STATUS + * + + ) + +72 + #__WAIT_STATUS_DEFN + * + + ) + +77 + ~<b�s/wa���us.h +> + +79 + #WEXITSTATUS +( +��us +� + `__WEXITSTATUS + ( + `__WAIT_INT + (��us)) + + ) + +80 + #WTERMSIG +( +��us +� + `__WTERMSIG + ( + `__WAIT_INT + (��us)) + + ) + +81 + #WSTOPSIG +( +��us +� + `__WSTOPSIG + ( + `__WAIT_INT + (��us)) + + ) + +82 + #WIFEXITED +( +��us +� + `__WIFEXITED + ( + `__WAIT_INT + (��us)) + + ) + +83 + #WIFSIGNALED +( +��us +� + `__WIFSIGNALED + ( + `__WAIT_INT + (��us)) + + ) + +84 + #WIFSTOPPED +( +��us +� + `__WIFSTOPPED + ( + `__WAIT_INT + (��us)) + + ) + +85 #ifde� +__WIFCONTINUED + + +86 + #WIFCONTINUED +( +��us +� + `__WIFCONTINUED + ( + `__WAIT_INT + (��us)) + + ) + +90 #ifdef +__USE_BSD + + +91 + #WCOREFLAG + +__WCOREFLAG + + + ) + +92 + #WCOREDUMP +( +��us +� + `__WCOREDUMP + ( + `__WAIT_INT + (��us)) + + ) + +93 + #W_EXITCODE +( +�t +, +sig +� + `__W_EXITCODE + (�t, sig) + + ) + +94 + #W_STOPCODE +( +sig +� + `__W_STOPCODE + (sig) + + ) + +102 +__pid_t + +wa� + ( +__WAIT_STATUS + +__��_loc +); + +104 #ifdef +__USE_BSD + + +106 + #WAIT_ANY + (-1� + + ) + +107 + #WAIT_MYPGRP + 0 + + ) + +125 +__pid_t + +wa�pid + (__pid_� +__pid +, * +__��_loc +, +__�ti�s +); + +127 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN + || def�ed +__USE_XOPEN2K8 + + +128 #i�de� +__id_t_def�ed + + +129 + ~<b�s/ty�s.h +> + +130 +__id_t + + tid_t +; + +131 + #__id_t_def�ed + + + ) + +134 + #__�ed_sig�fo_t + + + ) + +135 + ~<b�s/sig�fo.h +> + +148 +wa�id + ( +idty�_t + +__idty� +, +__id_t + +__id +, +sig�fo_t + * +__�f� +, + +149 +__�ti�s +); + +152 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +155 + gru�ge +; + +162 +__pid_t + + $wa�3 + ( +__WAIT_STATUS + +__��_loc +, +__�ti�s +, + +163 +ru�ge + * +__u�ge +� +__THROWNL +; + +166 #ifde� +__USE_BSD + + +168 +__pid_t + + $wa�4 + ( +__pid_t + +__pid +, +__WAIT_STATUS + +__��_loc +, +__�ti�s +, + +169 +ru�ge + * +__u�ge +� +__THROWNL +; + +173 +__END_DECLS + + + @/usr/include/termios.h + +22 #i�def +_TERMIOS_H + + +23 + #_TERMIOS_H + 1 + + ) + +25 + ~<�u�s.h +> + +26 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K8 + + +28 + ~<b�s/ty�s.h +> + +29 #i�de� +__pid_t_def�ed + + +30 +__pid_t + + tpid_t +; + +31 + #__pid_t_def�ed + + + ) + +35 + g__BEGIN_DECLS + + +39 + ~<b�s/�rmios.h +> + +41 #ifde� +__USE_BSD + + +44 + #CCEQ +( +v� +, +c +�((c�=�(v��&& (v��!� +_POSIX_VDISABLE +) + + ) + +48 +��d_t + + $cfg�o��d + (cڡ +�rmios + * +__�rmios_p +� +__THROW +; + +51 +��d_t + + $cfg�i��d + (cڡ +�rmios + * +__�rmios_p +� +__THROW +; + +54 + $cf�to��d + ( +�rmios + * +__�rmios_p +, +��d_t + +__��d +� +__THROW +; + +57 + $cf�ti��d + ( +�rmios + * +__�rmios_p +, +��d_t + +__��d +� +__THROW +; + +59 #ifdef +__USE_BSD + + +61 + $cf�t��d + ( +�rmios + * +__�rmios_p +, +��d_t + +__��d +� +__THROW +; + +66 + $tcg��� + ( +__fd +, +�rmios + * +__�rmios_p +� +__THROW +; + +70 + $tc���r + ( +__fd +, +__�tiڮ_a�i�s +, + +71 cڡ +�rmios + * +__�rmios_p +� +__THROW +; + +74 #ifdef +__USE_BSD + + +76 + $cfmak�aw + ( +�rmios + * +__�rmios_p +� +__THROW +; + +80 + $tc�ndb�ak + ( +__fd +, +__du�ti� +� +__THROW +; + +86 + `tcd�� + ( +__fd +); + +90 + $tc�ush + ( +__fd +, +__queue_���� +� +__THROW +; + +94 + $tc�ow + ( +__fd +, +__a�i� +� +__THROW +; + +97 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K8 + + +99 +__pid_t + + $tcg�sid + ( +__fd +� +__THROW +; + +103 #ifde� +__USE_BSD + + +104 + ~<sys/�yde�u�s.h +> + +107 +__END_DECLS + + + @/usr/include/time.h + +22 #i�def +_TIME_H + + +24 #i�(! +def�ed + +__�ed_time_t + && !def�ed +__�ed_�ock_t + && \ + +25 ! +def�ed + + g__�ed_time�ec +) + +26 + #_TIME_H + 1 + + ) + +27 + ~<�u�s.h +> + +29 + g__BEGIN_DECLS + + +33 #ifdef +_TIME_H + + +35 + #__�ed_size_t + + + ) + +36 + #__�ed_NULL + + + ) + +37 + ~<�ddef.h +> + +41 + ~<b�s/time.h +> + +44 #i�! +def�ed + +__STRICT_ANSI__ + && !def�ed +__USE_XOPEN2K + + +45 #i�de� +CLK_TCK + + +46 + #CLK_TCK + +CLOCKS_PER_SEC + + + ) + +52 #i�! +def�ed + +__�ock_t_def�ed + && (def�ed +_TIME_H + || def�ed +__�ed_�ock_t +) + +53 + #__�ock_t_def�ed + 1 + + ) + +55 + ~<b�s/ty�s.h +> + +57 +__BEGIN_NAMESPACE_STD + + +59 +__�ock_t + + t�ock_t +; + +60 + g__END_NAMESPACE_STD + + +61 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_POSIX + || def�ed +__USE_MISC + + +62 + $__USING_NAMESPACE_STD +( +�ock_t +) + +66 #unde� +__�ed_�ock_t + + +68 #i�! +def�ed + +__time_t_def�ed + && (def�ed +_TIME_H + || def�ed +__�ed_time_t +) + +69 + #__time_t_def�ed + 1 + + ) + +71 + ~<b�s/ty�s.h +> + +73 +__BEGIN_NAMESPACE_STD + + +75 +__time_t + + ttime_t +; + +76 +__END_NAMESPACE_STD + + +77 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + || def�ed +__USE_SVID + + +78 + $__USING_NAMESPACE_STD +( +time_t +) + +82 #unde� +__�ed_time_t + + +84 #i�! +def�ed + +__�ockid_t_def�ed + && \ + +85 (( +def�ed + +_TIME_H + && def�ed +__USE_POSIX199309 +�|| def�ed +__�ed_�ockid_t +) + +86 + #__�ockid_t_def�ed + 1 + + ) + +88 + ~<b�s/ty�s.h +> + +91 +__�ockid_t + + t�ockid_t +; + +94 #unde� +__�ockid_time_t + + +96 #i�! +def�ed + +__tim�_t_def�ed + && \ + +97 (( +def�ed + +_TIME_H + && def�ed +__USE_POSIX199309 +�|| def�ed +__�ed_tim�_t +) + +98 + #__tim�_t_def�ed + 1 + + ) + +100 + ~<b�s/ty�s.h +> + +103 +__tim�_t + + ttim�_t +; + +106 #unde� +__�ed_tim�_t + + +109 #i�(! +def�ed + +__time�ec_def�ed + \ + +110 && (( +def�ed + +_TIME_H + \ + +111 && ( +def�ed + +__USE_POSIX199309 + || def�ed +__USE_MISC + \ + +112 || +def�ed + +__USE_ISOC11 +)) \ + +113 || +def�ed + +__�ed_time�ec +)) + +114 + #__time�ec_def�ed + 1 + + ) + +116 + ~<b�s/ty�s.h +> + +120 + stime�ec + + +122 +__time_t + +tv_�c +; + +123 +__sys��_��g_t + +tv_n�c +; + +127 #unde� +__�ed_time�ec + + +130 #ifdef +_TIME_H + + +131 +__BEGIN_NAMESPACE_STD + + +133 + stm + + +135 +tm_�c +; + +136 +tm_m� +; + +137 +tm_hour +; + +138 +tm_mday +; + +139 +tm_m� +; + +140 +tm_y�r +; + +141 +tm_wday +; + +142 +tm_yday +; + +143 +tm_isd� +; + +145 #ifdef +__USE_BSD + + +146 +tm_gmtoff +; + +147 cڡ * +tm_z�e +; + +149 +__tm_gmtoff +; + +150 cڡ * +__tm_z�e +; + +153 +__END_NAMESPACE_STD + + +154 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_POSIX + || def�ed +__USE_MISC + + +155 + $__USING_NAMESPACE_STD +( +tm +) + +159 #ifde� +__USE_POSIX199309 + + +161 + s�im��ec + + +163 +time�ec + +�_��rv� +; + +164 +time�ec + +�_v�ue +; + +168 +sigev�t +; + +172 #ifde� +__USE_XOPEN2K + + +173 #i�de� +__pid_t_def�ed + + +174 +__pid_t + + tpid_t +; + +175 + #__pid_t_def�ed + + + ) + +180 #ifde� +__USE_ISOC11 + + +182 + #TIME_UTC + 1 + + ) + +186 +__BEGIN_NAMESPACE_STD + + +189 +�ock_t + + $�ock + (� +__THROW +; + +192 +time_t + + $time + ( +time_t + * +__tim� +� +__THROW +; + +195 + $dif�ime + ( +time_t + +__time1 +,�ime_� +__time0 +) + +196 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +199 +time_t + + $mktime + ( +tm + * +__� +� +__THROW +; + +205 +size_t + + $�r�ime + (* +__��ri� + +__s +, +size_t + +__maxsize +, + +206 cڡ * +__��ri� + +__f�m� +, + +207 cڡ +tm + * +__��ri� + +__� +� +__THROW +; + +208 +__END_NAMESPACE_STD + + +210 #ifde� +__USE_XOPEN + + +213 * + $��time + (cڡ * +__��ri� + +__s +, + +214 cڡ * +__��ri� + +__fmt +, +tm + * +__� +) + +215 +__THROW +; + +218 #ifde� +__USE_XOPEN2K8 + + +221 + ~<xlo��.h +> + +223 +size_t + + $�r�ime_l + (* +__��ri� + +__s +, +size_t + +__maxsize +, + +224 cڡ * +__��ri� + +__f�m� +, + +225 cڡ +tm + * +__��ri� + +__� +, + +226 +__lo��_t + +__loc +� +__THROW +; + +229 #ifde� +__USE_GNU + + +230 * + $��time_l + (cڡ * +__��ri� + +__s +, + +231 cڡ * +__��ri� + +__fmt +, +tm + * +__� +, + +232 +__lo��_t + +__loc +� +__THROW +; + +236 +__BEGIN_NAMESPACE_STD + + +239 +tm + * + $gmtime + (cڡ +time_t + * +__tim� +� +__THROW +; + +243 +tm + * + $lo��ime + (cڡ +time_t + * +__tim� +� +__THROW +; + +244 +__END_NAMESPACE_STD + + +246 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +249 +tm + * + $gmtime_r + (cڡ +time_t + * +__��ri� + +__tim� +, + +250 +tm + * +__��ri� + +__� +� +__THROW +; + +254 +tm + * + $lo��ime_r + (cڡ +time_t + * +__��ri� + +__tim� +, + +255 +tm + * +__��ri� + +__� +� +__THROW +; + +258 +__BEGIN_NAMESPACE_STD + + +261 * + $as�ime + (cڡ +tm + * +__� +� +__THROW +; + +264 * + $�ime + (cڡ +time_t + * +__tim� +� +__THROW +; + +265 +__END_NAMESPACE_STD + + +267 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +272 * + $as�ime_r + (cڡ +tm + * +__��ri� + +__� +, + +273 * +__��ri� + +__buf +� +__THROW +; + +276 * + $�ime_r + (cڡ +time_t + * +__��ri� + +__tim� +, + +277 * +__��ri� + +__buf +� +__THROW +; + +282 * +__tz�me +[2]; + +283 +__daylight +; + +284 +__timez�e +; + +287 #ifdef +__USE_POSIX + + +289 * +tz�me +[2]; + +293 + $tz�t + (� +__THROW +; + +296 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN + + +297 +daylight +; + +298 +timez�e +; + +301 #ifde� +__USE_SVID + + +304 + $�ime + (cڡ +time_t + * +__wh� +� +__THROW +; + +310 + #__i��p +( +y�r +) \ + +311 (( +y�r +�% 4 =�0 && ((y�r�% 100 !�0 || (y�r�% 400 =�0)) + + ) + +314 #ifde� +__USE_MISC + + +319 +time_t + + $timegm + ( +tm + * +__� +� +__THROW +; + +322 +time_t + + $tim�o�l + ( +tm + * +__� +� +__THROW +; + +325 + $dysize + ( +__y�r +� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +329 #ifde� +__USE_POSIX199309 + + +334 + `�no��p + (cڡ +time�ec + * +__�que�ed_time +, + +335 +time�ec + * +__�ma��g +); + +339 + $�ock_g��s + ( +�ockid_t + +__�ock_id +, +time�ec + * +__�s +� +__THROW +; + +342 + $�ock_g�time + ( +�ockid_t + +__�ock_id +, +time�ec + * +__� +� +__THROW +; + +345 + $�ock_��ime + ( +�ockid_t + +__�ock_id +, cڡ +time�ec + * +__� +) + +346 +__THROW +; + +348 #ifde� +__USE_XOPEN2K + + +353 + `�ock_�no��p + ( +�ockid_t + +__�ock_id +, +__�ags +, + +354 cڡ +time�ec + * +__�q +, + +355 +time�ec + * +__�m +); + +358 + $�ock_g��u�ockid + ( +pid_t + +__pid +, +�ockid_t + * +__�ock_id +� +__THROW +; + +363 + $tim�_��� + ( +�ockid_t + +__�ock_id +, + +364 +sigev�t + * +__��ri� + +__evp +, + +365 +tim�_t + * +__��ri� + +__tim�id +� +__THROW +; + +368 + $tim�_d��e + ( +tim�_t + +__tim�id +� +__THROW +; + +371 + $tim�_��ime + ( +tim�_t + +__tim�id +, +__�ags +, + +372 cڡ +�im��ec + * +__��ri� + +__v�ue +, + +373 +�im��ec + * +__��ri� + +__ov�ue +� +__THROW +; + +376 + $tim�_g�time + ( +tim�_t + +__tim�id +, +�im��ec + * +__v�ue +) + +377 +__THROW +; + +380 + $tim�_g�ov�run + ( +tim�_t + +__tim�id +� +__THROW +; + +384 #ifde� +__USE_ISOC11 + + +386 + $time�ec_g� + ( +time�ec + * +__ts +, +__ba� +) + +387 +__THROW + + `__n�nu� + ((1)); + +391 #ifde� +__USE_XOPEN_EXTENDED + + +403 +g�d�e_�r +; + +412 +tm + * + `g�d�e + (cڡ * +__�r�g +); + +415 #ifde� +__USE_GNU + + +426 + `g�d�e_r + (cڡ * +__��ri� + +__�r�g +, + +427 +tm + * +__��ri� + +__�sbu� +); + +430 +__END_DECLS + + + @/usr/include/unistd.h + +22 #i�def +_UNISTD_H + + +23 + #_UNISTD_H + 1 + + ) + +25 + ~<�u�s.h +> + +27 + g__BEGIN_DECLS + + +32 #ifde� +__USE_XOPEN2K8 + + +34 + #_POSIX_VERSION + 200809L + + ) + +35 #�i� +def�ed + +__USE_XOPEN2K + + +37 + #_POSIX_VERSION + 200112L + + ) + +38 #�i� +def�ed + +__USE_POSIX199506 + + +40 + #_POSIX_VERSION + 199506L + + ) + +41 #�i� +def�ed + +__USE_POSIX199309 + + +43 + #_POSIX_VERSION + 199309L + + ) + +46 + #_POSIX_VERSION + 199009L + + ) + +52 #ifde� +__USE_XOPEN2K8 + + +53 + #__POSIX2_THIS_VERSION + 200809L + + ) + +55 #�i� +def�ed + +__USE_XOPEN2K + + +57 + #__POSIX2_THIS_VERSION + 200112L + + ) + +58 #�i� +def�ed + +__USE_POSIX199506 + + +60 + #__POSIX2_THIS_VERSION + 199506L + + ) + +63 + #__POSIX2_THIS_VERSION + 199209L + + ) + +67 + #_POSIX2_VERSION + +__POSIX2_THIS_VERSION + + + ) + +71 + #_POSIX2_C_BIND + +__POSIX2_THIS_VERSION + + + ) + +75 + #_POSIX2_C_DEV + +__POSIX2_THIS_VERSION + + + ) + +79 + #_POSIX2_SW_DEV + +__POSIX2_THIS_VERSION + + + ) + +83 + #_POSIX2_LOCALEDEF + +__POSIX2_THIS_VERSION + + + ) + +86 #ifde� +__USE_XOPEN2K8 + + +87 + #_XOPEN_VERSION + 700 + + ) + +88 #�i� +def�ed + +__USE_XOPEN2K + + +89 + #_XOPEN_VERSION + 600 + + ) + +90 #�i� +def�ed + +__USE_UNIX98 + + +91 + #_XOPEN_VERSION + 500 + + ) + +93 + #_XOPEN_VERSION + 4 + + ) + +97 + #_XOPEN_XCU_VERSION + 4 + + ) + +100 + #_XOPEN_XPG2 + 1 + + ) + +101 + #_XOPEN_XPG3 + 1 + + ) + +102 + #_XOPEN_XPG4 + 1 + + ) + +105 + #_XOPEN_UNIX + 1 + + ) + +108 + #_XOPEN_CRYPT + 1 + + ) + +112 + #_XOPEN_ENH_I18N + 1 + + ) + +115 + #_XOPEN_LEGACY + 1 + + ) + +202 + ~<b�s/posix_�t.h +> + +205 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K + + +206 + ~<b�s/�v��m�ts.h +> + +210 + #STDIN_FILENO + 0 + + ) + +211 + #STDOUT_FILENO + 1 + + ) + +212 + #STDERR_FILENO + 2 + + ) + +217 + ~<b�s/ty�s.h +> + +219 #i�def +__ssize_t_def�ed + + +220 +__ssize_t + + tssize_t +; + +221 + #__ssize_t_def�ed + + + ) + +224 + #__�ed_size_t + + + ) + +225 + #__�ed_NULL + + + ) + +226 + ~<�ddef.h +> + +228 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_XOPEN2K + + +231 #i�de� +__gid_t_def�ed + + +232 +__gid_t + + tgid_t +; + +233 + #__gid_t_def�ed + + + ) + +236 #i�de� +__uid_t_def�ed + + +237 +__uid_t + + tuid_t +; + +238 + #__uid_t_def�ed + + + ) + +241 #i�de� +__off_t_def�ed + + +242 #i�de� +__USE_FILE_OFFSET64 + + +243 +__off_t + + toff_t +; + +245 +__off64_t + + toff_t +; + +247 + #__off_t_def�ed + + + ) + +249 #i� +def�ed + +__USE_LARGEFILE64 + && !def�ed +__off64_t_def�ed + + +250 +__off64_t + + toff64_t +; + +251 + #__off64_t_def�ed + + + ) + +254 #i�de� +__u�c�ds_t_def�ed + + +255 +__u�c�ds_t + + tu�c�ds_t +; + +256 + #__u�c�ds_t_def�ed + + + ) + +259 #i�de� +__pid_t_def�ed + + +260 +__pid_t + + tpid_t +; + +261 + #__pid_t_def�ed + + + ) + +265 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_XOPEN2K + + +266 #i�de� +__���_t_def�ed + + +267 +__���_t + + t���_t +; + +268 + #__���_t_def�ed + + + ) + +272 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN + + +273 #i�de� +__sock�n_t_def�ed + + +274 +__sock�n_t + + tsock�n_t +; + +275 + #__sock�n_t_def�ed + + + ) + +281 + #R_OK + 4 + + ) + +282 + #W_OK + 2 + + ) + +283 + #X_OK + 1 + + ) + +284 + #F_OK + 0 + + ) + +287 + $ac�ss + (cڡ * +__�me +, +__ty� +� +__THROW + + `__n�nu� + ((1)); + +289 #ifde� +__USE_GNU + + +292 + $euidac�ss + (cڡ * +__�me +, +__ty� +) + +293 +__THROW + + `__n�nu� + ((1)); + +296 + $�c�ss + (cڡ * +__�me +, +__ty� +) + +297 +__THROW + + `__n�nu� + ((1)); + +300 #ifde� +__USE_ATFILE + + +304 + $�c�s�t + ( +__fd +, cڡ * +__f�e +, +__ty� +, +__�ag +) + +305 +__THROW + + `__n�nu� + ((2)� +__wur +; + +310 #i�def +_STDIO_H + + +311 + #SEEK_SET + 0 + + ) + +312 + #SEEK_CUR + 1 + + ) + +313 + #SEEK_END + 2 + + ) + +314 #ifde� +__USE_GNU + + +315 + #SEEK_DATA + 3 + + ) + +316 + #SEEK_HOLE + 4 + + ) + +320 #i� +def�ed + +__USE_BSD + && !def�ed +L_SET + + +322 + #L_SET + +SEEK_SET + + + ) + +323 + #L_INCR + +SEEK_CUR + + + ) + +324 + #L_XTND + +SEEK_END + + + ) + +333 #i�de� +__USE_FILE_OFFSET64 + + +334 +__off_t + + $l�ek + ( +__fd +, +__off_t + +__off�t +, +__wh�� +� +__THROW +; + +336 #ifde� +__REDIRECT_NTH + + +337 +__off64_t + + `__REDIRECT_NTH + ( +l�ek +, + +338 ( +__fd +, +__off64_t + +__off�t +, +__wh�� +), + +339 +l�ek64 +); + +341 + #l�ek + +l�ek64 + + + ) + +344 #ifde� +__USE_LARGEFILE64 + + +345 +__off64_t + + $l�ek64 + ( +__fd +, +__off64_t + +__off�t +, +__wh�� +) + +346 +__THROW +; + +353 + `�o� + ( +__fd +); + +360 +ssize_t + + $�ad + ( +__fd +, * +__buf +, +size_t + +__nby�s +� +__wur +; + +366 +ssize_t + + $wr�e + ( +__fd +, cڡ * +__buf +, +size_t + +__n +� +__wur +; + +368 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K8 + + +369 #i�de� +__USE_FILE_OFFSET64 + + +376 +ssize_t + + $��d + ( +__fd +, * +__buf +, +size_t + +__nby�s +, + +377 +__off_t + +__off�t +� +__wur +; + +384 +ssize_t + + $pwr�e + ( +__fd +, cڡ * +__buf +, +size_t + +__n +, + +385 +__off_t + +__off�t +� +__wur +; + +387 #ifde� +__REDIRECT + + +388 +ssize_t + + `__REDIRECT + ( +��d +, ( +__fd +, * +__buf +, +size_t + +__nby�s +, + +389 +__off64_t + +__off�t +), + +390 +��d64 +� +__wur +; + +391 +ssize_t + + `__REDIRECT + ( +pwr�e +, ( +__fd +, cڡ * +__buf +, + +392 +size_t + +__nby�s +, +__off64_t + +__off�t +), + +393 +pwr�e64 +� +__wur +; + +395 + #��d + +��d64 + + + ) + +396 + #pwr�e + +pwr�e64 + + + ) + +400 #ifde� +__USE_LARGEFILE64 + + +404 +ssize_t + + $��d64 + ( +__fd +, * +__buf +, +size_t + +__nby�s +, + +405 +__off64_t + +__off�t +� +__wur +; + +408 +ssize_t + + $pwr�e64 + ( +__fd +, cڡ * +__buf +, +size_t + +__n +, + +409 +__off64_t + +__off�t +� +__wur +; + +417 + $p�e + ( +__p�edes +[2]� +__THROW + +__wur +; + +419 #ifde� +__USE_GNU + + +422 + $p�e2 + ( +__p�edes +[2], +__�ags +� +__THROW + +__wur +; + +432 + $��m + ( +__�c�ds +� +__THROW +; + +444 + `��p + ( +__�c�ds +); + +446 #i�( +def�ed + +__USE_XOPEN_EXTENDED + && !def�ed +__USE_XOPEN2K8 +) \ + +447 || +def�ed + +__USE_BSD + + +452 +__u�c�ds_t + + $u��m + ( +__u�c�ds_t + +__v�ue +, __u�c�ds_� +__��rv� +) + +453 +__THROW +; + +460 + `u��p + ( +__u�c�ds_t + +__u�c�ds +); + +469 + `�u� + (); + +473 + $chown + (cڡ * +__f�e +, +__uid_t + +__ow�r +, +__gid_t + +__group +) + +474 +__THROW + + `__n�nu� + ((1)� +__wur +; + +476 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_XOPEN2K8 + + +478 + $fchown + ( +__fd +, +__uid_t + +__ow�r +, +__gid_t + +__group +� +__THROW + +__wur +; + +483 + $lchown + (cڡ * +__f�e +, +__uid_t + +__ow�r +, +__gid_t + +__group +) + +484 +__THROW + + `__n�nu� + ((1)� +__wur +; + +488 #ifde� +__USE_ATFILE + + +491 + $fchow�t + ( +__fd +, cڡ * +__f�e +, +__uid_t + +__ow�r +, + +492 +__gid_t + +__group +, +__�ag +) + +493 +__THROW + + `__n�nu� + ((2)� +__wur +; + +497 + $chd� + (cڡ * +__�th +� +__THROW + + `__n�nu� + ((1)� +__wur +; + +499 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_XOPEN2K8 + + +501 + $fchd� + ( +__fd +� +__THROW + +__wur +; + +511 * + $g�cwd + (* +__buf +, +size_t + +__size +� +__THROW + +__wur +; + +513 #ifdef +__USE_GNU + + +517 * + $g�_cu��t_d�_�me + (� +__THROW +; + +520 #i�( +def�ed + +__USE_XOPEN_EXTENDED + && !def�ed +__USE_XOPEN2K8 +) \ + +521 || +def�ed + +__USE_BSD + + +525 * + $g�wd + (* +__buf +) + +526 +__THROW + + `__n�nu� + ((1)� +__��ibu�_d����d__ + +__wur +; + +531 + $dup + ( +__fd +� +__THROW + +__wur +; + +534 + $dup2 + ( +__fd +, +__fd2 +� +__THROW +; + +536 #ifde� +__USE_GNU + + +539 + $dup3 + ( +__fd +, +__fd2 +, +__�ags +� +__THROW +; + +543 ** +__�v�� +; + +544 #ifde� +__USE_GNU + + +545 ** +�v�� +; + +551 + $execve + (cڡ * +__�th +, *cڡ +__�gv +[], + +552 *cڡ +__�vp +[]� +__THROW + + `__n�nu� + ((1, 2)); + +554 #ifde� +__USE_XOPEN2K8 + + +557 + $�xecve + ( +__fd +, *cڡ +__�gv +[], *cڡ +__�vp +[]) + +558 +__THROW + + `__n�nu� + ((2)); + +563 + $execv + (cڡ * +__�th +, *cڡ +__�gv +[]) + +564 +__THROW + + `__n�nu� + ((1, 2)); + +568 + $exe�e + (cڡ * +__�th +, cڡ * +__�g +, ...) + +569 +__THROW + + `__n�nu� + ((1, 2)); + +573 + $exe� + (cڡ * +__�th +, cڡ * +__�g +, ...) + +574 +__THROW + + `__n�nu� + ((1, 2)); + +578 + $execvp + (cڡ * +__f�e +, *cڡ +__�gv +[]) + +579 +__THROW + + `__n�nu� + ((1, 2)); + +584 + $exe�p + (cڡ * +__f�e +, cڡ * +__�g +, ...) + +585 +__THROW + + `__n�nu� + ((1, 2)); + +587 #ifde� +__USE_GNU + + +590 + $execv� + (cڡ * +__f�e +, *cڡ +__�gv +[], + +591 *cڡ +__�vp +[]) + +592 +__THROW + + `__n�nu� + ((1, 2)); + +596 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN + + +598 + $ni� + ( +__�c +� +__THROW + +__wur +; + +603 + $_ex� + ( +__��us +� + `__��ibu�__ + (( +__nܑu�__ +)); + +609 + ~<b�s/c��ame.h +> + +612 + $�thc�f + (cڡ * +__�th +, +__�me +) + +613 +__THROW + + `__n�nu� + ((1)); + +616 + $�hc�f + ( +__fd +, +__�me +� +__THROW +; + +619 + $sysc�f + ( +__�me +� +__THROW +; + +621 #ifdef +__USE_POSIX2 + + +623 +size_t + + $c�f�r + ( +__�me +, * +__buf +, +size_t + +__�n +� +__THROW +; + +628 +__pid_t + + $g�pid + (� +__THROW +; + +631 +__pid_t + + $g��id + (� +__THROW +; + +634 +__pid_t + + $g�pg� + (� +__THROW +; + +637 +__pid_t + + $__g�pgid + ( +__pid_t + +__pid +� +__THROW +; + +638 #i� +def�ed + +__USE_XOPEN_EXTENDED + || def�ed +__USE_XOPEN2K8 + + +639 +__pid_t + + $g�pgid + ( +__pid_t + +__pid +� +__THROW +; + +646 + $��gid + ( +__pid_t + +__pid +, __pid_� +__pgid +� +__THROW +; + +648 #i� +def�ed + +__USE_SVID + || def�ed +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +660 + $��g� + (� +__THROW +; + +667 +__pid_t + + $�tsid + (� +__THROW +; + +669 #i� +def�ed + +__USE_XOPEN_EXTENDED + || def�ed +__USE_XOPEN2K8 + + +671 +__pid_t + + $g�sid + ( +__pid_t + +__pid +� +__THROW +; + +675 +__uid_t + + $g�uid + (� +__THROW +; + +678 +__uid_t + + $g�euid + (� +__THROW +; + +681 +__gid_t + + $g�gid + (� +__THROW +; + +684 +__gid_t + + $g�egid + (� +__THROW +; + +689 + $g�groups + ( +__size +, +__gid_t + +__li� +[]� +__THROW + +__wur +; + +691 #ifdef +__USE_GNU + + +693 + $group_memb� + ( +__gid_t + +__gid +� +__THROW +; + +700 + $�tuid + ( +__uid_t + +__uid +� +__THROW + +__wur +; + +702 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +705 + $��euid + ( +__uid_t + +__ruid +, __uid_� +__euid +� +__THROW + +__wur +; + +708 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN2K + + +710 + $��uid + ( +__uid_t + +__uid +� +__THROW + +__wur +; + +717 + $�tgid + ( +__gid_t + +__gid +� +__THROW + +__wur +; + +719 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +722 + $��egid + ( +__gid_t + +__rgid +, __gid_� +__egid +� +__THROW + +__wur +; + +725 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN2K + + +727 + $��gid + ( +__gid_t + +__gid +� +__THROW + +__wur +; + +730 #ifde� +__USE_GNU + + +733 + $g��suid + ( +__uid_t + * +__ruid +, __uid_�* +__euid +, __uid_�* +__suid +) + +734 +__THROW +; + +738 + $g��sgid + ( +__gid_t + * +__rgid +, __gid_�* +__egid +, __gid_�* +__sgid +) + +739 +__THROW +; + +743 + $��esuid + ( +__uid_t + +__ruid +, __uid_� +__euid +, __uid_� +__suid +) + +744 +__THROW + +__wur +; + +748 + $��esgid + ( +__gid_t + +__rgid +, __gid_� +__egid +, __gid_� +__sgid +) + +749 +__THROW + +__wur +; + +756 +__pid_t + + $f�k + (� +__THROWNL +; + +758 #i�( +def�ed + +__USE_XOPEN_EXTENDED + && !def�ed +__USE_XOPEN2K8 +) \ + +759 || +def�ed + +__USE_BSD + + +764 +__pid_t + + $vf�k + (� +__THROW +; + +770 * + $�y�me + ( +__fd +� +__THROW +; + +774 + $�y�me_r + ( +__fd +, * +__buf +, +size_t + +__bu� +) + +775 +__THROW + + `__n�nu� + ((2)� +__wur +; + +779 + $i��y + ( +__fd +� +__THROW +; + +781 #i� +def�ed + +__USE_BSD + \ + +782 || ( +def�ed + +__USE_XOPEN_EXTENDED + && !def�ed +__USE_UNIX98 +) + +785 + $�y�� + (� +__THROW +; + +790 + $l�k + (cڡ * +__�om +, cڡ * +__to +) + +791 +__THROW + + `__n�nu� + ((1, 2)� +__wur +; + +793 #ifde� +__USE_ATFILE + + +796 + $l�k� + ( +__�omfd +, cڡ * +__�om +, +__tofd +, + +797 cڡ * +__to +, +__�ags +) + +798 +__THROW + + `__n�nu� + ((2, 4)� +__wur +; + +801 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_XOPEN2K + + +803 + $syml�k + (cڡ * +__�om +, cڡ * +__to +) + +804 +__THROW + + `__n�nu� + ((1, 2)� +__wur +; + +809 +ssize_t + + $�adl�k + (cڡ * +__��ri� + +__�th +, + +810 * +__��ri� + +__buf +, +size_t + +__�n +) + +811 +__THROW + + `__n�nu� + ((1, 2)� +__wur +; + +814 #ifde� +__USE_ATFILE + + +816 + $syml�k� + (cڡ * +__�om +, +__tofd +, + +817 cڡ * +__to +� +__THROW + + `__n�nu� + ((1, 3)� +__wur +; + +820 +ssize_t + + $�adl�k� + ( +__fd +, cڡ * +__��ri� + +__�th +, + +821 * +__��ri� + +__buf +, +size_t + +__�n +) + +822 +__THROW + + `__n�nu� + ((2, 3)� +__wur +; + +826 + $uƚk + (cڡ * +__�me +� +__THROW + + `__n�nu� + ((1)); + +828 #ifde� +__USE_ATFILE + + +830 + $uƚk� + ( +__fd +, cڡ * +__�me +, +__�ag +) + +831 +__THROW + + `__n�nu� + ((2)); + +835 + $rmd� + (cڡ * +__�th +� +__THROW + + `__n�nu� + ((1)); + +839 +__pid_t + + $tcg�pg� + ( +__fd +� +__THROW +; + +842 + $tc��g� + ( +__fd +, +__pid_t + +__pg�_id +� +__THROW +; + +849 * + `g�log� + (); + +850 #i� +def�ed + +__USE_REENTRANT + || def�ed +__USE_POSIX199506 + + +857 + $g�log�_r + (* +__�me +, +size_t + +__�me_�n +� + `__n�nu� + ((1)); + +860 #ifdef +__USE_BSD + + +862 + $��og� + (cڡ * +__�me +� +__THROW + + `__n�nu� + ((1)); + +866 #ifdef +__USE_POSIX2 + + +870 + #__�ed_g��t + + + ) + +871 + ~<g��t.h +> + +875 #i� +def�ed + +__USE_BSD + || def�ed +__USE_UNIX98 + || def�ed +__USE_XOPEN2K + + +879 + $g�ho��me + (* +__�me +, +size_t + +__�n +� +__THROW + + `__n�nu� + ((1)); + +883 #i� +def�ed + +__USE_BSD + || (def�ed +__USE_XOPEN + && !def�ed +__USE_UNIX98 +) + +886 + $�tho��me + (cڡ * +__�me +, +size_t + +__�n +) + +887 +__THROW + + `__n�nu� + ((1)� +__wur +; + +891 + $�tho�id + ( +__id +� +__THROW + +__wur +; + +897 + $g�doma��me + (* +__�me +, +size_t + +__�n +) + +898 +__THROW + + `__n�nu� + ((1)� +__wur +; + +899 + $�tdoma��me + (cڡ * +__�me +, +size_t + +__�n +) + +900 +__THROW + + `__n�nu� + ((1)� +__wur +; + +906 + $vh�gup + (� +__THROW +; + +909 + $�voke + (cڡ * +__f�e +� +__THROW + + `__n�nu� + ((1)� +__wur +; + +917 + $�of� + (* +__�m�e_buf�r +, +size_t + +__size +, + +918 +size_t + +__off�t +, +__s�� +) + +919 +__THROW + + `__n�nu� + ((1)); + +925 + $ac� + (cڡ * +__�me +� +__THROW +; + +929 * + $g�u�rsh�l + (� +__THROW +; + +930 + $�du�rsh�l + (� +__THROW +; + +931 + $�tu�rsh�l + (� +__THROW +; + +937 + $d�m� + ( +__nochd� +, +__no�o� +� +__THROW + +__wur +; + +941 #i� +def�ed + +__USE_BSD + || (def�ed +__USE_XOPEN + && !def�ed +__USE_XOPEN2K +) + +944 + $chro� + (cڡ * +__�th +� +__THROW + + `__n�nu� + ((1)� +__wur +; + +948 * + $g��ss + (cڡ * +__�om� +� + `__n�nu� + ((1)); + +956 + `fsync + ( +__fd +); + +959 #ifde� +__USE_GNU + + +962 + $syncfs + ( +__fd +� +__THROW +; + +966 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +969 + `g�ho�id + (); + +972 + $sync + (� +__THROW +; + +975 #i� +def�ed + +__USE_BSD + || !def�ed +__USE_XOPEN2K + + +978 + $g��gesize + (� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +983 + $g�d�b�size + (� +__THROW +; + +989 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_XOPEN2K8 + + +992 #i�de� +__USE_FILE_OFFSET64 + + +993 + $�un�� + (cڡ * +__f�e +, +__off_t + +__�ngth +) + +994 +__THROW + + `__n�nu� + ((1)� +__wur +; + +996 #ifde� +__REDIRECT_NTH + + +997 + `__REDIRECT_NTH + ( +�un�� +, + +998 (cڡ * +__f�e +, +__off64_t + +__�ngth +), + +999 +�un��64 +� + `__n�nu� + ((1)� +__wur +; + +1001 + #�un�� + +�un��64 + + + ) + +1004 #ifde� +__USE_LARGEFILE64 + + +1005 + $�un��64 + (cڡ * +__f�e +, +__off64_t + +__�ngth +) + +1006 +__THROW + + `__n�nu� + ((1)� +__wur +; + +1011 #i� +def�ed + +__USE_BSD + || def�ed +__USE_POSIX199309 + \ + +1012 || +def�ed + +__USE_XOPEN_EXTENDED + || def�ed +__USE_XOPEN2K + + +1015 #i�de� +__USE_FILE_OFFSET64 + + +1016 + $�run�� + ( +__fd +, +__off_t + +__�ngth +� +__THROW + +__wur +; + +1018 #ifde� +__REDIRECT_NTH + + +1019 + `__REDIRECT_NTH + ( +�run�� +, ( +__fd +, +__off64_t + +__�ngth +), + +1020 +�run��64 +� +__wur +; + +1022 + #�run�� + +�run��64 + + + ) + +1025 #ifde� +__USE_LARGEFILE64 + + +1026 + $�run��64 + ( +__fd +, +__off64_t + +__�ngth +� +__THROW + +__wur +; + +1032 #i�( +def�ed + +__USE_XOPEN_EXTENDED + && !def�ed +__USE_XOPEN2K +) \ + +1033 || +def�ed + +__USE_MISC + + +1037 + $brk + (* +__addr +� +__THROW + +__wur +; + +1043 * + $sbrk + ( +���_t + +__d�� +� +__THROW +; + +1047 #ifde� +__USE_MISC + + +1058 + $sys�� + ( +__sy�o +, ...� +__THROW +; + +1063 #i�( +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN_EXTENDED +�&& !def�ed +F_LOCK + + +1075 + #F_ULOCK + 0 + + ) + +1076 + #F_LOCK + 1 + + ) + +1077 + #F_TLOCK + 2 + + ) + +1078 + #F_TEST + 3 + + ) + +1080 #i�de� +__USE_FILE_OFFSET64 + + +1081 + $lockf + ( +__fd +, +__cmd +, +__off_t + +__�n +� +__wur +; + +1083 #ifde� +__REDIRECT + + +1084 + `__REDIRECT + ( +lockf +, ( +__fd +, +__cmd +, +__off64_t + +__�n +), + +1085 +lockf64 +� +__wur +; + +1087 + #lockf + +lockf64 + + + ) + +1090 #ifde� +__USE_LARGEFILE64 + + +1091 + $lockf64 + ( +__fd +, +__cmd +, +__off64_t + +__�n +� +__wur +; + +1096 #ifde� +__USE_GNU + + +1101 + #TEMP_FAILURE_RETRY +( +ex�essi� +) \ + +1102 ( +__ex�nsi�__ + \ + +1103 ({ +__�su� +; \ + +1104 d� +__�su� + = (�( +ex�essi� +); \ + +1105 +__�su� + =�-1L && +��o + =� +EINTR +); \ + +1106 +__�su� +; + } +})) + + ) + +1109 #i� +def�ed + +__USE_POSIX199309 + || def�ed +__USE_UNIX98 + + +1112 +fd�async + ( +__f�des +); + +1118 #ifdef +__USE_XOPEN + + +1120 * + $�y� + (cڡ * +__key +, cڡ * +__�� +) + +1121 +__THROW + + `__n�nu� + ((1, 2)); + +1125 + $��y� + (* +__glibc_block +, +__ed�ag +) + +1126 +__THROW + + `__n�nu� + ((1)); + +1133 + $swab + (cڡ * +__��ri� + +__�om +, *__��ri� +__to +, + +1134 +ssize_t + +__n +� +__THROW + + `__n�nu� + ((1, 2)); + +1140 #i� +def�ed + +__USE_XOPEN + && !def�ed +__USE_XOPEN2K + + +1142 * + $��mid + (* +__s +� +__THROW +; + +1147 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__f�tify_fun�i� + + +1148 + ~<b�s/uni�d.h +> + +1151 +__END_DECLS + + + @/usr/include/alloca.h + +18 #i�def +_ALLOCA_H + + +19 + #_ALLOCA_H + 1 + + ) + +21 + ~<�u�s.h +> + +23 + #__�ed_size_t + + + ) + +24 + ~<�ddef.h +> + +26 + g__BEGIN_DECLS + + +29 #unde� +�lo� + + +32 * + $�lo� + ( +size_t + +__size +� +__THROW +; + +34 #ifdef +__GNUC__ + + +35 + #�lo� +( +size +� + `__bu�t�_�lo� + (size) + + ) + +38 +__END_DECLS + + + @/usr/include/asm-generic/ioctl.h + +1 #i�de� +_ASM_GENERIC_IOCTL_H + + +2 + #_ASM_GENERIC_IOCTL_H + + + ) + +22 + #_IOC_NRBITS + 8 + + ) + +23 + #_IOC_TYPEBITS + 8 + + ) + +30 #i�de� +_IOC_SIZEBITS + + +31 + #_IOC_SIZEBITS + 14 + + ) + +34 #i�de� +_IOC_DIRBITS + + +35 + #_IOC_DIRBITS + 2 + + ) + +38 + #_IOC_NRMASK + ((1 << +_IOC_NRBITS +)-1) + + ) + +39 + #_IOC_TYPEMASK + ((1 << +_IOC_TYPEBITS +)-1) + + ) + +40 + #_IOC_SIZEMASK + ((1 << +_IOC_SIZEBITS +)-1) + + ) + +41 + #_IOC_DIRMASK + ((1 << +_IOC_DIRBITS +)-1) + + ) + +43 + #_IOC_NRSHIFT + 0 + + ) + +44 + #_IOC_TYPESHIFT + ( +_IOC_NRSHIFT ++ +_IOC_NRBITS +) + + ) + +45 + #_IOC_SIZESHIFT + ( +_IOC_TYPESHIFT ++ +_IOC_TYPEBITS +) + + ) + +46 + #_IOC_DIRSHIFT + ( +_IOC_SIZESHIFT ++ +_IOC_SIZEBITS +) + + ) + +53 #i�de� +_IOC_NONE + + +54 + #_IOC_NONE + 0U + + ) + +57 #i�de� +_IOC_WRITE + + +58 + #_IOC_WRITE + 1U + + ) + +61 #i�de� +_IOC_READ + + +62 + #_IOC_READ + 2U + + ) + +65 + #_IOC +( +d� +, +ty� +, +� +, +size +) \ + +66 ((( +d� +�<< +_IOC_DIRSHIFT +) | \ + +67 (( +ty� +�<< +_IOC_TYPESHIFT +) | \ + +68 (( +� +�<< +_IOC_NRSHIFT +) | \ + +69 (( +size +�<< +_IOC_SIZESHIFT +)) + + ) + +71 + #_IOC_TYPECHECK +( +t +�(�)) + + ) + +74 + #_IO +( +ty� +, +� +� + `_IOC +( +_IOC_NONE +,�y�),�r),0) + + ) + +75 + #_IOR +( +ty� +, +� +, +size +� + `_IOC +( +_IOC_READ +,�y�),�r),( + `_IOC_TYPECHECK +(size))) + + ) + +76 + #_IOW +( +ty� +, +� +, +size +� + `_IOC +( +_IOC_WRITE +,�y�),�r),( + `_IOC_TYPECHECK +(size))) + + ) + +77 + #_IOWR +( +ty� +, +� +, +size +� + `_IOC +( +_IOC_READ +| +_IOC_WRITE +,�y�),�r),( + `_IOC_TYPECHECK +(size))) + + ) + +78 + #_IOR_BAD +( +ty� +, +� +, +size +� + `_IOC +( +_IOC_READ +,�y�),�r),(size)) + + ) + +79 + #_IOW_BAD +( +ty� +, +� +, +size +� + `_IOC +( +_IOC_WRITE +,�y�),�r),(size)) + + ) + +80 + #_IOWR_BAD +( +ty� +, +� +, +size +� + `_IOC +( +_IOC_READ +| +_IOC_WRITE +,�y�),�r),(size)) + + ) + +83 + #_IOC_DIR +( +� +�((�r�>> +_IOC_DIRSHIFT +�& +_IOC_DIRMASK +) + + ) + +84 + #_IOC_TYPE +( +� +�((�r�>> +_IOC_TYPESHIFT +�& +_IOC_TYPEMASK +) + + ) + +85 + #_IOC_NR +( +� +�((�r�>> +_IOC_NRSHIFT +�& +_IOC_NRMASK +) + + ) + +86 + #_IOC_SIZE +( +� +�((�r�>> +_IOC_SIZESHIFT +�& +_IOC_SIZEMASK +) + + ) + +90 + #IOC_IN + ( +_IOC_WRITE + << +_IOC_DIRSHIFT +) + + ) + +91 + #IOC_OUT + ( +_IOC_READ + << +_IOC_DIRSHIFT +) + + ) + +92 + #IOC_INOUT + (( +_IOC_WRITE +| +_IOC_READ +�<< +_IOC_DIRSHIFT +) + + ) + +93 + #IOCSIZE_MASK + ( +_IOC_SIZEMASK + << +_IOC_SIZESHIFT +) + + ) + +94 + #IOCSIZE_SHIFT + ( +_IOC_SIZESHIFT +) + + ) + + @/usr/include/asm/sockios.h + +1 + ~<asm-g��ic/sockios.h +> + + @/usr/include/bits/byteswap.h + +19 #i�! +def�ed + +_BYTESWAP_H + && !def�ed +_NETINET_IN_H + && !def�ed +_ENDIAN_H + + +23 #i�de� +_BITS_BYTESWAP_H + + +24 + #_BITS_BYTESWAP_H + 1 + + ) + +26 + ~<�u�s.h +> + +27 + ~<b�s/ty�s.h +> + +28 + ~<b�s/w�dsize.h +> + +31 + #__bsw�_cڡ�t_16 +( +x +) \ + +32 ((�(((( +x +�>> 8�& 0xff�| (((x�& 0xff�<< 8))) + + ) + +35 + ~<b�s/by�sw�-16.h +> + +38 + #__bsw�_cڡ�t_32 +( +x +) \ + +39 (((( +x +) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ + +40 ((( +x +�& 0x0000ff00�<< 8�| (((x�& 0x000000ff�<< 24)) + + ) + +42 #ifde� +__GNUC__ + + +43 #i� +__GNUC_PREREQ + (4, 3) + +44 +__�l�e + + +45 + $__bsw�_32 + ( +__bsx +) + +47 + `__bu�t�_bsw�32 + ( +__bsx +); + +48 + } +} + +49 #�i� +__GNUC__ + >= 2 + +50 #i� +__WORDSIZE + =�64 || ( +def�ed + +__i486__ + || def�ed +__��ium__ + \ + +51 || +def�ed + + g__��ium�o__ + || def�ed + g__��ium4__ + \ + +52 || +def�ed + + g__k8__ + || def�ed + g__�hl�__ + \ + +53 || +def�ed + + g__k6__ + || def�ed + g__noc�a__ + \ + +54 || +def�ed + + g__c�e2__ + || def�ed + g__geode__ + \ + +55 || +def�ed + + g__amd�m10__ +) + +58 + #__bsw�_32 +( +x +) \ + +59 ( +__ex�nsi�__ + \ + +60 ({ +__v +, +__x + = ( +x +); \ + +61 i�( + `__bu�t�_cڡ�t_p + ( +__x +)) \ + +62 +__v + = + `__bsw�_cڡ�t_32 + ( +__x +); \ + +64 + `__asm__ + ("bsw� %0" : "�" ( +__v +�: "0" ( +__x +)); \ + +65 +__v +; })) + + ) + +67 + #__bsw�_32 +( +x +) \ + +68 ( +__ex�nsi�__ + \ + +69 ({ +__v +, +__x + = ( +x +); \ + +70 i�( + `__bu�t�_cڡ�t_p + ( +__x +)) \ + +71 +__v + = + `__bsw�_cڡ�t_32 + ( +__x +); \ + +73 + `__asm__ + ("rorw $8, %w0;" \ + +76 : "�" ( +__v +) \ + +77 : "0" ( +__x +) \ + +79 +__v +; })) + + ) + +82 + #__bsw�_32 +( +x +) \ + +83 ( +__ex�nsi�__ + \ + +84 ({ +__x + = ( +x +); + `__bsw�_cڡ�t_32 + (__x); })) + + ) + +87 +__�l�e + + +88 + $__bsw�_32 + ( +__bsx +) + +90 + `__bsw�_cڡ�t_32 + ( +__bsx +); + +91 + } +} + +95 #i� +__GNUC_PREREQ + (2, 0) + +97 + #__bsw�_cڡ�t_64 +( +x +) \ + +98 ( + `__ex�nsi�__ + (((( +x +) & 0xff00000000000000ull) >> 56) \ + +99 | ((( +x +) & 0x00ff000000000000ull) >> 40) \ + +100 | ((( +x +) & 0x0000ff0000000000ull) >> 24) \ + +101 | ((( +x +) & 0x000000ff00000000ull) >> 8) \ + +102 | ((( +x +) & 0x00000000ff000000ull) << 8) \ + +103 | ((( +x +) & 0x0000000000ff0000ull) << 24) \ + +104 | ((( +x +) & 0x000000000000ff00ull) << 40) \ + +105 | ((( +x +�& 0x00000000000000ffu��<< 56))) + + ) + +107 #i� +__GNUC_PREREQ + (4, 3) + +108 +__�l�e + +__u�t64_t + + +109 + $__bsw�_64 + ( +__u�t64_t + +__bsx +) + +111 + `__bu�t�_bsw�64 + ( +__bsx +); + +112 + } +} + +113 #�i� +__WORDSIZE + == 64 + +114 + #__bsw�_64 +( +x +) \ + +115 ( +__ex�nsi�__ + \ + +116 ({ +__u�t64_t + +__v +, +__x + = ( +x +); \ + +117 i�( + `__bu�t�_cڡ�t_p + ( +__x +)) \ + +118 +__v + = + `__bsw�_cڡ�t_64 + ( +__x +); \ + +120 + `__asm__ + ("bsw� %q0" : "�" ( +__v +�: "0" ( +__x +)); \ + +121 +__v +; })) + + ) + +123 + #__bsw�_64 +( +x +) \ + +124 ( +__ex�nsi�__ + \ + +125 ({ uni� { +__ex�nsi�__ + +__u�t64_t + +__� +; \ + +126 +__l +[2]; } +__w +, +__r +; \ + +127 i�( + `__bu�t�_cڡ�t_p + ( +x +)) \ + +128 +__r +. +__� + = + `__bsw�_cڡ�t_64 + ( +x +); \ + +131 +__w +. +__� + = ( +x +); \ + +132 +__r +. +__l +[0] = + `__bsw�_32 + ( +__w +.__l[1]); \ + +133 +__r +. +__l +[1] = + `__bsw�_32 + ( +__w +.__l[0]); \ + +135 +__r +. +__� +; })) + + ) + +138 + #__bsw�_cڡ�t_64 +( +x +) \ + +139 (((( +x +) & 0xff00000000000000ull) >> 56) \ + +140 | ((( +x +) & 0x00ff000000000000ull) >> 40) \ + +141 | ((( +x +) & 0x0000ff0000000000ull) >> 24) \ + +142 | ((( +x +) & 0x000000ff00000000ull) >> 8) \ + +143 | ((( +x +) & 0x00000000ff000000ull) << 8) \ + +144 | ((( +x +) & 0x0000000000ff0000ull) << 24) \ + +145 | ((( +x +) & 0x000000000000ff00ull) << 40) \ + +146 | ((( +x +�& 0x00000000000000ffu��<< 56)) + + ) + +148 +__�l�e + +__u�t64_t + + +149 + $__bsw�_64 + ( +__u�t64_t + +__bsx +) + +151 + `__bsw�_cڡ�t_64 + ( +__bsx +); + +152 + } +} + + @/usr/include/bits/confname.h + +19 #i�de� +_UNISTD_H + + +26 + m_PC_LINK_MAX +, + +27 + #_PC_LINK_MAX + +_PC_LINK_MAX + + + ) + +28 + m_PC_MAX_CANON +, + +29 + #_PC_MAX_CANON + +_PC_MAX_CANON + + + ) + +30 + m_PC_MAX_INPUT +, + +31 + #_PC_MAX_INPUT + +_PC_MAX_INPUT + + + ) + +32 + m_PC_NAME_MAX +, + +33 + #_PC_NAME_MAX + +_PC_NAME_MAX + + + ) + +34 + m_PC_PATH_MAX +, + +35 + #_PC_PATH_MAX + +_PC_PATH_MAX + + + ) + +36 + m_PC_PIPE_BUF +, + +37 + #_PC_PIPE_BUF + +_PC_PIPE_BUF + + + ) + +38 + m_PC_CHOWN_RESTRICTED +, + +39 + #_PC_CHOWN_RESTRICTED + +_PC_CHOWN_RESTRICTED + + + ) + +40 + m_PC_NO_TRUNC +, + +41 + #_PC_NO_TRUNC + +_PC_NO_TRUNC + + + ) + +42 + m_PC_VDISABLE +, + +43 + #_PC_VDISABLE + +_PC_VDISABLE + + + ) + +44 + m_PC_SYNC_IO +, + +45 + #_PC_SYNC_IO + +_PC_SYNC_IO + + + ) + +46 + m_PC_ASYNC_IO +, + +47 + #_PC_ASYNC_IO + +_PC_ASYNC_IO + + + ) + +48 + m_PC_PRIO_IO +, + +49 + #_PC_PRIO_IO + +_PC_PRIO_IO + + + ) + +50 + m_PC_SOCK_MAXBUF +, + +51 + #_PC_SOCK_MAXBUF + +_PC_SOCK_MAXBUF + + + ) + +52 + m_PC_FILESIZEBITS +, + +53 + #_PC_FILESIZEBITS + +_PC_FILESIZEBITS + + + ) + +54 + m_PC_REC_INCR_XFER_SIZE +, + +55 + #_PC_REC_INCR_XFER_SIZE + +_PC_REC_INCR_XFER_SIZE + + + ) + +56 + m_PC_REC_MAX_XFER_SIZE +, + +57 + #_PC_REC_MAX_XFER_SIZE + +_PC_REC_MAX_XFER_SIZE + + + ) + +58 + m_PC_REC_MIN_XFER_SIZE +, + +59 + #_PC_REC_MIN_XFER_SIZE + +_PC_REC_MIN_XFER_SIZE + + + ) + +60 + m_PC_REC_XFER_ALIGN +, + +61 + #_PC_REC_XFER_ALIGN + +_PC_REC_XFER_ALIGN + + + ) + +62 + m_PC_ALLOC_SIZE_MIN +, + +63 + #_PC_ALLOC_SIZE_MIN + +_PC_ALLOC_SIZE_MIN + + + ) + +64 + m_PC_SYMLINK_MAX +, + +65 + #_PC_SYMLINK_MAX + +_PC_SYMLINK_MAX + + + ) + +66 + m_PC_2_SYMLINKS + + +67 + #_PC_2_SYMLINKS + +_PC_2_SYMLINKS + + + ) + +73 + m_SC_ARG_MAX +, + +74 + #_SC_ARG_MAX + +_SC_ARG_MAX + + + ) + +75 + m_SC_CHILD_MAX +, + +76 + #_SC_CHILD_MAX + +_SC_CHILD_MAX + + + ) + +77 + m_SC_CLK_TCK +, + +78 + #_SC_CLK_TCK + +_SC_CLK_TCK + + + ) + +79 + m_SC_NGROUPS_MAX +, + +80 + #_SC_NGROUPS_MAX + +_SC_NGROUPS_MAX + + + ) + +81 + m_SC_OPEN_MAX +, + +82 + #_SC_OPEN_MAX + +_SC_OPEN_MAX + + + ) + +83 + m_SC_STREAM_MAX +, + +84 + #_SC_STREAM_MAX + +_SC_STREAM_MAX + + + ) + +85 + m_SC_TZNAME_MAX +, + +86 + #_SC_TZNAME_MAX + +_SC_TZNAME_MAX + + + ) + +87 + m_SC_JOB_CONTROL +, + +88 + #_SC_JOB_CONTROL + +_SC_JOB_CONTROL + + + ) + +89 + m_SC_SAVED_IDS +, + +90 + #_SC_SAVED_IDS + +_SC_SAVED_IDS + + + ) + +91 + m_SC_REALTIME_SIGNALS +, + +92 + #_SC_REALTIME_SIGNALS + +_SC_REALTIME_SIGNALS + + + ) + +93 + m_SC_PRIORITY_SCHEDULING +, + +94 + #_SC_PRIORITY_SCHEDULING + +_SC_PRIORITY_SCHEDULING + + + ) + +95 + m_SC_TIMERS +, + +96 + #_SC_TIMERS + +_SC_TIMERS + + + ) + +97 + m_SC_ASYNCHRONOUS_IO +, + +98 + #_SC_ASYNCHRONOUS_IO + +_SC_ASYNCHRONOUS_IO + + + ) + +99 + m_SC_PRIORITIZED_IO +, + +100 + #_SC_PRIORITIZED_IO + +_SC_PRIORITIZED_IO + + + ) + +101 + m_SC_SYNCHRONIZED_IO +, + +102 + #_SC_SYNCHRONIZED_IO + +_SC_SYNCHRONIZED_IO + + + ) + +103 + m_SC_FSYNC +, + +104 + #_SC_FSYNC + +_SC_FSYNC + + + ) + +105 + m_SC_MAPPED_FILES +, + +106 + #_SC_MAPPED_FILES + +_SC_MAPPED_FILES + + + ) + +107 + m_SC_MEMLOCK +, + +108 + #_SC_MEMLOCK + +_SC_MEMLOCK + + + ) + +109 + m_SC_MEMLOCK_RANGE +, + +110 + #_SC_MEMLOCK_RANGE + +_SC_MEMLOCK_RANGE + + + ) + +111 + m_SC_MEMORY_PROTECTION +, + +112 + #_SC_MEMORY_PROTECTION + +_SC_MEMORY_PROTECTION + + + ) + +113 + m_SC_MESSAGE_PASSING +, + +114 + #_SC_MESSAGE_PASSING + +_SC_MESSAGE_PASSING + + + ) + +115 + m_SC_SEMAPHORES +, + +116 + #_SC_SEMAPHORES + +_SC_SEMAPHORES + + + ) + +117 + m_SC_SHARED_MEMORY_OBJECTS +, + +118 + #_SC_SHARED_MEMORY_OBJECTS + +_SC_SHARED_MEMORY_OBJECTS + + + ) + +119 + m_SC_AIO_LISTIO_MAX +, + +120 + #_SC_AIO_LISTIO_MAX + +_SC_AIO_LISTIO_MAX + + + ) + +121 + m_SC_AIO_MAX +, + +122 + #_SC_AIO_MAX + +_SC_AIO_MAX + + + ) + +123 + m_SC_AIO_PRIO_DELTA_MAX +, + +124 + #_SC_AIO_PRIO_DELTA_MAX + +_SC_AIO_PRIO_DELTA_MAX + + + ) + +125 + m_SC_DELAYTIMER_MAX +, + +126 + #_SC_DELAYTIMER_MAX + +_SC_DELAYTIMER_MAX + + + ) + +127 + m_SC_MQ_OPEN_MAX +, + +128 + #_SC_MQ_OPEN_MAX + +_SC_MQ_OPEN_MAX + + + ) + +129 + m_SC_MQ_PRIO_MAX +, + +130 + #_SC_MQ_PRIO_MAX + +_SC_MQ_PRIO_MAX + + + ) + +131 + m_SC_VERSION +, + +132 + #_SC_VERSION + +_SC_VERSION + + + ) + +133 + m_SC_PAGESIZE +, + +134 + #_SC_PAGESIZE + +_SC_PAGESIZE + + + ) + +135 + #_SC_PAGE_SIZE + +_SC_PAGESIZE + + + ) + +136 + m_SC_RTSIG_MAX +, + +137 + #_SC_RTSIG_MAX + +_SC_RTSIG_MAX + + + ) + +138 + m_SC_SEM_NSEMS_MAX +, + +139 + #_SC_SEM_NSEMS_MAX + +_SC_SEM_NSEMS_MAX + + + ) + +140 + m_SC_SEM_VALUE_MAX +, + +141 + #_SC_SEM_VALUE_MAX + +_SC_SEM_VALUE_MAX + + + ) + +142 + m_SC_SIGQUEUE_MAX +, + +143 + #_SC_SIGQUEUE_MAX + +_SC_SIGQUEUE_MAX + + + ) + +144 + m_SC_TIMER_MAX +, + +145 + #_SC_TIMER_MAX + +_SC_TIMER_MAX + + + ) + +149 + m_SC_BC_BASE_MAX +, + +150 + #_SC_BC_BASE_MAX + +_SC_BC_BASE_MAX + + + ) + +151 + m_SC_BC_DIM_MAX +, + +152 + #_SC_BC_DIM_MAX + +_SC_BC_DIM_MAX + + + ) + +153 + m_SC_BC_SCALE_MAX +, + +154 + #_SC_BC_SCALE_MAX + +_SC_BC_SCALE_MAX + + + ) + +155 + m_SC_BC_STRING_MAX +, + +156 + #_SC_BC_STRING_MAX + +_SC_BC_STRING_MAX + + + ) + +157 + m_SC_COLL_WEIGHTS_MAX +, + +158 + #_SC_COLL_WEIGHTS_MAX + +_SC_COLL_WEIGHTS_MAX + + + ) + +159 + m_SC_EQUIV_CLASS_MAX +, + +160 + #_SC_EQUIV_CLASS_MAX + +_SC_EQUIV_CLASS_MAX + + + ) + +161 + m_SC_EXPR_NEST_MAX +, + +162 + #_SC_EXPR_NEST_MAX + +_SC_EXPR_NEST_MAX + + + ) + +163 + m_SC_LINE_MAX +, + +164 + #_SC_LINE_MAX + +_SC_LINE_MAX + + + ) + +165 + m_SC_RE_DUP_MAX +, + +166 + #_SC_RE_DUP_MAX + +_SC_RE_DUP_MAX + + + ) + +167 + m_SC_CHARCLASS_NAME_MAX +, + +168 + #_SC_CHARCLASS_NAME_MAX + +_SC_CHARCLASS_NAME_MAX + + + ) + +170 + m_SC_2_VERSION +, + +171 + #_SC_2_VERSION + +_SC_2_VERSION + + + ) + +172 + m_SC_2_C_BIND +, + +173 + #_SC_2_C_BIND + +_SC_2_C_BIND + + + ) + +174 + m_SC_2_C_DEV +, + +175 + #_SC_2_C_DEV + +_SC_2_C_DEV + + + ) + +176 + m_SC_2_FORT_DEV +, + +177 + #_SC_2_FORT_DEV + +_SC_2_FORT_DEV + + + ) + +178 + m_SC_2_FORT_RUN +, + +179 + #_SC_2_FORT_RUN + +_SC_2_FORT_RUN + + + ) + +180 + m_SC_2_SW_DEV +, + +181 + #_SC_2_SW_DEV + +_SC_2_SW_DEV + + + ) + +182 + m_SC_2_LOCALEDEF +, + +183 + #_SC_2_LOCALEDEF + +_SC_2_LOCALEDEF + + + ) + +185 + m_SC_PII +, + +186 + #_SC_PII + +_SC_PII + + + ) + +187 + m_SC_PII_XTI +, + +188 + #_SC_PII_XTI + +_SC_PII_XTI + + + ) + +189 + m_SC_PII_SOCKET +, + +190 + #_SC_PII_SOCKET + +_SC_PII_SOCKET + + + ) + +191 + m_SC_PII_INTERNET +, + +192 + #_SC_PII_INTERNET + +_SC_PII_INTERNET + + + ) + +193 + m_SC_PII_OSI +, + +194 + #_SC_PII_OSI + +_SC_PII_OSI + + + ) + +195 + m_SC_POLL +, + +196 + #_SC_POLL + +_SC_POLL + + + ) + +197 + m_SC_SELECT +, + +198 + #_SC_SELECT + +_SC_SELECT + + + ) + +199 + m_SC_UIO_MAXIOV +, + +200 + #_SC_UIO_MAXIOV + +_SC_UIO_MAXIOV + + + ) + +201 + m_SC_IOV_MAX + = +_SC_UIO_MAXIOV +, + +202 + #_SC_IOV_MAX + +_SC_IOV_MAX + + + ) + +203 + m_SC_PII_INTERNET_STREAM +, + +204 + #_SC_PII_INTERNET_STREAM + +_SC_PII_INTERNET_STREAM + + + ) + +205 + m_SC_PII_INTERNET_DGRAM +, + +206 + #_SC_PII_INTERNET_DGRAM + +_SC_PII_INTERNET_DGRAM + + + ) + +207 + m_SC_PII_OSI_COTS +, + +208 + #_SC_PII_OSI_COTS + +_SC_PII_OSI_COTS + + + ) + +209 + m_SC_PII_OSI_CLTS +, + +210 + #_SC_PII_OSI_CLTS + +_SC_PII_OSI_CLTS + + + ) + +211 + m_SC_PII_OSI_M +, + +212 + #_SC_PII_OSI_M + +_SC_PII_OSI_M + + + ) + +213 + m_SC_T_IOV_MAX +, + +214 + #_SC_T_IOV_MAX + +_SC_T_IOV_MAX + + + ) + +217 + m_SC_THREADS +, + +218 + #_SC_THREADS + +_SC_THREADS + + + ) + +219 + m_SC_THREAD_SAFE_FUNCTIONS +, + +220 + #_SC_THREAD_SAFE_FUNCTIONS + +_SC_THREAD_SAFE_FUNCTIONS + + + ) + +221 + m_SC_GETGR_R_SIZE_MAX +, + +222 + #_SC_GETGR_R_SIZE_MAX + +_SC_GETGR_R_SIZE_MAX + + + ) + +223 + m_SC_GETPW_R_SIZE_MAX +, + +224 + #_SC_GETPW_R_SIZE_MAX + +_SC_GETPW_R_SIZE_MAX + + + ) + +225 + m_SC_LOGIN_NAME_MAX +, + +226 + #_SC_LOGIN_NAME_MAX + +_SC_LOGIN_NAME_MAX + + + ) + +227 + m_SC_TTY_NAME_MAX +, + +228 + #_SC_TTY_NAME_MAX + +_SC_TTY_NAME_MAX + + + ) + +229 + m_SC_THREAD_DESTRUCTOR_ITERATIONS +, + +230 + #_SC_THREAD_DESTRUCTOR_ITERATIONS + +_SC_THREAD_DESTRUCTOR_ITERATIONS + + + ) + +231 + m_SC_THREAD_KEYS_MAX +, + +232 + #_SC_THREAD_KEYS_MAX + +_SC_THREAD_KEYS_MAX + + + ) + +233 + m_SC_THREAD_STACK_MIN +, + +234 + #_SC_THREAD_STACK_MIN + +_SC_THREAD_STACK_MIN + + + ) + +235 + m_SC_THREAD_THREADS_MAX +, + +236 + #_SC_THREAD_THREADS_MAX + +_SC_THREAD_THREADS_MAX + + + ) + +237 + m_SC_THREAD_ATTR_STACKADDR +, + +238 + #_SC_THREAD_ATTR_STACKADDR + +_SC_THREAD_ATTR_STACKADDR + + + ) + +239 + m_SC_THREAD_ATTR_STACKSIZE +, + +240 + #_SC_THREAD_ATTR_STACKSIZE + +_SC_THREAD_ATTR_STACKSIZE + + + ) + +241 + m_SC_THREAD_PRIORITY_SCHEDULING +, + +242 + #_SC_THREAD_PRIORITY_SCHEDULING + +_SC_THREAD_PRIORITY_SCHEDULING + + + ) + +243 + m_SC_THREAD_PRIO_INHERIT +, + +244 + #_SC_THREAD_PRIO_INHERIT + +_SC_THREAD_PRIO_INHERIT + + + ) + +245 + m_SC_THREAD_PRIO_PROTECT +, + +246 + #_SC_THREAD_PRIO_PROTECT + +_SC_THREAD_PRIO_PROTECT + + + ) + +247 + m_SC_THREAD_PROCESS_SHARED +, + +248 + #_SC_THREAD_PROCESS_SHARED + +_SC_THREAD_PROCESS_SHARED + + + ) + +250 + m_SC_NPROCESSORS_CONF +, + +251 + #_SC_NPROCESSORS_CONF + +_SC_NPROCESSORS_CONF + + + ) + +252 + m_SC_NPROCESSORS_ONLN +, + +253 + #_SC_NPROCESSORS_ONLN + +_SC_NPROCESSORS_ONLN + + + ) + +254 + m_SC_PHYS_PAGES +, + +255 + #_SC_PHYS_PAGES + +_SC_PHYS_PAGES + + + ) + +256 + m_SC_AVPHYS_PAGES +, + +257 + #_SC_AVPHYS_PAGES + +_SC_AVPHYS_PAGES + + + ) + +258 + m_SC_ATEXIT_MAX +, + +259 + #_SC_ATEXIT_MAX + +_SC_ATEXIT_MAX + + + ) + +260 + m_SC_PASS_MAX +, + +261 + #_SC_PASS_MAX + +_SC_PASS_MAX + + + ) + +263 + m_SC_XOPEN_VERSION +, + +264 + #_SC_XOPEN_VERSION + +_SC_XOPEN_VERSION + + + ) + +265 + m_SC_XOPEN_XCU_VERSION +, + +266 + #_SC_XOPEN_XCU_VERSION + +_SC_XOPEN_XCU_VERSION + + + ) + +267 + m_SC_XOPEN_UNIX +, + +268 + #_SC_XOPEN_UNIX + +_SC_XOPEN_UNIX + + + ) + +269 + m_SC_XOPEN_CRYPT +, + +270 + #_SC_XOPEN_CRYPT + +_SC_XOPEN_CRYPT + + + ) + +271 + m_SC_XOPEN_ENH_I18N +, + +272 + #_SC_XOPEN_ENH_I18N + +_SC_XOPEN_ENH_I18N + + + ) + +273 + m_SC_XOPEN_SHM +, + +274 + #_SC_XOPEN_SHM + +_SC_XOPEN_SHM + + + ) + +276 + m_SC_2_CHAR_TERM +, + +277 + #_SC_2_CHAR_TERM + +_SC_2_CHAR_TERM + + + ) + +278 + m_SC_2_C_VERSION +, + +279 + #_SC_2_C_VERSION + +_SC_2_C_VERSION + + + ) + +280 + m_SC_2_UPE +, + +281 + #_SC_2_UPE + +_SC_2_UPE + + + ) + +283 + m_SC_XOPEN_XPG2 +, + +284 + #_SC_XOPEN_XPG2 + +_SC_XOPEN_XPG2 + + + ) + +285 + m_SC_XOPEN_XPG3 +, + +286 + #_SC_XOPEN_XPG3 + +_SC_XOPEN_XPG3 + + + ) + +287 + m_SC_XOPEN_XPG4 +, + +288 + #_SC_XOPEN_XPG4 + +_SC_XOPEN_XPG4 + + + ) + +290 + m_SC_CHAR_BIT +, + +291 + #_SC_CHAR_BIT + +_SC_CHAR_BIT + + + ) + +292 + m_SC_CHAR_MAX +, + +293 + #_SC_CHAR_MAX + +_SC_CHAR_MAX + + + ) + +294 + m_SC_CHAR_MIN +, + +295 + #_SC_CHAR_MIN + +_SC_CHAR_MIN + + + ) + +296 + m_SC_INT_MAX +, + +297 + #_SC_INT_MAX + +_SC_INT_MAX + + + ) + +298 + m_SC_INT_MIN +, + +299 + #_SC_INT_MIN + +_SC_INT_MIN + + + ) + +300 + m_SC_LONG_BIT +, + +301 + #_SC_LONG_BIT + +_SC_LONG_BIT + + + ) + +302 + m_SC_WORD_BIT +, + +303 + #_SC_WORD_BIT + +_SC_WORD_BIT + + + ) + +304 + m_SC_MB_LEN_MAX +, + +305 + #_SC_MB_LEN_MAX + +_SC_MB_LEN_MAX + + + ) + +306 + m_SC_NZERO +, + +307 + #_SC_NZERO + +_SC_NZERO + + + ) + +308 + m_SC_SSIZE_MAX +, + +309 + #_SC_SSIZE_MAX + +_SC_SSIZE_MAX + + + ) + +310 + m_SC_SCHAR_MAX +, + +311 + #_SC_SCHAR_MAX + +_SC_SCHAR_MAX + + + ) + +312 + m_SC_SCHAR_MIN +, + +313 + #_SC_SCHAR_MIN + +_SC_SCHAR_MIN + + + ) + +314 + m_SC_SHRT_MAX +, + +315 + #_SC_SHRT_MAX + +_SC_SHRT_MAX + + + ) + +316 + m_SC_SHRT_MIN +, + +317 + #_SC_SHRT_MIN + +_SC_SHRT_MIN + + + ) + +318 + m_SC_UCHAR_MAX +, + +319 + #_SC_UCHAR_MAX + +_SC_UCHAR_MAX + + + ) + +320 + m_SC_UINT_MAX +, + +321 + #_SC_UINT_MAX + +_SC_UINT_MAX + + + ) + +322 + m_SC_ULONG_MAX +, + +323 + #_SC_ULONG_MAX + +_SC_ULONG_MAX + + + ) + +324 + m_SC_USHRT_MAX +, + +325 + #_SC_USHRT_MAX + +_SC_USHRT_MAX + + + ) + +327 + m_SC_NL_ARGMAX +, + +328 + #_SC_NL_ARGMAX + +_SC_NL_ARGMAX + + + ) + +329 + m_SC_NL_LANGMAX +, + +330 + #_SC_NL_LANGMAX + +_SC_NL_LANGMAX + + + ) + +331 + m_SC_NL_MSGMAX +, + +332 + #_SC_NL_MSGMAX + +_SC_NL_MSGMAX + + + ) + +333 + m_SC_NL_NMAX +, + +334 + #_SC_NL_NMAX + +_SC_NL_NMAX + + + ) + +335 + m_SC_NL_SETMAX +, + +336 + #_SC_NL_SETMAX + +_SC_NL_SETMAX + + + ) + +337 + m_SC_NL_TEXTMAX +, + +338 + #_SC_NL_TEXTMAX + +_SC_NL_TEXTMAX + + + ) + +340 + m_SC_XBS5_ILP32_OFF32 +, + +341 + #_SC_XBS5_ILP32_OFF32 + +_SC_XBS5_ILP32_OFF32 + + + ) + +342 + m_SC_XBS5_ILP32_OFFBIG +, + +343 + #_SC_XBS5_ILP32_OFFBIG + +_SC_XBS5_ILP32_OFFBIG + + + ) + +344 + m_SC_XBS5_LP64_OFF64 +, + +345 + #_SC_XBS5_LP64_OFF64 + +_SC_XBS5_LP64_OFF64 + + + ) + +346 + m_SC_XBS5_LPBIG_OFFBIG +, + +347 + #_SC_XBS5_LPBIG_OFFBIG + +_SC_XBS5_LPBIG_OFFBIG + + + ) + +349 + m_SC_XOPEN_LEGACY +, + +350 + #_SC_XOPEN_LEGACY + +_SC_XOPEN_LEGACY + + + ) + +351 + m_SC_XOPEN_REALTIME +, + +352 + #_SC_XOPEN_REALTIME + +_SC_XOPEN_REALTIME + + + ) + +353 + m_SC_XOPEN_REALTIME_THREADS +, + +354 + #_SC_XOPEN_REALTIME_THREADS + +_SC_XOPEN_REALTIME_THREADS + + + ) + +356 + m_SC_ADVISORY_INFO +, + +357 + #_SC_ADVISORY_INFO + +_SC_ADVISORY_INFO + + + ) + +358 + m_SC_BARRIERS +, + +359 + #_SC_BARRIERS + +_SC_BARRIERS + + + ) + +360 + m_SC_BASE +, + +361 + #_SC_BASE + +_SC_BASE + + + ) + +362 + m_SC_C_LANG_SUPPORT +, + +363 + #_SC_C_LANG_SUPPORT + +_SC_C_LANG_SUPPORT + + + ) + +364 + m_SC_C_LANG_SUPPORT_R +, + +365 + #_SC_C_LANG_SUPPORT_R + +_SC_C_LANG_SUPPORT_R + + + ) + +366 + m_SC_CLOCK_SELECTION +, + +367 + #_SC_CLOCK_SELECTION + +_SC_CLOCK_SELECTION + + + ) + +368 + m_SC_CPUTIME +, + +369 + #_SC_CPUTIME + +_SC_CPUTIME + + + ) + +370 + m_SC_THREAD_CPUTIME +, + +371 + #_SC_THREAD_CPUTIME + +_SC_THREAD_CPUTIME + + + ) + +372 + m_SC_DEVICE_IO +, + +373 + #_SC_DEVICE_IO + +_SC_DEVICE_IO + + + ) + +374 + m_SC_DEVICE_SPECIFIC +, + +375 + #_SC_DEVICE_SPECIFIC + +_SC_DEVICE_SPECIFIC + + + ) + +376 + m_SC_DEVICE_SPECIFIC_R +, + +377 + #_SC_DEVICE_SPECIFIC_R + +_SC_DEVICE_SPECIFIC_R + + + ) + +378 + m_SC_FD_MGMT +, + +379 + #_SC_FD_MGMT + +_SC_FD_MGMT + + + ) + +380 + m_SC_FIFO +, + +381 + #_SC_FIFO + +_SC_FIFO + + + ) + +382 + m_SC_PIPE +, + +383 + #_SC_PIPE + +_SC_PIPE + + + ) + +384 + m_SC_FILE_ATTRIBUTES +, + +385 + #_SC_FILE_ATTRIBUTES + +_SC_FILE_ATTRIBUTES + + + ) + +386 + m_SC_FILE_LOCKING +, + +387 + #_SC_FILE_LOCKING + +_SC_FILE_LOCKING + + + ) + +388 + m_SC_FILE_SYSTEM +, + +389 + #_SC_FILE_SYSTEM + +_SC_FILE_SYSTEM + + + ) + +390 + m_SC_MONOTONIC_CLOCK +, + +391 + #_SC_MONOTONIC_CLOCK + +_SC_MONOTONIC_CLOCK + + + ) + +392 + m_SC_MULTI_PROCESS +, + +393 + #_SC_MULTI_PROCESS + +_SC_MULTI_PROCESS + + + ) + +394 + m_SC_SINGLE_PROCESS +, + +395 + #_SC_SINGLE_PROCESS + +_SC_SINGLE_PROCESS + + + ) + +396 + m_SC_NETWORKING +, + +397 + #_SC_NETWORKING + +_SC_NETWORKING + + + ) + +398 + m_SC_READER_WRITER_LOCKS +, + +399 + #_SC_READER_WRITER_LOCKS + +_SC_READER_WRITER_LOCKS + + + ) + +400 + m_SC_SPIN_LOCKS +, + +401 + #_SC_SPIN_LOCKS + +_SC_SPIN_LOCKS + + + ) + +402 + m_SC_REGEXP +, + +403 + #_SC_REGEXP + +_SC_REGEXP + + + ) + +404 + m_SC_REGEX_VERSION +, + +405 + #_SC_REGEX_VERSION + +_SC_REGEX_VERSION + + + ) + +406 + m_SC_SHELL +, + +407 + #_SC_SHELL + +_SC_SHELL + + + ) + +408 + m_SC_SIGNALS +, + +409 + #_SC_SIGNALS + +_SC_SIGNALS + + + ) + +410 + m_SC_SPAWN +, + +411 + #_SC_SPAWN + +_SC_SPAWN + + + ) + +412 + m_SC_SPORADIC_SERVER +, + +413 + #_SC_SPORADIC_SERVER + +_SC_SPORADIC_SERVER + + + ) + +414 + m_SC_THREAD_SPORADIC_SERVER +, + +415 + #_SC_THREAD_SPORADIC_SERVER + +_SC_THREAD_SPORADIC_SERVER + + + ) + +416 + m_SC_SYSTEM_DATABASE +, + +417 + #_SC_SYSTEM_DATABASE + +_SC_SYSTEM_DATABASE + + + ) + +418 + m_SC_SYSTEM_DATABASE_R +, + +419 + #_SC_SYSTEM_DATABASE_R + +_SC_SYSTEM_DATABASE_R + + + ) + +420 + m_SC_TIMEOUTS +, + +421 + #_SC_TIMEOUTS + +_SC_TIMEOUTS + + + ) + +422 + m_SC_TYPED_MEMORY_OBJECTS +, + +423 + #_SC_TYPED_MEMORY_OBJECTS + +_SC_TYPED_MEMORY_OBJECTS + + + ) + +424 + m_SC_USER_GROUPS +, + +425 + #_SC_USER_GROUPS + +_SC_USER_GROUPS + + + ) + +426 + m_SC_USER_GROUPS_R +, + +427 + #_SC_USER_GROUPS_R + +_SC_USER_GROUPS_R + + + ) + +428 + m_SC_2_PBS +, + +429 + #_SC_2_PBS + +_SC_2_PBS + + + ) + +430 + m_SC_2_PBS_ACCOUNTING +, + +431 + #_SC_2_PBS_ACCOUNTING + +_SC_2_PBS_ACCOUNTING + + + ) + +432 + m_SC_2_PBS_LOCATE +, + +433 + #_SC_2_PBS_LOCATE + +_SC_2_PBS_LOCATE + + + ) + +434 + m_SC_2_PBS_MESSAGE +, + +435 + #_SC_2_PBS_MESSAGE + +_SC_2_PBS_MESSAGE + + + ) + +436 + m_SC_2_PBS_TRACK +, + +437 + #_SC_2_PBS_TRACK + +_SC_2_PBS_TRACK + + + ) + +438 + m_SC_SYMLOOP_MAX +, + +439 + #_SC_SYMLOOP_MAX + +_SC_SYMLOOP_MAX + + + ) + +440 + m_SC_STREAMS +, + +441 + #_SC_STREAMS + +_SC_STREAMS + + + ) + +442 + m_SC_2_PBS_CHECKPOINT +, + +443 + #_SC_2_PBS_CHECKPOINT + +_SC_2_PBS_CHECKPOINT + + + ) + +445 + m_SC_V6_ILP32_OFF32 +, + +446 + #_SC_V6_ILP32_OFF32 + +_SC_V6_ILP32_OFF32 + + + ) + +447 + m_SC_V6_ILP32_OFFBIG +, + +448 + #_SC_V6_ILP32_OFFBIG + +_SC_V6_ILP32_OFFBIG + + + ) + +449 + m_SC_V6_LP64_OFF64 +, + +450 + #_SC_V6_LP64_OFF64 + +_SC_V6_LP64_OFF64 + + + ) + +451 + m_SC_V6_LPBIG_OFFBIG +, + +452 + #_SC_V6_LPBIG_OFFBIG + +_SC_V6_LPBIG_OFFBIG + + + ) + +454 + m_SC_HOST_NAME_MAX +, + +455 + #_SC_HOST_NAME_MAX + +_SC_HOST_NAME_MAX + + + ) + +456 + m_SC_TRACE +, + +457 + #_SC_TRACE + +_SC_TRACE + + + ) + +458 + m_SC_TRACE_EVENT_FILTER +, + +459 + #_SC_TRACE_EVENT_FILTER + +_SC_TRACE_EVENT_FILTER + + + ) + +460 + m_SC_TRACE_INHERIT +, + +461 + #_SC_TRACE_INHERIT + +_SC_TRACE_INHERIT + + + ) + +462 + m_SC_TRACE_LOG +, + +463 + #_SC_TRACE_LOG + +_SC_TRACE_LOG + + + ) + +465 + m_SC_LEVEL1_ICACHE_SIZE +, + +466 + #_SC_LEVEL1_ICACHE_SIZE + +_SC_LEVEL1_ICACHE_SIZE + + + ) + +467 + m_SC_LEVEL1_ICACHE_ASSOC +, + +468 + #_SC_LEVEL1_ICACHE_ASSOC + +_SC_LEVEL1_ICACHE_ASSOC + + + ) + +469 + m_SC_LEVEL1_ICACHE_LINESIZE +, + +470 + #_SC_LEVEL1_ICACHE_LINESIZE + +_SC_LEVEL1_ICACHE_LINESIZE + + + ) + +471 + m_SC_LEVEL1_DCACHE_SIZE +, + +472 + #_SC_LEVEL1_DCACHE_SIZE + +_SC_LEVEL1_DCACHE_SIZE + + + ) + +473 + m_SC_LEVEL1_DCACHE_ASSOC +, + +474 + #_SC_LEVEL1_DCACHE_ASSOC + +_SC_LEVEL1_DCACHE_ASSOC + + + ) + +475 + m_SC_LEVEL1_DCACHE_LINESIZE +, + +476 + #_SC_LEVEL1_DCACHE_LINESIZE + +_SC_LEVEL1_DCACHE_LINESIZE + + + ) + +477 + m_SC_LEVEL2_CACHE_SIZE +, + +478 + #_SC_LEVEL2_CACHE_SIZE + +_SC_LEVEL2_CACHE_SIZE + + + ) + +479 + m_SC_LEVEL2_CACHE_ASSOC +, + +480 + #_SC_LEVEL2_CACHE_ASSOC + +_SC_LEVEL2_CACHE_ASSOC + + + ) + +481 + m_SC_LEVEL2_CACHE_LINESIZE +, + +482 + #_SC_LEVEL2_CACHE_LINESIZE + +_SC_LEVEL2_CACHE_LINESIZE + + + ) + +483 + m_SC_LEVEL3_CACHE_SIZE +, + +484 + #_SC_LEVEL3_CACHE_SIZE + +_SC_LEVEL3_CACHE_SIZE + + + ) + +485 + m_SC_LEVEL3_CACHE_ASSOC +, + +486 + #_SC_LEVEL3_CACHE_ASSOC + +_SC_LEVEL3_CACHE_ASSOC + + + ) + +487 + m_SC_LEVEL3_CACHE_LINESIZE +, + +488 + #_SC_LEVEL3_CACHE_LINESIZE + +_SC_LEVEL3_CACHE_LINESIZE + + + ) + +489 + m_SC_LEVEL4_CACHE_SIZE +, + +490 + #_SC_LEVEL4_CACHE_SIZE + +_SC_LEVEL4_CACHE_SIZE + + + ) + +491 + m_SC_LEVEL4_CACHE_ASSOC +, + +492 + #_SC_LEVEL4_CACHE_ASSOC + +_SC_LEVEL4_CACHE_ASSOC + + + ) + +493 + m_SC_LEVEL4_CACHE_LINESIZE +, + +494 + #_SC_LEVEL4_CACHE_LINESIZE + +_SC_LEVEL4_CACHE_LINESIZE + + + ) + +497 + m_SC_IPV6 + = +_SC_LEVEL1_ICACHE_SIZE + + 50, + +498 + #_SC_IPV6 + +_SC_IPV6 + + + ) + +499 + m_SC_RAW_SOCKETS +, + +500 + #_SC_RAW_SOCKETS + +_SC_RAW_SOCKETS + + + ) + +502 + m_SC_V7_ILP32_OFF32 +, + +503 + #_SC_V7_ILP32_OFF32 + +_SC_V7_ILP32_OFF32 + + + ) + +504 + m_SC_V7_ILP32_OFFBIG +, + +505 + #_SC_V7_ILP32_OFFBIG + +_SC_V7_ILP32_OFFBIG + + + ) + +506 + m_SC_V7_LP64_OFF64 +, + +507 + #_SC_V7_LP64_OFF64 + +_SC_V7_LP64_OFF64 + + + ) + +508 + m_SC_V7_LPBIG_OFFBIG +, + +509 + #_SC_V7_LPBIG_OFFBIG + +_SC_V7_LPBIG_OFFBIG + + + ) + +511 + m_SC_SS_REPL_MAX +, + +512 + #_SC_SS_REPL_MAX + +_SC_SS_REPL_MAX + + + ) + +514 + m_SC_TRACE_EVENT_NAME_MAX +, + +515 + #_SC_TRACE_EVENT_NAME_MAX + +_SC_TRACE_EVENT_NAME_MAX + + + ) + +516 + m_SC_TRACE_NAME_MAX +, + +517 + #_SC_TRACE_NAME_MAX + +_SC_TRACE_NAME_MAX + + + ) + +518 + m_SC_TRACE_SYS_MAX +, + +519 + #_SC_TRACE_SYS_MAX + +_SC_TRACE_SYS_MAX + + + ) + +520 + m_SC_TRACE_USER_EVENT_MAX +, + +521 + #_SC_TRACE_USER_EVENT_MAX + +_SC_TRACE_USER_EVENT_MAX + + + ) + +523 + m_SC_XOPEN_STREAMS +, + +524 + #_SC_XOPEN_STREAMS + +_SC_XOPEN_STREAMS + + + ) + +526 + m_SC_THREAD_ROBUST_PRIO_INHERIT +, + +527 + #_SC_THREAD_ROBUST_PRIO_INHERIT + +_SC_THREAD_ROBUST_PRIO_INHERIT + + + ) + +528 + m_SC_THREAD_ROBUST_PRIO_PROTECT + + +529 + #_SC_THREAD_ROBUST_PRIO_PROTECT + +_SC_THREAD_ROBUST_PRIO_PROTECT + + + ) + +535 + m_CS_PATH +, + +536 + #_CS_PATH + +_CS_PATH + + + ) + +538 + m_CS_V6_WIDTH_RESTRICTED_ENVS +, + +539 + #_CS_V6_WIDTH_RESTRICTED_ENVS + +_CS_V6_WIDTH_RESTRICTED_ENVS + + + ) + +540 + #_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS + +_CS_V6_WIDTH_RESTRICTED_ENVS + + + ) + +542 + m_CS_GNU_LIBC_VERSION +, + +543 + #_CS_GNU_LIBC_VERSION + +_CS_GNU_LIBC_VERSION + + + ) + +544 + m_CS_GNU_LIBPTHREAD_VERSION +, + +545 + #_CS_GNU_LIBPTHREAD_VERSION + +_CS_GNU_LIBPTHREAD_VERSION + + + ) + +547 + m_CS_V5_WIDTH_RESTRICTED_ENVS +, + +548 + #_CS_V5_WIDTH_RESTRICTED_ENVS + +_CS_V5_WIDTH_RESTRICTED_ENVS + + + ) + +549 + #_CS_POSIX_V5_WIDTH_RESTRICTED_ENVS + +_CS_V5_WIDTH_RESTRICTED_ENVS + + + ) + +551 + m_CS_V7_WIDTH_RESTRICTED_ENVS +, + +552 + #_CS_V7_WIDTH_RESTRICTED_ENVS + +_CS_V7_WIDTH_RESTRICTED_ENVS + + + ) + +553 + #_CS_POSIX_V7_WIDTH_RESTRICTED_ENVS + +_CS_V7_WIDTH_RESTRICTED_ENVS + + + ) + +555 + m_CS_LFS_CFLAGS + = 1000, + +556 + #_CS_LFS_CFLAGS + +_CS_LFS_CFLAGS + + + ) + +557 + m_CS_LFS_LDFLAGS +, + +558 + #_CS_LFS_LDFLAGS + +_CS_LFS_LDFLAGS + + + ) + +559 + m_CS_LFS_LIBS +, + +560 + #_CS_LFS_LIBS + +_CS_LFS_LIBS + + + ) + +561 + m_CS_LFS_LINTFLAGS +, + +562 + #_CS_LFS_LINTFLAGS + +_CS_LFS_LINTFLAGS + + + ) + +563 + m_CS_LFS64_CFLAGS +, + +564 + #_CS_LFS64_CFLAGS + +_CS_LFS64_CFLAGS + + + ) + +565 + m_CS_LFS64_LDFLAGS +, + +566 + #_CS_LFS64_LDFLAGS + +_CS_LFS64_LDFLAGS + + + ) + +567 + m_CS_LFS64_LIBS +, + +568 + #_CS_LFS64_LIBS + +_CS_LFS64_LIBS + + + ) + +569 + m_CS_LFS64_LINTFLAGS +, + +570 + #_CS_LFS64_LINTFLAGS + +_CS_LFS64_LINTFLAGS + + + ) + +572 + m_CS_XBS5_ILP32_OFF32_CFLAGS + = 1100, + +573 + #_CS_XBS5_ILP32_OFF32_CFLAGS + +_CS_XBS5_ILP32_OFF32_CFLAGS + + + ) + +574 + m_CS_XBS5_ILP32_OFF32_LDFLAGS +, + +575 + #_CS_XBS5_ILP32_OFF32_LDFLAGS + +_CS_XBS5_ILP32_OFF32_LDFLAGS + + + ) + +576 + m_CS_XBS5_ILP32_OFF32_LIBS +, + +577 + #_CS_XBS5_ILP32_OFF32_LIBS + +_CS_XBS5_ILP32_OFF32_LIBS + + + ) + +578 + m_CS_XBS5_ILP32_OFF32_LINTFLAGS +, + +579 + #_CS_XBS5_ILP32_OFF32_LINTFLAGS + +_CS_XBS5_ILP32_OFF32_LINTFLAGS + + + ) + +580 + m_CS_XBS5_ILP32_OFFBIG_CFLAGS +, + +581 + #_CS_XBS5_ILP32_OFFBIG_CFLAGS + +_CS_XBS5_ILP32_OFFBIG_CFLAGS + + + ) + +582 + m_CS_XBS5_ILP32_OFFBIG_LDFLAGS +, + +583 + #_CS_XBS5_ILP32_OFFBIG_LDFLAGS + +_CS_XBS5_ILP32_OFFBIG_LDFLAGS + + + ) + +584 + m_CS_XBS5_ILP32_OFFBIG_LIBS +, + +585 + #_CS_XBS5_ILP32_OFFBIG_LIBS + +_CS_XBS5_ILP32_OFFBIG_LIBS + + + ) + +586 + m_CS_XBS5_ILP32_OFFBIG_LINTFLAGS +, + +587 + #_CS_XBS5_ILP32_OFFBIG_LINTFLAGS + +_CS_XBS5_ILP32_OFFBIG_LINTFLAGS + + + ) + +588 + m_CS_XBS5_LP64_OFF64_CFLAGS +, + +589 + #_CS_XBS5_LP64_OFF64_CFLAGS + +_CS_XBS5_LP64_OFF64_CFLAGS + + + ) + +590 + m_CS_XBS5_LP64_OFF64_LDFLAGS +, + +591 + #_CS_XBS5_LP64_OFF64_LDFLAGS + +_CS_XBS5_LP64_OFF64_LDFLAGS + + + ) + +592 + m_CS_XBS5_LP64_OFF64_LIBS +, + +593 + #_CS_XBS5_LP64_OFF64_LIBS + +_CS_XBS5_LP64_OFF64_LIBS + + + ) + +594 + m_CS_XBS5_LP64_OFF64_LINTFLAGS +, + +595 + #_CS_XBS5_LP64_OFF64_LINTFLAGS + +_CS_XBS5_LP64_OFF64_LINTFLAGS + + + ) + +596 + m_CS_XBS5_LPBIG_OFFBIG_CFLAGS +, + +597 + #_CS_XBS5_LPBIG_OFFBIG_CFLAGS + +_CS_XBS5_LPBIG_OFFBIG_CFLAGS + + + ) + +598 + m_CS_XBS5_LPBIG_OFFBIG_LDFLAGS +, + +599 + #_CS_XBS5_LPBIG_OFFBIG_LDFLAGS + +_CS_XBS5_LPBIG_OFFBIG_LDFLAGS + + + ) + +600 + m_CS_XBS5_LPBIG_OFFBIG_LIBS +, + +601 + #_CS_XBS5_LPBIG_OFFBIG_LIBS + +_CS_XBS5_LPBIG_OFFBIG_LIBS + + + ) + +602 + m_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS +, + +603 + #_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS + +_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS + + + ) + +605 + m_CS_POSIX_V6_ILP32_OFF32_CFLAGS +, + +606 + #_CS_POSIX_V6_ILP32_OFF32_CFLAGS + +_CS_POSIX_V6_ILP32_OFF32_CFLAGS + + + ) + +607 + m_CS_POSIX_V6_ILP32_OFF32_LDFLAGS +, + +608 + #_CS_POSIX_V6_ILP32_OFF32_LDFLAGS + +_CS_POSIX_V6_ILP32_OFF32_LDFLAGS + + + ) + +609 + m_CS_POSIX_V6_ILP32_OFF32_LIBS +, + +610 + #_CS_POSIX_V6_ILP32_OFF32_LIBS + +_CS_POSIX_V6_ILP32_OFF32_LIBS + + + ) + +611 + m_CS_POSIX_V6_ILP32_OFF32_LINTFLAGS +, + +612 + #_CS_POSIX_V6_ILP32_OFF32_LINTFLAGS + +_CS_POSIX_V6_ILP32_OFF32_LINTFLAGS + + + ) + +613 + m_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS +, + +614 + #_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS + +_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS + + + ) + +615 + m_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS +, + +616 + #_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS + +_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS + + + ) + +617 + m_CS_POSIX_V6_ILP32_OFFBIG_LIBS +, + +618 + #_CS_POSIX_V6_ILP32_OFFBIG_LIBS + +_CS_POSIX_V6_ILP32_OFFBIG_LIBS + + + ) + +619 + m_CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS +, + +620 + #_CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS + +_CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS + + + ) + +621 + m_CS_POSIX_V6_LP64_OFF64_CFLAGS +, + +622 + #_CS_POSIX_V6_LP64_OFF64_CFLAGS + +_CS_POSIX_V6_LP64_OFF64_CFLAGS + + + ) + +623 + m_CS_POSIX_V6_LP64_OFF64_LDFLAGS +, + +624 + #_CS_POSIX_V6_LP64_OFF64_LDFLAGS + +_CS_POSIX_V6_LP64_OFF64_LDFLAGS + + + ) + +625 + m_CS_POSIX_V6_LP64_OFF64_LIBS +, + +626 + #_CS_POSIX_V6_LP64_OFF64_LIBS + +_CS_POSIX_V6_LP64_OFF64_LIBS + + + ) + +627 + m_CS_POSIX_V6_LP64_OFF64_LINTFLAGS +, + +628 + #_CS_POSIX_V6_LP64_OFF64_LINTFLAGS + +_CS_POSIX_V6_LP64_OFF64_LINTFLAGS + + + ) + +629 + m_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS +, + +630 + #_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS + +_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS + + + ) + +631 + m_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS +, + +632 + #_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS + +_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS + + + ) + +633 + m_CS_POSIX_V6_LPBIG_OFFBIG_LIBS +, + +634 + #_CS_POSIX_V6_LPBIG_OFFBIG_LIBS + +_CS_POSIX_V6_LPBIG_OFFBIG_LIBS + + + ) + +635 + m_CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS +, + +636 + #_CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS + +_CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS + + + ) + +638 + m_CS_POSIX_V7_ILP32_OFF32_CFLAGS +, + +639 + #_CS_POSIX_V7_ILP32_OFF32_CFLAGS + +_CS_POSIX_V7_ILP32_OFF32_CFLAGS + + + ) + +640 + m_CS_POSIX_V7_ILP32_OFF32_LDFLAGS +, + +641 + #_CS_POSIX_V7_ILP32_OFF32_LDFLAGS + +_CS_POSIX_V7_ILP32_OFF32_LDFLAGS + + + ) + +642 + m_CS_POSIX_V7_ILP32_OFF32_LIBS +, + +643 + #_CS_POSIX_V7_ILP32_OFF32_LIBS + +_CS_POSIX_V7_ILP32_OFF32_LIBS + + + ) + +644 + m_CS_POSIX_V7_ILP32_OFF32_LINTFLAGS +, + +645 + #_CS_POSIX_V7_ILP32_OFF32_LINTFLAGS + +_CS_POSIX_V7_ILP32_OFF32_LINTFLAGS + + + ) + +646 + m_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS +, + +647 + #_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS + +_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS + + + ) + +648 + m_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS +, + +649 + #_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS + +_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS + + + ) + +650 + m_CS_POSIX_V7_ILP32_OFFBIG_LIBS +, + +651 + #_CS_POSIX_V7_ILP32_OFFBIG_LIBS + +_CS_POSIX_V7_ILP32_OFFBIG_LIBS + + + ) + +652 + m_CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS +, + +653 + #_CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS + +_CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS + + + ) + +654 + m_CS_POSIX_V7_LP64_OFF64_CFLAGS +, + +655 + #_CS_POSIX_V7_LP64_OFF64_CFLAGS + +_CS_POSIX_V7_LP64_OFF64_CFLAGS + + + ) + +656 + m_CS_POSIX_V7_LP64_OFF64_LDFLAGS +, + +657 + #_CS_POSIX_V7_LP64_OFF64_LDFLAGS + +_CS_POSIX_V7_LP64_OFF64_LDFLAGS + + + ) + +658 + m_CS_POSIX_V7_LP64_OFF64_LIBS +, + +659 + #_CS_POSIX_V7_LP64_OFF64_LIBS + +_CS_POSIX_V7_LP64_OFF64_LIBS + + + ) + +660 + m_CS_POSIX_V7_LP64_OFF64_LINTFLAGS +, + +661 + #_CS_POSIX_V7_LP64_OFF64_LINTFLAGS + +_CS_POSIX_V7_LP64_OFF64_LINTFLAGS + + + ) + +662 + m_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS +, + +663 + #_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS + +_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS + + + ) + +664 + m_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS +, + +665 + #_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS + +_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS + + + ) + +666 + m_CS_POSIX_V7_LPBIG_OFFBIG_LIBS +, + +667 + #_CS_POSIX_V7_LPBIG_OFFBIG_LIBS + +_CS_POSIX_V7_LPBIG_OFFBIG_LIBS + + + ) + +668 + m_CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS +, + +669 + #_CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS + +_CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS + + + ) + +671 + m_CS_V6_ENV +, + +672 + #_CS_V6_ENV + +_CS_V6_ENV + + + ) + +673 + m_CS_V7_ENV + + +674 + #_CS_V7_ENV + +_CS_V7_ENV + + + ) + + @/usr/include/bits/environments.h + +18 #i�de� +_UNISTD_H + + +22 + ~<b�s/w�dsize.h +> + +42 #i� +__WORDSIZE + == 64 + +56 + #_POSIX_V7_LPBIG_OFFBIG + -1 + + ) + +57 + #_POSIX_V6_LPBIG_OFFBIG + -1 + + ) + +58 + #_XBS5_LPBIG_OFFBIG + -1 + + ) + +61 + #_POSIX_V7_LP64_OFF64 + 1 + + ) + +62 + #_POSIX_V6_LP64_OFF64 + 1 + + ) + +63 + #_XBS5_LP64_OFF64 + 1 + + ) + +69 + #_POSIX_V7_ILP32_OFFBIG + 1 + + ) + +70 + #_POSIX_V6_ILP32_OFFBIG + 1 + + ) + +71 + #_XBS5_ILP32_OFFBIG + 1 + + ) + +73 #i�de� +__x86_64__ + + +75 + #_POSIX_V7_ILP32_OFF32 + 1 + + ) + +76 + #_POSIX_V6_ILP32_OFF32 + 1 + + ) + +77 + #_XBS5_ILP32_OFF32 + 1 + + ) + +95 + #__ILP32_OFF32_CFLAGS + "-m32" + + ) + +96 + #__ILP32_OFF32_LDFLAGS + "-m32" + + ) + +97 #i� +def�ed + +__x86_64__ + && def�ed +__ILP32__ + + +98 + #__ILP32_OFFBIG_CFLAGS + "-mx32" + + ) + +99 + #__ILP32_OFFBIG_LDFLAGS + "-mx32" + + ) + +101 + #__ILP32_OFFBIG_CFLAGS + "-m32 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" + + ) + +102 + #__ILP32_OFFBIG_LDFLAGS + "-m32" + + ) + +104 + #__LP64_OFF64_CFLAGS + "-m64" + + ) + +105 + #__LP64_OFF64_LDFLAGS + "-m64" + + ) + + @/usr/include/bits/epoll.h + +18 #i�def +_SYS_EPOLL_H + + +25 + mEPOLL_CLOEXEC + = 02000000 + +26 + #EPOLL_CLOEXEC + +EPOLL_CLOEXEC + + + ) + +29 + #__EPOLL_PACKED + + `__��ibu�__ + (( +__�cked__ +)) + + ) + + @/usr/include/bits/errno.h + +19 #ifde� +_ERRNO_H + + +21 #unde� +EDOM + + +22 #unde� +EILSEQ + + +23 #unde� +ERANGE + + +24 + ~<l�ux/��o.h +> + +27 + #ENOTSUP + +EOPNOTSUPP + + + ) + +30 #i�de� +ECANCELED + + +31 + #ECANCELED + 125 + + ) + +35 #i�de� +EOWNERDEAD + + +36 + #EOWNERDEAD + 130 + + ) + +37 + #ENOTRECOVERABLE + 131 + + ) + +40 #i�de� +ERFKILL + + +41 + #ERFKILL + 132 + + ) + +44 #i�de� +EHWPOISON + + +45 + #EHWPOISON + 133 + + ) + +48 #i�de� +__ASSEMBLER__ + + +50 * + $__��o_lo�ti� + (� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +52 #i�! +def�ed + +_LIBC + || def�ed +_LIBC_REENTRANT + + +54 + #��o + (* + `__��o_lo�ti� + ()) + + ) + +59 #i�! +def�ed + +_ERRNO_H + && def�ed +__�ed_Em�h + + +63 + #EDOM + 33 + + ) + +64 + #EILSEQ + 84 + + ) + +65 + #ERANGE + 34 + + ) + + @/usr/include/bits/fcntl.h + +19 #i�de� +_FCNTL_H + + +23 #ifde� +__x86_64__ + + +24 + #__O_LARGEFILE + 0 + + ) + +27 #ifde� +__x86_64__ + + +29 + #F_GETLK64 + 5 + + ) + +30 + #F_SETLK64 + 6 + + ) + +31 + #F_SETLKW64 + 7 + + ) + +35 + s�ock + + +37 + ml_ty� +; + +38 + ml_wh�� +; + +39 #i�de� +__USE_FILE_OFFSET64 + + +40 +__off_t + + ml_��t +; + +41 +__off_t + + ml_�n +; + +43 +__off64_t + + ml_��t +; + +44 +__off64_t + + ml_�n +; + +46 +__pid_t + + ml_pid +; + +49 #ifde� +__USE_LARGEFILE64 + + +50 + s�ock64 + + +52 + ml_ty� +; + +53 + ml_wh�� +; + +54 +__off64_t + + ml_��t +; + +55 +__off64_t + + ml_�n +; + +56 +__pid_t + + ml_pid +; + +61 + ~<b�s/f��-l�ux.h +> + + @/usr/include/bits/fcntl2.h + +19 #i�def +_FCNTL_H + + +25 #i�de� +__USE_FILE_OFFSET64 + + +26 + $__ݒ_2 + (cڡ * +__�th +, +__o�ag +� + `__n�nu� + ((1)); + +27 + `__REDIRECT + ( +__ݒ_��s +, (cڡ * +__�th +, +__o�ag +, ...), + +28 +ݒ +� + `__n�nu� + ((1)); + +30 + `__REDIRECT + ( +__ݒ_2 +, (cڡ * +__�th +, +__o�ag +), + +31 +__ݒ64_2 +� + `__n�nu� + ((1)); + +32 + `__REDIRECT + ( +__ݒ_��s +, (cڡ * +__�th +, +__o�ag +, ...), + +33 +ݒ64 +� + `__n�nu� + ((1)); + +35 + `__�r�de� + ( +__ݒ_too_m�y_�gs +, + +37 + `__�r�de� + ( +__ݒ_miss�g_mode +, + +40 +__f�tify_fun�i� + + +41 + $ݒ + (cڡ * +__�th +, +__o�ag +, ...) + +43 i�( + `__va_�g_�ck_�n + () > 1) + +44 + `__ݒ_too_m�y_�gs + (); + +46 i�( + `__bu�t�_cڡ�t_p + ( +__o�ag +)) + +48 i�(( +__o�ag + & +O_CREAT +�!�0 && + `__va_�g_�ck_�n + () < 1) + +50 + `__ݒ_miss�g_mode + (); + +51 + `__ݒ_2 + ( +__�th +, +__o�ag +); + +53 + `__ݒ_��s + ( +__�th +, +__o�ag +, + `__va_�g_�ck + ()); + +56 i�( + `__va_�g_�ck_�n + () < 1) + +57 + `__ݒ_2 + ( +__�th +, +__o�ag +); + +59 + `__ݒ_��s + ( +__�th +, +__o�ag +, + `__va_�g_�ck + ()); + +60 + } +} + +63 #ifde� +__USE_LARGEFILE64 + + +64 + $__ݒ64_2 + (cڡ * +__�th +, +__o�ag +� + `__n�nu� + ((1)); + +65 + `__REDIRECT + ( +__ݒ64_��s +, (cڡ * +__�th +, +__o�ag +, + +66 ...), +ݒ64 +� + `__n�nu� + ((1)); + +67 + `__�r�de� + ( +__ݒ64_too_m�y_�gs +, + +69 + `__�r�de� + ( +__ݒ64_miss�g_mode +, + +72 +__f�tify_fun�i� + + +73 + $ݒ64 + (cڡ * +__�th +, +__o�ag +, ...) + +75 i�( + `__va_�g_�ck_�n + () > 1) + +76 + `__ݒ64_too_m�y_�gs + (); + +78 i�( + `__bu�t�_cڡ�t_p + ( +__o�ag +)) + +80 i�(( +__o�ag + & +O_CREAT +�!�0 && + `__va_�g_�ck_�n + () < 1) + +82 + `__ݒ64_miss�g_mode + (); + +83 + `__ݒ64_2 + ( +__�th +, +__o�ag +); + +85 + `__ݒ64_��s + ( +__�th +, +__o�ag +, + `__va_�g_�ck + ()); + +88 i�( + `__va_�g_�ck_�n + () < 1) + +89 + `__ݒ64_2 + ( +__�th +, +__o�ag +); + +91 + `__ݒ64_��s + ( +__�th +, +__o�ag +, + `__va_�g_�ck + ()); + +92 + } +} + +96 #ifde� +__USE_ATFILE + + +97 #i�de� +__USE_FILE_OFFSET64 + + +98 + $__ݒ�_2 + ( +__fd +, cڡ * +__�th +, +__o�ag +) + +99 + `__n�nu� + ((2)); + +100 + `__REDIRECT + ( +__ݒ�_��s +, ( +__fd +, cڡ * +__�th +, + +101 +__o�ag +, ...), +ݒ� +) + +102 + `__n�nu� + ((2)); + +104 + `__REDIRECT + ( +__ݒ�_2 +, ( +__fd +, cڡ * +__�th +, + +105 +__o�ag +), +__ݒ�64_2 +) + +106 + `__n�nu� + ((2)); + +107 + `__REDIRECT + ( +__ݒ�_��s +, ( +__fd +, cڡ * +__�th +, + +108 +__o�ag +, ...), +ݒ�64 +) + +109 + `__n�nu� + ((2)); + +111 + `__�r�de� + ( +__ݒ�_too_m�y_�gs +, + +113 + `__�r�de� + ( +__ݒ�_miss�g_mode +, + +116 +__f�tify_fun�i� + + +117 + $ݒ� + ( +__fd +, cڡ * +__�th +, +__o�ag +, ...) + +119 i�( + `__va_�g_�ck_�n + () > 1) + +120 + `__ݒ�_too_m�y_�gs + (); + +122 i�( + `__bu�t�_cڡ�t_p + ( +__o�ag +)) + +124 i�(( +__o�ag + & +O_CREAT +�!�0 && + `__va_�g_�ck_�n + () < 1) + +126 + `__ݒ�_miss�g_mode + (); + +127 + `__ݒ�_2 + ( +__fd +, +__�th +, +__o�ag +); + +129 + `__ݒ�_��s + ( +__fd +, +__�th +, +__o�ag +, + `__va_�g_�ck + ()); + +132 i�( + `__va_�g_�ck_�n + () < 1) + +133 + `__ݒ�_2 + ( +__fd +, +__�th +, +__o�ag +); + +135 + `__ݒ�_��s + ( +__fd +, +__�th +, +__o�ag +, + `__va_�g_�ck + ()); + +136 + } +} + +139 #ifde� +__USE_LARGEFILE64 + + +140 + $__ݒ�64_2 + ( +__fd +, cڡ * +__�th +, +__o�ag +) + +141 + `__n�nu� + ((2)); + +142 + `__REDIRECT + ( +__ݒ�64_��s +, ( +__fd +, cڡ * +__�th +, + +143 +__o�ag +, ...), +ݒ�64 +) + +144 + `__n�nu� + ((2)); + +145 + `__�r�de� + ( +__ݒ�64_too_m�y_�gs +, + +147 + `__�r�de� + ( +__ݒ�64_miss�g_mode +, + +150 +__f�tify_fun�i� + + +151 + $ݒ�64 + ( +__fd +, cڡ * +__�th +, +__o�ag +, ...) + +153 i�( + `__va_�g_�ck_�n + () > 1) + +154 + `__ݒ�64_too_m�y_�gs + (); + +156 i�( + `__bu�t�_cڡ�t_p + ( +__o�ag +)) + +158 i�(( +__o�ag + & +O_CREAT +�!�0 && + `__va_�g_�ck_�n + () < 1) + +160 + `__ݒ�64_miss�g_mode + (); + +161 + `__ݒ�64_2 + ( +__fd +, +__�th +, +__o�ag +); + +163 + `__ݒ�64_��s + ( +__fd +, +__�th +, +__o�ag +, + `__va_�g_�ck + ()); + +166 i�( + `__va_�g_�ck_�n + () < 1) + +167 + `__ݒ�64_2 + ( +__fd +, +__�th +, +__o�ag +); + +169 + `__ݒ�64_��s + ( +__fd +, +__�th +, +__o�ag +, + `__va_�g_�ck + ()); + +170 + } +} + + @/usr/include/bits/in.h + +20 #i�de� +_NETINET_IN_H + + +29 #ifde� +_UAPI_LINUX_IN6_H + + +33 + #__USE_KERNEL_IPV6_DEFS + + + ) + +39 + #IP_OPTIONS + 4 + + ) + +40 + #IP_HDRINCL + 3 + + ) + +41 + #IP_TOS + 1 + + ) + +42 + #IP_TTL + 2 + + ) + +43 + #IP_RECVOPTS + 6 + + ) + +45 + #IP_RECVRETOPTS + +IP_RETOPTS + + + ) + +46 + #IP_RETOPTS + 7 + + ) + +47 + #IP_MULTICAST_IF + 32 + + ) + +48 + #IP_MULTICAST_TTL + 33 + + ) + +49 + #IP_MULTICAST_LOOP + 34 + + ) + +50 + #IP_ADD_MEMBERSHIP + 35 + + ) + +51 + #IP_DROP_MEMBERSHIP + 36 + + ) + +52 + #IP_UNBLOCK_SOURCE + 37 + + ) + +53 + #IP_BLOCK_SOURCE + 38 + + ) + +54 + #IP_ADD_SOURCE_MEMBERSHIP + 39 + + ) + +55 + #IP_DROP_SOURCE_MEMBERSHIP + 40 + + ) + +56 + #IP_MSFILTER + 41 + + ) + +57 #i� +def�ed + +__USE_MISC + || def�ed +__USE_GNU + + +58 + #MCAST_JOIN_GROUP + 42 + + ) + +59 + #MCAST_BLOCK_SOURCE + 43 + + ) + +60 + #MCAST_UNBLOCK_SOURCE + 44 + + ) + +61 + #MCAST_LEAVE_GROUP + 45 + + ) + +62 + #MCAST_JOIN_SOURCE_GROUP + 46 + + ) + +63 + #MCAST_LEAVE_SOURCE_GROUP + 47 + + ) + +64 + #MCAST_MSFILTER + 48 + + ) + +65 + #IP_MULTICAST_ALL + 49 + + ) + +66 + #IP_UNICAST_IF + 50 + + ) + +68 + #MCAST_EXCLUDE + 0 + + ) + +69 + #MCAST_INCLUDE + 1 + + ) + +72 + #IP_ROUTER_ALERT + 5 + + ) + +73 + #IP_PKTINFO + 8 + + ) + +74 + #IP_PKTOPTIONS + 9 + + ) + +75 + #IP_PMTUDISC + 10 + + ) + +76 + #IP_MTU_DISCOVER + 10 + + ) + +77 + #IP_RECVERR + 11 + + ) + +78 + #IP_RECVTTL + 12 + + ) + +79 + #IP_RECVTOS + 13 + + ) + +80 + #IP_MTU + 14 + + ) + +81 + #IP_FREEBIND + 15 + + ) + +82 + #IP_IPSEC_POLICY + 16 + + ) + +83 + #IP_XFRM_POLICY + 17 + + ) + +84 + #IP_PASSSEC + 18 + + ) + +85 + #IP_TRANSPARENT + 19 + + ) + +86 + #IP_MULTICAST_ALL + 49 + + ) + +89 + #IP_ORIGDSTADDR + 20 + + ) + +90 + #IP_RECVORIGDSTADDR + +IP_ORIGDSTADDR + + + ) + +92 + #IP_MINTTL + 21 + + ) + +96 + #IP_PMTUDISC_DONT + 0 + + ) + +97 + #IP_PMTUDISC_WANT + 1 + + ) + +98 + #IP_PMTUDISC_DO + 2 + + ) + +99 + #IP_PMTUDISC_PROBE + 3 + + ) + +102 + #SOL_IP + 0 + + ) + +104 + #IP_DEFAULT_MULTICAST_TTL + 1 + + ) + +105 + #IP_DEFAULT_MULTICAST_LOOP + 1 + + ) + +106 + #IP_MAX_MEMBERSHIPS + 20 + + ) + +108 #i� +def�ed + +__USE_MISC + || def�ed +__USE_GNU + + +112 + s�_�ts + + +114 +�_addr + + m�_d� +; + +115 + m�_�ts +[40]; + +119 + s�_m�qn + + +121 +�_addr + + mimr_muɟddr +; + +122 +�_addr + + mimr_add�ss +; + +123 + mimr_if�dex +; + +127 + s�_pkt�fo + + +129 + m�i_if�dex +; + +130 +�_addr + + m�i_�ec_d� +; + +131 +�_addr + + m�i_addr +; + +138 + #IPV6_ADDRFORM + 1 + + ) + +139 + #IPV6_2292PKTINFO + 2 + + ) + +140 + #IPV6_2292HOPOPTS + 3 + + ) + +141 + #IPV6_2292DSTOPTS + 4 + + ) + +142 + #IPV6_2292RTHDR + 5 + + ) + +143 + #IPV6_2292PKTOPTIONS + 6 + + ) + +144 + #IPV6_CHECKSUM + 7 + + ) + +145 + #IPV6_2292HOPLIMIT + 8 + + ) + +147 + #SCM_SRCRT + +IPV6_RXSRCRT + + + ) + +149 + #IPV6_NEXTHOP + 9 + + ) + +150 + #IPV6_AUTHHDR + 10 + + ) + +151 + #IPV6_UNICAST_HOPS + 16 + + ) + +152 + #IPV6_MULTICAST_IF + 17 + + ) + +153 + #IPV6_MULTICAST_HOPS + 18 + + ) + +154 + #IPV6_MULTICAST_LOOP + 19 + + ) + +155 + #IPV6_JOIN_GROUP + 20 + + ) + +156 + #IPV6_LEAVE_GROUP + 21 + + ) + +157 + #IPV6_ROUTER_ALERT + 22 + + ) + +158 + #IPV6_MTU_DISCOVER + 23 + + ) + +159 + #IPV6_MTU + 24 + + ) + +160 + #IPV6_RECVERR + 25 + + ) + +161 + #IPV6_V6ONLY + 26 + + ) + +162 + #IPV6_JOIN_ANYCAST + 27 + + ) + +163 + #IPV6_LEAVE_ANYCAST + 28 + + ) + +164 + #IPV6_IPSEC_POLICY + 34 + + ) + +165 + #IPV6_XFRM_POLICY + 35 + + ) + +167 + #IPV6_RECVPKTINFO + 49 + + ) + +168 + #IPV6_PKTINFO + 50 + + ) + +169 + #IPV6_RECVHOPLIMIT + 51 + + ) + +170 + #IPV6_HOPLIMIT + 52 + + ) + +171 + #IPV6_RECVHOPOPTS + 53 + + ) + +172 + #IPV6_HOPOPTS + 54 + + ) + +173 + #IPV6_RTHDRDSTOPTS + 55 + + ) + +174 + #IPV6_RECVRTHDR + 56 + + ) + +175 + #IPV6_RTHDR + 57 + + ) + +176 + #IPV6_RECVDSTOPTS + 58 + + ) + +177 + #IPV6_DSTOPTS + 59 + + ) + +179 + #IPV6_RECVTCLASS + 66 + + ) + +180 + #IPV6_TCLASS + 67 + + ) + +183 + #IPV6_ADD_MEMBERSHIP + +IPV6_JOIN_GROUP + + + ) + +184 + #IPV6_DROP_MEMBERSHIP + +IPV6_LEAVE_GROUP + + + ) + +185 + #IPV6_RXHOPOPTS + +IPV6_HOPOPTS + + + ) + +186 + #IPV6_RXDSTOPTS + +IPV6_DSTOPTS + + + ) + +189 + #IPV6_PMTUDISC_DONT + 0 + + ) + +190 + #IPV6_PMTUDISC_WANT + 1 + + ) + +191 + #IPV6_PMTUDISC_DO + 2 + + ) + +192 + #IPV6_PMTUDISC_PROBE + 3 + + ) + +195 + #SOL_IPV6 + 41 + + ) + +196 + #SOL_ICMPV6 + 58 + + ) + +199 + #IPV6_RTHDR_LOOSE + 0 + + ) + +200 + #IPV6_RTHDR_STRICT + 1 + + ) + +202 + #IPV6_RTHDR_TYPE_0 + 0 + + ) + + @/usr/include/bits/ioctl-types.h + +19 #i�de� +_SYS_IOCTL_H + + +24 + ~<asm/io�ls.h +> + +27 + sw�size + + +29 + mws_row +; + +30 + mws_c� +; + +31 + mws_xpix� +; + +32 + mws_ypix� +; + +35 + #NCC + 8 + + ) + +36 + s�rmio + + +38 + mc_i�ag +; + +39 + mc_o�ag +; + +40 + mc_c�ag +; + +41 + mc_l�ag +; + +42 + mc_l�e +; + +43 + mc_cc +[ +NCC +]; + +47 + #TIOCM_LE + 0x001 + + ) + +48 + #TIOCM_DTR + 0x002 + + ) + +49 + #TIOCM_RTS + 0x004 + + ) + +50 + #TIOCM_ST + 0x008 + + ) + +51 + #TIOCM_SR + 0x010 + + ) + +52 + #TIOCM_CTS + 0x020 + + ) + +53 + #TIOCM_CAR + 0x040 + + ) + +54 + #TIOCM_RNG + 0x080 + + ) + +55 + #TIOCM_DSR + 0x100 + + ) + +56 + #TIOCM_CD + +TIOCM_CAR + + + ) + +57 + #TIOCM_RI + +TIOCM_RNG + + + ) + +62 + #N_TTY + 0 + + ) + +63 + #N_SLIP + 1 + + ) + +64 + #N_MOUSE + 2 + + ) + +65 + #N_PPP + 3 + + ) + +66 + #N_STRIP + 4 + + ) + +67 + #N_AX25 + 5 + + ) + +68 + #N_X25 + 6 + + ) + +69 + #N_6PACK + 7 + + ) + +70 + #N_MASC + 8 + + ) + +71 + #N_R3964 + 9 + + ) + +72 + #N_PROFIBUS_FDL + 10 + + ) + +73 + #N_IRDA + 11 + + ) + +74 + #N_SMSBLOCK + 12 + + ) + +75 + #N_HDLC + 13 + + ) + +76 + #N_SYNC_PPP + 14 + + ) + +77 + #N_HCI + 15 + + ) + + @/usr/include/bits/ioctls.h + +18 #i�de� +_SYS_IOCTL_H + + +23 + ~<asm/io�ls.h +> + +26 + #SIOCADDRT + 0x890B + + ) + +27 + #SIOCDELRT + 0x890C + + ) + +28 + #SIOCRTMSG + 0x890D + + ) + +31 + #SIOCGIFNAME + 0x8910 + + ) + +32 + #SIOCSIFLINK + 0x8911 + + ) + +33 + #SIOCGIFCONF + 0x8912 + + ) + +34 + #SIOCGIFFLAGS + 0x8913 + + ) + +35 + #SIOCSIFFLAGS + 0x8914 + + ) + +36 + #SIOCGIFADDR + 0x8915 + + ) + +37 + #SIOCSIFADDR + 0x8916 + + ) + +38 + #SIOCGIFDSTADDR + 0x8917 + + ) + +39 + #SIOCSIFDSTADDR + 0x8918 + + ) + +40 + #SIOCGIFBRDADDR + 0x8919 + + ) + +41 + #SIOCSIFBRDADDR + 0x891� + + ) + +42 + #SIOCGIFNETMASK + 0x891b + + ) + +43 + #SIOCSIFNETMASK + 0x891� + + ) + +44 + #SIOCGIFMETRIC + 0x891d + + ) + +45 + #SIOCSIFMETRIC + 0x891� + + ) + +46 + #SIOCGIFMEM + 0x891� + + ) + +47 + #SIOCSIFMEM + 0x8920 + + ) + +48 + #SIOCGIFMTU + 0x8921 + + ) + +49 + #SIOCSIFMTU + 0x8922 + + ) + +50 + #SIOCSIFNAME + 0x8923 + + ) + +51 + #SIOCSIFHWADDR + 0x8924 + + ) + +52 + #SIOCGIFENCAP + 0x8925 + + ) + +53 + #SIOCSIFENCAP + 0x8926 + + ) + +54 + #SIOCGIFHWADDR + 0x8927 + + ) + +55 + #SIOCGIFSLAVE + 0x8929 + + ) + +56 + #SIOCSIFSLAVE + 0x8930 + + ) + +57 + #SIOCADDMULTI + 0x8931 + + ) + +58 + #SIOCDELMULTI + 0x8932 + + ) + +59 + #SIOCGIFINDEX + 0x8933 + + ) + +60 + #SIOGIFINDEX + +SIOCGIFINDEX + + + ) + +61 + #SIOCSIFPFLAGS + 0x8934 + + ) + +62 + #SIOCGIFPFLAGS + 0x8935 + + ) + +63 + #SIOCDIFADDR + 0x8936 + + ) + +64 + #SIOCSIFHWBROADCAST + 0x8937 + + ) + +65 + #SIOCGIFCOUNT + 0x8938 + + ) + +67 + #SIOCGIFBR + 0x8940 + + ) + +68 + #SIOCSIFBR + 0x8941 + + ) + +70 + #SIOCGIFTXQLEN + 0x8942 + + ) + +71 + #SIOCSIFTXQLEN + 0x8943 + + ) + +76 + #SIOCDARP + 0x8953 + + ) + +77 + #SIOCGARP + 0x8954 + + ) + +78 + #SIOCSARP + 0x8955 + + ) + +81 + #SIOCDRARP + 0x8960 + + ) + +82 + #SIOCGRARP + 0x8961 + + ) + +83 + #SIOCSRARP + 0x8962 + + ) + +87 + #SIOCGIFMAP + 0x8970 + + ) + +88 + #SIOCSIFMAP + 0x8971 + + ) + +92 + #SIOCADDDLCI + 0x8980 + + ) + +93 + #SIOCDELDLCI + 0x8981 + + ) + +102 + #SIOCDEVPRIVATE + 0x89F0 + + ) + +108 + #SIOCPROTOPRIVATE + 0x89E0 + + ) + + @/usr/include/bits/netdb.h + +18 #i�de� +_NETDB_H + + +26 + sË� + + +28 * + mn_�me +; + +29 ** + mn_���s +; + +30 + mn_add�y� +; + +31 +u�t32_t + + mn_�t +; + + @/usr/include/bits/posix_opt.h + +19 #i�def +_BITS_POSIX_OPT_H + + +20 + #_BITS_POSIX_OPT_H + 1 + + ) + +23 + #_POSIX_JOB_CONTROL + 1 + + ) + +26 + #_POSIX_SAVED_IDS + 1 + + ) + +29 + #_POSIX_PRIORITY_SCHEDULING + 200809L + + ) + +32 + #_POSIX_SYNCHRONIZED_IO + 200809L + + ) + +35 + #_POSIX_FSYNC + 200809L + + ) + +38 + #_POSIX_MAPPED_FILES + 200809L + + ) + +41 + #_POSIX_MEMLOCK + 200809L + + ) + +44 + #_POSIX_MEMLOCK_RANGE + 200809L + + ) + +47 + #_POSIX_MEMORY_PROTECTION + 200809L + + ) + +50 + #_POSIX_CHOWN_RESTRICTED + 0 + + ) + +54 + #_POSIX_VDISABLE + '\0' + + ) + +57 + #_POSIX_NO_TRUNC + 1 + + ) + +60 + #_XOPEN_REALTIME + 1 + + ) + +63 + #_XOPEN_REALTIME_THREADS + 1 + + ) + +66 + #_XOPEN_SHM + 1 + + ) + +69 + #_POSIX_THREADS + 200809L + + ) + +72 + #_POSIX_REENTRANT_FUNCTIONS + 1 + + ) + +73 + #_POSIX_THREAD_SAFE_FUNCTIONS + 200809L + + ) + +76 + #_POSIX_THREAD_PRIORITY_SCHEDULING + 200809L + + ) + +79 + #_POSIX_THREAD_ATTR_STACKSIZE + 200809L + + ) + +82 + #_POSIX_THREAD_ATTR_STACKADDR + 200809L + + ) + +85 + #_POSIX_THREAD_PRIO_INHERIT + 200809L + + ) + +89 + #_POSIX_THREAD_PRIO_PROTECT + 200809L + + ) + +91 #ifde� +__USE_XOPEN2K8 + + +93 + #_POSIX_THREAD_ROBUST_PRIO_INHERIT + 200809L + + ) + +96 + #_POSIX_THREAD_ROBUST_PRIO_PROTECT + -1 + + ) + +100 + #_POSIX_SEMAPHORES + 200809L + + ) + +103 + #_POSIX_REALTIME_SIGNALS + 200809L + + ) + +106 + #_POSIX_ASYNCHRONOUS_IO + 200809L + + ) + +107 + #_POSIX_ASYNC_IO + 1 + + ) + +109 + #_LFS_ASYNCHRONOUS_IO + 1 + + ) + +111 + #_POSIX_PRIORITIZED_IO + 200809L + + ) + +114 + #_LFS64_ASYNCHRONOUS_IO + 1 + + ) + +117 + #_LFS_LARGEFILE + 1 + + ) + +118 + #_LFS64_LARGEFILE + 1 + + ) + +119 + #_LFS64_STDIO + 1 + + ) + +122 + #_POSIX_SHARED_MEMORY_OBJECTS + 200809L + + ) + +125 + #_POSIX_CPUTIME + 0 + + ) + +128 + #_POSIX_THREAD_CPUTIME + 0 + + ) + +131 + #_POSIX_REGEXP + 1 + + ) + +134 + #_POSIX_READER_WRITER_LOCKS + 200809L + + ) + +137 + #_POSIX_SHELL + 1 + + ) + +140 + #_POSIX_TIMEOUTS + 200809L + + ) + +143 + #_POSIX_SPIN_LOCKS + 200809L + + ) + +146 + #_POSIX_SPAWN + 200809L + + ) + +149 + #_POSIX_TIMERS + 200809L + + ) + +152 + #_POSIX_BARRIERS + 200809L + + ) + +155 + #_POSIX_MESSAGE_PASSING + 200809L + + ) + +158 + #_POSIX_THREAD_PROCESS_SHARED + 200809L + + ) + +161 + #_POSIX_MONOTONIC_CLOCK + 0 + + ) + +164 + #_POSIX_CLOCK_SELECTION + 200809L + + ) + +167 + #_POSIX_ADVISORY_INFO + 200809L + + ) + +170 + #_POSIX_IPV6 + 200809L + + ) + +173 + #_POSIX_RAW_SOCKETS + 200809L + + ) + +176 + #_POSIX2_CHAR_TERM + 200809L + + ) + +179 + #_POSIX_SPORADIC_SERVER + -1 + + ) + +180 + #_POSIX_THREAD_SPORADIC_SERVER + -1 + + ) + +183 + #_POSIX_TRACE + -1 + + ) + +184 + #_POSIX_TRACE_EVENT_FILTER + -1 + + ) + +185 + #_POSIX_TRACE_INHERIT + -1 + + ) + +186 + #_POSIX_TRACE_LOG + -1 + + ) + +189 + #_POSIX_TYPED_MEMORY_OBJECTS + -1 + + ) + + @/usr/include/bits/pthreadtypes.h + +18 #i�de� +_BITS_PTHREADTYPES_H + + +19 + #_BITS_PTHREADTYPES_H + 1 + + ) + +21 + ~<b�s/w�dsize.h +> + +23 #ifde� +__x86_64__ + + +24 #i� +__WORDSIZE + == 64 + +25 + #__SIZEOF_PTHREAD_ATTR_T + 56 + + ) + +26 + #__SIZEOF_PTHREAD_MUTEX_T + 40 + + ) + +27 + #__SIZEOF_PTHREAD_MUTEXATTR_T + 4 + + ) + +28 + #__SIZEOF_PTHREAD_COND_T + 48 + + ) + +29 + #__SIZEOF_PTHREAD_CONDATTR_T + 4 + + ) + +30 + #__SIZEOF_PTHREAD_RWLOCK_T + 56 + + ) + +31 + #__SIZEOF_PTHREAD_RWLOCKATTR_T + 8 + + ) + +32 + #__SIZEOF_PTHREAD_BARRIER_T + 32 + + ) + +33 + #__SIZEOF_PTHREAD_BARRIERATTR_T + 4 + + ) + +35 + #__SIZEOF_PTHREAD_ATTR_T + 32 + + ) + +36 + #__SIZEOF_PTHREAD_MUTEX_T + 32 + + ) + +37 + #__SIZEOF_PTHREAD_MUTEXATTR_T + 4 + + ) + +38 + #__SIZEOF_PTHREAD_COND_T + 48 + + ) + +39 + #__SIZEOF_PTHREAD_CONDATTR_T + 4 + + ) + +40 + #__SIZEOF_PTHREAD_RWLOCK_T + 44 + + ) + +41 + #__SIZEOF_PTHREAD_RWLOCKATTR_T + 8 + + ) + +42 + #__SIZEOF_PTHREAD_BARRIER_T + 20 + + ) + +43 + #__SIZEOF_PTHREAD_BARRIERATTR_T + 4 + + ) + +46 + #__SIZEOF_PTHREAD_ATTR_T + 36 + + ) + +47 + #__SIZEOF_PTHREAD_MUTEX_T + 24 + + ) + +48 + #__SIZEOF_PTHREAD_MUTEXATTR_T + 4 + + ) + +49 + #__SIZEOF_PTHREAD_COND_T + 48 + + ) + +50 + #__SIZEOF_PTHREAD_CONDATTR_T + 4 + + ) + +51 + #__SIZEOF_PTHREAD_RWLOCK_T + 32 + + ) + +52 + #__SIZEOF_PTHREAD_RWLOCKATTR_T + 8 + + ) + +53 + #__SIZEOF_PTHREAD_BARRIER_T + 20 + + ) + +54 + #__SIZEOF_PTHREAD_BARRIERATTR_T + 4 + + ) + +60 + t�h�ad_t +; + +63 + u�h�ad_��_t + + +65 + m__size +[ +__SIZEOF_PTHREAD_ATTR_T +]; + +66 + m__�ign +; + +68 #i�de� +__have_�h�ad_��_t + + +69 +�h�ad_��_t + + t�h�ad_��_t +; + +70 + #__have_�h�ad_��_t + 1 + + ) + +74 #ifde� +__x86_64__ + + +75 + s__�h�ad_����_li� + + +77 +__�h�ad_����_li� + * + m__�ev +; + +78 +__�h�ad_����_li� + * + m__�xt +; + +79 } + t__�h�ad_li�_t +; + +81 + s__�h�ad_����_�i� + + +83 +__�h�ad_����_�i� + * + m__�xt +; + +84 } + t__�h�ad_�i�_t +; + +92 + s__�h�ad_mu�x_s + + +94 + m__lock +; + +95 + m__cou� +; + +96 + m__ow�r +; + +97 #ifde� +__x86_64__ + + +98 + m__nu�rs +; + +102 + m__k�d +; + +103 #ifde� +__x86_64__ + + +104 + m__��s +; + +105 + m__�isi� +; + +106 +__�h�ad_li�_t + + m__li� +; + +107 + #__PTHREAD_MUTEX_HAVE_PREV + 1 + + ) + +108 + #__PTHREAD_MUTEX_HAVE_ELISION + 1 + + ) + +110 + m__nu�rs +; + +111 +__ex�nsi�__ + union + +115 + m__e��s +; + +116 + m__�isi� +; + +117 + #__��s + +d +. +__e��s + + + ) + +118 + #__�isi� + +d +. +__�isi� + + + ) + +119 + #__PTHREAD_MUTEX_HAVE_ELISION + 2 + + ) + +120 } + md +; + +121 +__�h�ad_�i�_t + + m__li� +; + +124 } + m__d�a +; + +125 + m__size +[ +__SIZEOF_PTHREAD_MUTEX_T +]; + +126 + m__�ign +; + +127 } + t�h�ad_mu�x_t +; + +131 + m__size +[ +__SIZEOF_PTHREAD_MUTEXATTR_T +]; + +132 + m__�ign +; + +133 } + t�h�ad_mu�x��_t +; + +142 + m__lock +; + +143 + m__fu�x +; + +144 +__ex�nsi�__ + + m__tٮ_�q +; + +145 +__ex�nsi�__ + + m__wakeup_�q +; + +146 +__ex�nsi�__ + + m__wok�_�q +; + +147 * + m__mu�x +; + +148 + m__nwa��s +; + +149 + m__br�d��_�q +; + +150 } + m__d�a +; + +151 + m__size +[ +__SIZEOF_PTHREAD_COND_T +]; + +152 +__ex�nsi�__ + + m__�ign +; + +153 } + t�h�ad_c�d_t +; + +157 + m__size +[ +__SIZEOF_PTHREAD_CONDATTR_T +]; + +158 + m__�ign +; + +159 } + t�h�ad_c�d��_t +; + +163 + t�h�ad_key_t +; + +167 + t�h�ad_��_t +; + +170 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K + + +175 #ifde� +__x86_64__ + + +178 + m__lock +; + +179 + m__�_�ad�s +; + +180 + m__�ad�s_wakeup +; + +181 + m__wr��_wakeup +; + +182 + m__�_�ad�s_queued +; + +183 + m__�_wr��s_queued +; + +184 + m__wr�� +; + +185 + m__sh�ed +; + +186 + m__�d1 +; + +187 + m__�d2 +; + +190 + m__�ags +; + +191 + #__PTHREAD_RWLOCK_INT_FLAGS_SHARED + 1 + + ) + +192 } + m__d�a +; + +196 + m__lock +; + +197 + m__�_�ad�s +; + +198 + m__�ad�s_wakeup +; + +199 + m__wr��_wakeup +; + +200 + m__�_�ad�s_queued +; + +201 + m__�_wr��s_queued +; + +204 + m__�ags +; + +205 + m__sh�ed +; + +206 + m__�d1 +; + +207 + m__�d2 +; + +208 + m__wr�� +; + +209 } + m__d�a +; + +211 + m__size +[ +__SIZEOF_PTHREAD_RWLOCK_T +]; + +212 + m__�ign +; + +213 } + t�h�ad_rwlock_t +; + +217 + m__size +[ +__SIZEOF_PTHREAD_RWLOCKATTR_T +]; + +218 + m__�ign +; + +219 } + t�h�ad_rwlock��_t +; + +223 #ifde� +__USE_XOPEN2K + + +225 vީ�� + t�h�ad_��lock_t +; + +232 + m__size +[ +__SIZEOF_PTHREAD_BARRIER_T +]; + +233 + m__�ign +; + +234 } + t�h�ad_b�r�r_t +; + +238 + m__size +[ +__SIZEOF_PTHREAD_BARRIERATTR_T +]; + +239 + m__�ign +; + +240 } + t�h�ad_b�r���r_t +; + +244 #i�de� +__x86_64__ + + +246 + #__��nup_f�_��ibu� + + `__��ibu�__ + (( + `__�g�rm__ + (1))) + + ) + + @/usr/include/bits/resource.h + +19 #i�de� +_SYS_RESOURCE_H + + +23 + ~<b�s/ty�s.h +> + +31 + e__�im�_�sour� + + +34 + mRLIMIT_CPU + = 0, + +35 + #RLIMIT_CPU + +RLIMIT_CPU + + + ) + +38 + mRLIMIT_FSIZE + = 1, + +39 + #RLIMIT_FSIZE + +RLIMIT_FSIZE + + + ) + +42 + mRLIMIT_DATA + = 2, + +43 + #RLIMIT_DATA + +RLIMIT_DATA + + + ) + +46 + mRLIMIT_STACK + = 3, + +47 + #RLIMIT_STACK + +RLIMIT_STACK + + + ) + +50 + mRLIMIT_CORE + = 4, + +51 + #RLIMIT_CORE + +RLIMIT_CORE + + + ) + +57 + m__RLIMIT_RSS + = 5, + +58 + #RLIMIT_RSS + +__RLIMIT_RSS + + + ) + +61 + mRLIMIT_NOFILE + = 7, + +62 + m__RLIMIT_OFILE + = +RLIMIT_NOFILE +, + +63 + #RLIMIT_NOFILE + +RLIMIT_NOFILE + + + ) + +64 + #RLIMIT_OFILE + +__RLIMIT_OFILE + + + ) + +67 + mRLIMIT_AS + = 9, + +68 + #RLIMIT_AS + +RLIMIT_AS + + + ) + +71 + m__RLIMIT_NPROC + = 6, + +72 + #RLIMIT_NPROC + +__RLIMIT_NPROC + + + ) + +75 + m__RLIMIT_MEMLOCK + = 8, + +76 + #RLIMIT_MEMLOCK + +__RLIMIT_MEMLOCK + + + ) + +79 + m__RLIMIT_LOCKS + = 10, + +80 + #RLIMIT_LOCKS + +__RLIMIT_LOCKS + + + ) + +83 + m__RLIMIT_SIGPENDING + = 11, + +84 + #RLIMIT_SIGPENDING + +__RLIMIT_SIGPENDING + + + ) + +87 + m__RLIMIT_MSGQUEUE + = 12, + +88 + #RLIMIT_MSGQUEUE + +__RLIMIT_MSGQUEUE + + + ) + +93 + m__RLIMIT_NICE + = 13, + +94 + #RLIMIT_NICE + +__RLIMIT_NICE + + + ) + +98 + m__RLIMIT_RTPRIO + = 14, + +99 + #RLIMIT_RTPRIO + +__RLIMIT_RTPRIO + + + ) + +104 + m__RLIMIT_RTTIME + = 15, + +105 + #RLIMIT_RTTIME + +__RLIMIT_RTTIME + + + ) + +107 + m__RLIMIT_NLIMITS + = 16, + +108 + m__RLIM_NLIMITS + = +__RLIMIT_NLIMITS + + +109 + #RLIMIT_NLIMITS + +__RLIMIT_NLIMITS + + + ) + +110 + #RLIM_NLIMITS + +__RLIM_NLIMITS + + + ) + +114 #i�de� +__USE_FILE_OFFSET64 + + +115 + #RLIM_INFINITY + (( +__�im_t +�-1) + + ) + +117 + #RLIM_INFINITY + 0xffffffffffffffffuLL + + ) + +120 #ifde� +__USE_LARGEFILE64 + + +121 + #RLIM64_INFINITY + 0xffffffffffffffffuLL + + ) + +125 + #RLIM_SAVED_MAX + +RLIM_INFINITY + + + ) + +126 + #RLIM_SAVED_CUR + +RLIM_INFINITY + + + ) + +130 #i�de� +__USE_FILE_OFFSET64 + + +131 +__�im_t + + t�im_t +; + +133 +__�im64_t + + t�im_t +; + +135 #ifde� +__USE_LARGEFILE64 + + +136 +__�im64_t + + t�im64_t +; + +139 + s�im� + + +142 +�im_t + + m�im_cur +; + +144 +�im_t + + m�im_max +; + +147 #ifde� +__USE_LARGEFILE64 + + +148 + s�im�64 + + +151 +�im64_t + + m�im_cur +; + +153 +�im64_t + + m�im_max +; + +158 + e__ru�ge_who + + +161 + mRUSAGE_SELF + = 0, + +162 + #RUSAGE_SELF + +RUSAGE_SELF + + + ) + +165 + mRUSAGE_CHILDREN + = -1 + +166 + #RUSAGE_CHILDREN + +RUSAGE_CHILDREN + + + ) + +168 #ifde� +__USE_GNU + + +171 + mRUSAGE_THREAD + = 1 + +172 + #RUSAGE_THREAD + +RUSAGE_THREAD + + + ) + +174 + #RUSAGE_LWP + +RUSAGE_THREAD + + + ) + +178 + #__�ed_timev� + + + ) + +179 + ~<b�s/time.h +> + +187 + sru�ge + + +190 +timev� + + mru_utime +; + +192 +timev� + + mru_�ime +; + +194 +__ex�nsi�__ + union + +196 + mru_maxrss +; + +197 +__sys��_��g_t + + m__ru_maxrss_w�d +; + +202 +__ex�nsi�__ + union + +204 + mru_ixrss +; + +205 +__sys��_��g_t + + m__ru_ixrss_w�d +; + +208 +__ex�nsi�__ + union + +210 + mru_idrss +; + +211 +__sys��_��g_t + + m__ru_idrss_w�d +; + +214 +__ex�nsi�__ + union + +216 + mru_i�ss +; + +217 +__sys��_��g_t + + m__ru_i�ss_w�d +; + +221 +__ex�nsi�__ + union + +223 + mru_m��t +; + +224 +__sys��_��g_t + + m__ru_m��t_w�d +; + +227 +__ex�nsi�__ + union + +229 + mru_maj�t +; + +230 +__sys��_��g_t + + m__ru_maj�t_w�d +; + +233 +__ex�nsi�__ + union + +235 + mru_nsw� +; + +236 +__sys��_��g_t + + m__ru_nsw�_w�d +; + +240 +__ex�nsi�__ + union + +242 + mru_�block +; + +243 +__sys��_��g_t + + m__ru_�block_w�d +; + +246 +__ex�nsi�__ + union + +248 + mru_oublock +; + +249 +__sys��_��g_t + + m__ru_oublock_w�d +; + +252 +__ex�nsi�__ + union + +254 + mru_msg�d +; + +255 +__sys��_��g_t + + m__ru_msg�d_w�d +; + +258 +__ex�nsi�__ + union + +260 + mru_msgrcv +; + +261 +__sys��_��g_t + + m__ru_msgrcv_w�d +; + +264 +__ex�nsi�__ + union + +266 + mru_nsig�ls +; + +267 +__sys��_��g_t + + m__ru_nsig�ls_w�d +; + +272 +__ex�nsi�__ + union + +274 + mru_nvcsw +; + +275 +__sys��_��g_t + + m__ru_nvcsw_w�d +; + +279 +__ex�nsi�__ + union + +281 + mru_nivcsw +; + +282 +__sys��_��g_t + + m__ru_nivcsw_w�d +; + +287 + #PRIO_MIN + -20 + + ) + +288 + #PRIO_MAX + 20 + + ) + +292 + e__�iܙy_which + + +294 + mPRIO_PROCESS + = 0, + +295 + #PRIO_PROCESS + +PRIO_PROCESS + + + ) + +296 + mPRIO_PGRP + = 1, + +297 + #PRIO_PGRP + +PRIO_PGRP + + + ) + +298 + mPRIO_USER + = 2 + +299 + #PRIO_USER + +PRIO_USER + + + ) + +303 + g__BEGIN_DECLS + + +305 #ifde� +__USE_GNU + + +307 #i�de� +__USE_FILE_OFFSET64 + + +308 + $�lim� + ( +__pid_t + +__pid +, +__�im�_�sour� + +__�sour� +, + +309 cڡ +�im� + * +__�w_lim� +, + +310 +�im� + * +__�d_lim� +� +__THROW +; + +312 #ifde� +__REDIRECT_NTH + + +313 + `__REDIRECT_NTH + ( +�lim� +, ( +__pid_t + +__pid +, + +314 +__�im�_�sour� + +__�sour� +, + +315 cڡ +�im� + * +__�w_lim� +, + +316 +�im� + * +__�d_lim� +), +�lim�64 +); + +318 + #�lim� + +�lim�64 + + + ) + +321 #ifde� +__USE_LARGEFILE64 + + +322 + $�lim�64 + ( +__pid_t + +__pid +, +__�im�_�sour� + +__�sour� +, + +323 cڡ +�im�64 + * +__�w_lim� +, + +324 +�im�64 + * +__�d_lim� +� +__THROW +; + +328 +__END_DECLS + + + @/usr/include/bits/select.h + +18 #i�de� +_SYS_SELECT_H + + +22 + ~<b�s/w�dsize.h +> + +25 #i� +def�ed + +__GNUC__ + && __GNUC__ >= 2 + +27 #i� +__WORDSIZE + == 64 + +28 + #__FD_ZERO_STOS + "�osq" + + ) + +30 + #__FD_ZERO_STOS + "�o�" + + ) + +33 + #__FD_ZERO +( +fd� +) \ + +35 +__d0 +, +__d1 +; \ + +36 +__asm__ + + `__vީ�e__ + ("�d;��; " +__FD_ZERO_STOS + \ + +37 : "=c" ( +__d0 +), "=D" ( +__d1 +) \ + +38 : "a" (0), "0" ( ( +fd_�t +) \ + +39 / ( +__fd_mask +)), \ + +40 "1" (& + `__FDS_BITS + ( +fd� +)[0]) \ + +42 } 0) + + ) + +48 + #__FD_ZERO +( +�t +) \ + +50 +__i +; \ + +51 +fd_�t + * +__�r + = ( +�t +); \ + +52 +__i + = 0; __�< ( +fd_�t +�/ ( +__fd_mask +); ++__i) \ + +53 + `__FDS_BITS + ( +__�r +)[ +__i +] = 0; \ + +54 } 0) + + ) + +58 + #__FD_SET +( +d +, +�t +) \ + +59 ((�( + `__FDS_BITS + ( +�t +)[ + `__FD_ELT + ( +d +)] |� + `__FD_MASK + (d))) + + ) + +60 + #__FD_CLR +( +d +, +�t +) \ + +61 ((�( + `__FDS_BITS + ( +�t +)[ + `__FD_ELT + ( +d +)] &�~ + `__FD_MASK + (d))) + + ) + +62 + #__FD_ISSET +( +d +, +�t +) \ + +63 (( + `__FDS_BITS + ( +�t +)[ + `__FD_ELT + ( +d +)] & + `__FD_MASK + (d)�!�0) + + ) + + @/usr/include/bits/select2.h + +19 #i�de� +_SYS_SELECT_H + + +24 +__fd�t_chk + ( +__d +); + +25 + $__fd�t_w�n + ( +__d +) + +26 + `__w�ljr + ("bit outside of fd_set selected"); + +27 #unde� +__FD_ELT + + +28 + #__FD_ELT +( +d +) \ + +29 +__ex�nsi�__ + \ + +30 ({ +__d + = ( +d +); \ + +31 ( + `__bu�t�_cڡ�t_p + ( +__d +) \ + +32 ? (0 <� +__d + && __d < +__FD_SETSIZE + \ + +33 ? ( +__d + / +__NFDBITS +) \ + +34 : + `__fd�t_w�n + ( +__d +)) \ + +35 : + `__fd�t_chk + ( +__d +)); + } +}) + + ) + + @/usr/include/bits/setjmp.h + +19 #i�de� +_BITS_SETJMP_H + + +20 + #_BITS_SETJMP_H + 1 + + ) + +22 #i�! +def�ed + +_SETJMP_H + && !def�ed +_PTHREAD_H + + +26 + ~<b�s/w�dsize.h +> + +28 #i�de� +_ASM + + +30 #i� +__WORDSIZE + == 64 + +31 + t__jmp_buf +[8]; + +32 #�i� +def�ed + +__x86_64__ + + +33 +__ex�nsi�__ + + t__jmp_buf +[8]; + +35 + t__jmp_buf +[6]; + + @/usr/include/bits/sigaction.h + +19 #i�de� +_SIGNAL_H + + +24 + ssiga�i� + + +27 #ifde� +__USE_POSIX199309 + + +31 +__sigh�d�r_t + + m�_h�d�r +; + +33 (* + m�_siga�i� +�(, + msig�fo_t + *, *); + +35 + m__siga�i�_h�d�r +; + +36 + #�_h�d�r + +__siga�i�_h�d�r +. +�_h�d�r + + + ) + +37 + #�_siga�i� + +__siga�i�_h�d�r +. +�_siga�i� + + + ) + +39 +__sigh�d�r_t + + m�_h�d�r +; + +43 +__sig�t_t + + m�_mask +; + +46 + m�_�ags +; + +49 (* + m�_��ܔ +) (); + +53 + #SA_NOCLDSTOP + 1 + + ) + +54 + #SA_NOCLDWAIT + 2 + + ) + +55 + #SA_SIGINFO + 4 + + ) + +57 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_MISC + + +58 + #SA_ONSTACK + 0x08000000 + + ) + +60 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_MISC + || def�ed +__USE_XOPEN2K8 + + +61 + #SA_RESTART + 0x10000000 + + ) + +62 + #SA_NODEFER + 0x40000000 + + ) + +64 + #SA_RESETHAND + 0x80000000 + + ) + +66 #ifde� +__USE_MISC + + +67 + #SA_INTERRUPT + 0x20000000 + + ) + +70 + #SA_NOMASK + +SA_NODEFER + + + ) + +71 + #SA_ONESHOT + +SA_RESETHAND + + + ) + +72 + #SA_STACK + +SA_ONSTACK + + + ) + +76 + #SIG_BLOCK + 0 + + ) + +77 + #SIG_UNBLOCK + 1 + + ) + +78 + #SIG_SETMASK + 2 + + ) + + @/usr/include/bits/sigcontext.h + +18 #i�de� +_BITS_SIGCONTEXT_H + + +19 + #_BITS_SIGCONTEXT_H + 1 + + ) + +21 #i�! +def�ed + +_SIGNAL_H + && !def�ed +_SYS_UCONTEXT_H + + +25 + #FP_XSTATE_MAGIC1 + 0x46505853U + + ) + +26 + #FP_XSTATE_MAGIC2 + 0x46505845U + + ) + +27 + #FP_XSTATE_MAGIC2_SIZE + ( +FP_XSTATE_MAGIC2 +) + + ) + +29 + s_�x_sw_by�s + + +31 +__u�t32_t + + mmagic1 +; + +32 +__u�t32_t + + mex�nded_size +; + +33 +__u�t64_t + + mx��e_bv +; + +34 +__u�t32_t + + mx��e_size +; + +35 +__u�t32_t + + m�dd�g +[7]; + +38 + s_�g + + +40 + msignifi�nd +[4]; + +41 + mexpڒt +; + +44 + s_�x�g + + +46 + msignifi�nd +[4]; + +47 + mexpڒt +; + +48 + m�dd�g +[3]; + +51 + s_xmm�g + + +53 +__u�t32_t + + m�em�t +[4]; + +58 #i�de� +__x86_64__ + + +60 + s_塩e + + +63 +__u�t32_t + + mcw +; + +64 +__u�t32_t + + msw +; + +65 +__u�t32_t + + m�g +; + +66 +__u�t32_t + + m�off +; + +67 +__u�t32_t + + mcs�l +; + +68 +__u�t32_t + + md�aoff +; + +69 +__u�t32_t + + md�a�l +; + +70 +_�g + + m_� +[8]; + +71 + m��us +; + +72 + mmagic +; + +75 +__u�t32_t + + m_fx�_�v +[6]; + +76 +__u�t32_t + + mmxc� +; + +77 +__u�t32_t + + m��rved +; + +78 +_�x�g + + m_fx�_� +[8]; + +79 +_xmm�g + + m_xmm +[8]; + +80 +__u�t32_t + + m�dd�g +[56]; + +83 #i�de� +sigcڋxt_�ru� + + +88 + #sigcڋxt_�ru� + +sigcڋxt + + + ) + +91 + #X86_FXSR_MAGIC + 0x0000 + + ) + +93 + ssigcڋxt + + +95 + mgs +, + m__gsh +; + +96 + mfs +, + m__fsh +; + +97 + mes +, + m__esh +; + +98 + mds +, + m__dsh +; + +99 + medi +; + +100 + mesi +; + +101 + mebp +; + +102 + me� +; + +103 + mebx +; + +104 + medx +; + +105 + mecx +; + +106 + m�x +; + +107 + m��no +; + +108 + m�r +; + +109 + me� +; + +110 + mcs +, + m__csh +; + +111 + me�ags +; + +112 + me�_�_sig�l +; + +113 + mss +, + m__ssh +; + +114 +_塩e + * + m塩e +; + +115 + m�dmask +; + +116 + m�2 +; + +121 + s_塩e + + +124 +__u�t16_t + + mcwd +; + +125 +__u�t16_t + + mswd +; + +126 +__u�t16_t + + m�w +; + +127 +__u�t16_t + + mf� +; + +128 +__u�t64_t + + mr� +; + +129 +__u�t64_t + + mrdp +; + +130 +__u�t32_t + + mmxc� +; + +131 +__u�t32_t + + mmx�_mask +; + +132 +_�x�g + + m_� +[8]; + +133 +_xmm�g + + m_xmm +[16]; + +134 +__u�t32_t + + m�dd�g +[24]; + +137 + ssigcڋxt + + +139 +__u�t64_t + + mr8 +; + +140 +__u�t64_t + + mr9 +; + +141 +__u�t64_t + + mr10 +; + +142 +__u�t64_t + + mr11 +; + +143 +__u�t64_t + + mr12 +; + +144 +__u�t64_t + + mr13 +; + +145 +__u�t64_t + + mr14 +; + +146 +__u�t64_t + + mr15 +; + +147 +__u�t64_t + + mrdi +; + +148 +__u�t64_t + + mrsi +; + +149 +__u�t64_t + + mrbp +; + +150 +__u�t64_t + + mrbx +; + +151 +__u�t64_t + + mrdx +; + +152 +__u�t64_t + + m�x +; + +153 +__u�t64_t + + mrcx +; + +154 +__u�t64_t + + mr� +; + +155 +__u�t64_t + + mr� +; + +156 +__u�t64_t + + me�ags +; + +157 + mcs +; + +158 + mgs +; + +159 + mfs +; + +160 + m__�d0 +; + +161 +__u�t64_t + + m�r +; + +162 +__u�t64_t + + m��no +; + +163 +__u�t64_t + + m�dmask +; + +164 +__u�t64_t + + m�2 +; + +165 +__ex�nsi�__ + union + +167 +_塩e + * + m塩e +; + +168 +__u�t64_t + + m__塩e_w�d +; + +170 +__u�t64_t + + m__��rved1 + [8]; + +175 + s_x�ve_hdr + + +177 +__u�t64_t + + mx��e_bv +; + +178 +__u�t64_t + + m��rved1 +[2]; + +179 +__u�t64_t + + m��rved2 +[5]; + +182 + s_ymmh_��e + + +184 +__u�t32_t + + mymmh_�a� +[64]; + +187 + s_x��e + + +189 +_塩e + + m塩e +; + +190 +_x�ve_hdr + + mx��e_hdr +; + +191 +_ymmh_��e + + mymmh +; + + @/usr/include/bits/siginfo.h + +19 #i�! +def�ed + +_SIGNAL_H + && !def�ed +__�ed_sig�fo_t + \ + +20 && ! +def�ed + + g__�ed_sigev�t_t + + +24 + ~<b�s/w�dsize.h +> + +26 #i�(! +def�ed + +__have_sigv�_t + \ + +27 && ( +def�ed + + g_SIGNAL_H + || def�ed + g__�ed_sig�fo_t + \ + +28 || +def�ed + + g__�ed_sigev�t_t +)) + +29 + #__have_sigv�_t + 1 + + ) + +32 + usigv� + + +34 + msiv�_�t +; + +35 * + msiv�_�r +; + +36 } + tsigv�_t +; + +39 #i�(! +def�ed + +__have_sig�fo_t + \ + +40 && ( +def�ed + + g_SIGNAL_H + || def�ed + g__�ed_sig�fo_t +)) + +41 + #__have_sig�fo_t + 1 + + ) + +43 + #__SI_MAX_SIZE + 128 + + ) + +44 #i� +__WORDSIZE + == 64 + +45 + #__SI_PAD_SIZE + (( +__SI_MAX_SIZE + / ()�- 4) + + ) + +47 + #__SI_PAD_SIZE + (( +__SI_MAX_SIZE + / ()�- 3) + + ) + +50 #i� +def�ed + +__x86_64__ + && +__WORDSIZE + == 32 + +55 +__�ock_t + + t__��ibu�__ + (( + t__�ig�d__ + (4))� + t__sigchld_�ock_t +; + +56 + #__SI_ALIGNMENT + + `__��ibu�__ + (( + `__�ig�d__ + (8))) + + ) + +58 +__�ock_t + + t__sigchld_�ock_t +; + +59 + #__SI_ALIGNMENT + + + ) + +64 +si_signo +; + +65 +si_��o +; + +67 +si_code +; + +71 +_�d +[ +__SI_PAD_SIZE +]; + +76 +__pid_t + +si_pid +; + +77 +__uid_t + +si_uid +; + +78 } +_k�l +; + +83 +si_tid +; + +84 +si_ov�run +; + +85 +sigv�_t + +si_sigv� +; + +86 } +_tim� +; + +91 +__pid_t + +si_pid +; + +92 +__uid_t + +si_uid +; + +93 +sigv�_t + +si_sigv� +; + +94 } +_� +; + +99 +__pid_t + +si_pid +; + +100 +__uid_t + +si_uid +; + +101 +si_��us +; + +102 +__sigchld_�ock_t + +si_utime +; + +103 +__sigchld_�ock_t + +si_�ime +; + +104 } +_sigchld +; + +109 * +si_addr +; + +110 +si_addr_lsb +; + +111 } +_sig�u� +; + +116 +si_b�d +; + +117 +si_fd +; + +118 } +_sigp�l +; + +123 * +_��_addr +; + +124 +_sys�� +; + +125 +_�ch +; + +126 } +_sigsys +; + +127 } +_sif�lds +; + +128 } + tsig�fo_t + + t__SI_ALIGNMENT +; + +132 + #si_pid + +_sif�lds +. +_k�l +. +si_pid + + + ) + +133 + #si_uid + +_sif�lds +. +_k�l +. +si_uid + + + ) + +134 + #si_tim�id + +_sif�lds +. +_tim� +. +si_tid + + + ) + +135 + #si_ov�run + +_sif�lds +. +_tim� +. +si_ov�run + + + ) + +136 + #si_��us + +_sif�lds +. +_sigchld +. +si_��us + + + ) + +137 + #si_utime + +_sif�lds +. +_sigchld +. +si_utime + + + ) + +138 + #si_�ime + +_sif�lds +. +_sigchld +. +si_�ime + + + ) + +139 + #si_v�ue + +_sif�lds +. +_� +. +si_sigv� + + + ) + +140 + #si_�t + +_sif�lds +. +_� +. +si_sigv� +. +siv�_�t + + + ) + +141 + #si_�r + +_sif�lds +. +_� +. +si_sigv� +. +siv�_�r + + + ) + +142 + #si_addr + +_sif�lds +. +_sig�u� +. +si_addr + + + ) + +143 + #si_addr_lsb + +_sif�lds +. +_sig�u� +. +si_addr_lsb + + + ) + +144 + #si_b�d + +_sif�lds +. +_sigp�l +. +si_b�d + + + ) + +145 + #si_fd + +_sif�lds +. +_sigp�l +. +si_fd + + + ) + +146 + #si_��_addr + +_sif�lds +. +_sigsys +. +_��_addr + + + ) + +147 + #si_sys�� + +_sif�lds +. +_sigsys +. +_sys�� + + + ) + +148 + #si_�ch + +_sif�lds +. +_sigsys +. +_�ch + + + ) + +155 +SI_ASYNCNL + = -60, + +156 + #SI_ASYNCNL + +SI_ASYNCNL + + + ) + +157 +SI_TKILL + = -6, + +158 + #SI_TKILL + +SI_TKILL + + + ) + +159 +SI_SIGIO +, + +160 + #SI_SIGIO + +SI_SIGIO + + + ) + +161 +SI_ASYNCIO +, + +162 + #SI_ASYNCIO + +SI_ASYNCIO + + + ) + +163 +SI_MESGQ +, + +164 + #SI_MESGQ + +SI_MESGQ + + + ) + +165 +SI_TIMER +, + +166 + #SI_TIMER + +SI_TIMER + + + ) + +167 +SI_QUEUE +, + +168 + #SI_QUEUE + +SI_QUEUE + + + ) + +169 +SI_USER +, + +170 + #SI_USER + +SI_USER + + + ) + +171 +SI_KERNEL + = 0x80 + +172 + #SI_KERNEL + +SI_KERNEL + + + ) + +179 +ILL_ILLOPC + = 1, + +180 + #ILL_ILLOPC + +ILL_ILLOPC + + + ) + +181 +ILL_ILLOPN +, + +182 + #ILL_ILLOPN + +ILL_ILLOPN + + + ) + +183 +ILL_ILLADR +, + +184 + #ILL_ILLADR + +ILL_ILLADR + + + ) + +185 +ILL_ILLTRP +, + +186 + #ILL_ILLTRP + +ILL_ILLTRP + + + ) + +187 +ILL_PRVOPC +, + +188 + #ILL_PRVOPC + +ILL_PRVOPC + + + ) + +189 +ILL_PRVREG +, + +190 + #ILL_PRVREG + +ILL_PRVREG + + + ) + +191 +ILL_COPROC +, + +192 + #ILL_COPROC + +ILL_COPROC + + + ) + +193 +ILL_BADSTK + + +194 + #ILL_BADSTK + +ILL_BADSTK + + + ) + +200 +FPE_INTDIV + = 1, + +201 + #FPE_INTDIV + +FPE_INTDIV + + + ) + +202 +FPE_INTOVF +, + +203 + #FPE_INTOVF + +FPE_INTOVF + + + ) + +204 +FPE_FLTDIV +, + +205 + #FPE_FLTDIV + +FPE_FLTDIV + + + ) + +206 +FPE_FLTOVF +, + +207 + #FPE_FLTOVF + +FPE_FLTOVF + + + ) + +208 +FPE_FLTUND +, + +209 + #FPE_FLTUND + +FPE_FLTUND + + + ) + +210 +FPE_FLTRES +, + +211 + #FPE_FLTRES + +FPE_FLTRES + + + ) + +212 +FPE_FLTINV +, + +213 + #FPE_FLTINV + +FPE_FLTINV + + + ) + +214 +FPE_FLTSUB + + +215 + #FPE_FLTSUB + +FPE_FLTSUB + + + ) + +221 +SEGV_MAPERR + = 1, + +222 + #SEGV_MAPERR + +SEGV_MAPERR + + + ) + +223 +SEGV_ACCERR + + +224 + #SEGV_ACCERR + +SEGV_ACCERR + + + ) + +230 +BUS_ADRALN + = 1, + +231 + #BUS_ADRALN + +BUS_ADRALN + + + ) + +232 +BUS_ADRERR +, + +233 + #BUS_ADRERR + +BUS_ADRERR + + + ) + +234 +BUS_OBJERR +, + +235 + #BUS_OBJERR + +BUS_OBJERR + + + ) + +236 +BUS_MCEERR_AR +, + +237 + #BUS_MCEERR_AR + +BUS_MCEERR_AR + + + ) + +238 +BUS_MCEERR_AO + + +239 + #BUS_MCEERR_AO + +BUS_MCEERR_AO + + + ) + +245 +TRAP_BRKPT + = 1, + +246 + #TRAP_BRKPT + +TRAP_BRKPT + + + ) + +247 +TRAP_TRACE + + +248 + #TRAP_TRACE + +TRAP_TRACE + + + ) + +254 +CLD_EXITED + = 1, + +255 + #CLD_EXITED + +CLD_EXITED + + + ) + +256 +CLD_KILLED +, + +257 + #CLD_KILLED + +CLD_KILLED + + + ) + +258 +CLD_DUMPED +, + +259 + #CLD_DUMPED + +CLD_DUMPED + + + ) + +260 +CLD_TRAPPED +, + +261 + #CLD_TRAPPED + +CLD_TRAPPED + + + ) + +262 +CLD_STOPPED +, + +263 + #CLD_STOPPED + +CLD_STOPPED + + + ) + +264 +CLD_CONTINUED + + +265 + #CLD_CONTINUED + +CLD_CONTINUED + + + ) + +271 +POLL_IN + = 1, + +272 + #POLL_IN + +POLL_IN + + + ) + +273 +POLL_OUT +, + +274 + #POLL_OUT + +POLL_OUT + + + ) + +275 +POLL_MSG +, + +276 + #POLL_MSG + +POLL_MSG + + + ) + +277 +POLL_ERR +, + +278 + #POLL_ERR + +POLL_ERR + + + ) + +279 +POLL_PRI +, + +280 + #POLL_PRI + +POLL_PRI + + + ) + +281 +POLL_HUP + + +282 + #POLL_HUP + +POLL_HUP + + + ) + +285 #unde� +__�ed_sig�fo_t + + +289 #i�( +def�ed + +_SIGNAL_H + || def�ed +__�ed_sigev�t_t +) \ + +290 && ! +def�ed + +__have_sigev�t_t + + +291 + #__have_sigev�t_t + 1 + + ) + +294 + #__SIGEV_MAX_SIZE + 64 + + ) + +295 #i� +__WORDSIZE + == 64 + +296 + #__SIGEV_PAD_SIZE + (( +__SIGEV_MAX_SIZE + / ()�- 4) + + ) + +298 + #__SIGEV_PAD_SIZE + (( +__SIGEV_MAX_SIZE + / ()�- 3) + + ) + +302 #i�de� +__have_�h�ad_��_t + + +303 +�h�ad_��_t + + t�h�ad_��_t +; + +304 + #__have_�h�ad_��_t + 1 + + ) + +307 + ssigev�t + + +309 +sigv�_t + +sigev_v�ue +; + +310 +sigev_signo +; + +311 +sigev_n�ify +; + +315 +_�d +[ +__SIGEV_PAD_SIZE +]; + +319 +__pid_t + +_tid +; + +323 (* +_fun�i� +�( +sigv�_t +); + +324 +�h�ad_��_t + * +_��ibu� +; + +325 } +_sigev_th�ad +; + +326 } +_sigev_un +; + +327 } + tsigev�t_t +; + +330 + #sigev_n�ify_fun�i� + +_sigev_un +. +_sigev_th�ad +. +_fun�i� + + + ) + +331 + #sigev_n�ify_��ibu�s + +_sigev_un +. +_sigev_th�ad +. +_��ibu� + + + ) + +336 +SIGEV_SIGNAL + = 0, + +337 + #SIGEV_SIGNAL + +SIGEV_SIGNAL + + + ) + +338 +SIGEV_NONE +, + +339 + #SIGEV_NONE + +SIGEV_NONE + + + ) + +340 +SIGEV_THREAD +, + +341 + #SIGEV_THREAD + +SIGEV_THREAD + + + ) + +343 +SIGEV_THREAD_ID + = 4 + +344 + #SIGEV_THREAD_ID + +SIGEV_THREAD_ID + + + ) + + @/usr/include/bits/signum.h + +19 #ifdef +_SIGNAL_H + + +22 + #SIG_ERR + (( +__sigh�d�r_t +�-1� + + ) + +23 + #SIG_DFL + (( +__sigh�d�r_t +�0� + + ) + +24 + #SIG_IGN + (( +__sigh�d�r_t +�1� + + ) + +26 #ifde� +__USE_UNIX98 + + +27 + #SIG_HOLD + (( +__sigh�d�r_t +�2� + + ) + +32 + #SIGHUP + 1 + + ) + +33 + #SIGINT + 2 + + ) + +34 + #SIGQUIT + 3 + + ) + +35 + #SIGILL + 4 + + ) + +36 + #SIGTRAP + 5 + + ) + +37 + #SIGABRT + 6 + + ) + +38 + #SIGIOT + 6 + + ) + +39 + #SIGBUS + 7 + + ) + +40 + #SIGFPE + 8 + + ) + +41 + #SIGKILL + 9 + + ) + +42 + #SIGUSR1 + 10 + + ) + +43 + #SIGSEGV + 11 + + ) + +44 + #SIGUSR2 + 12 + + ) + +45 + #SIGPIPE + 13 + + ) + +46 + #SIGALRM + 14 + + ) + +47 + #SIGTERM + 15 + + ) + +48 + #SIGSTKFLT + 16 + + ) + +49 + #SIGCLD + +SIGCHLD + + + ) + +50 + #SIGCHLD + 17 + + ) + +51 + #SIGCONT + 18 + + ) + +52 + #SIGSTOP + 19 + + ) + +53 + #SIGTSTP + 20 + + ) + +54 + #SIGTTIN + 21 + + ) + +55 + #SIGTTOU + 22 + + ) + +56 + #SIGURG + 23 + + ) + +57 + #SIGXCPU + 24 + + ) + +58 + #SIGXFSZ + 25 + + ) + +59 + #SIGVTALRM + 26 + + ) + +60 + #SIGPROF + 27 + + ) + +61 + #SIGWINCH + 28 + + ) + +62 + #SIGPOLL + +SIGIO + + + ) + +63 + #SIGIO + 29 + + ) + +64 + #SIGPWR + 30 + + ) + +65 + #SIGSYS + 31 + + ) + +66 + #SIGUNUSED + 31 + + ) + +68 + #_NSIG + 65 + + ) + +71 + #SIGRTMIN + ( + `__libc_cu��t_sig�m� + ()) + + ) + +72 + #SIGRTMAX + ( + `__libc_cu��t_sig�max + ()) + + ) + +76 + #__SIGRTMIN + 32 + + ) + +77 + #__SIGRTMAX + ( +_NSIG + - 1) + + ) + + @/usr/include/bits/sigset.h + +19 #i�def +_SIGSET_H_ty�s + + +20 + #_SIGSET_H_ty�s + 1 + + ) + +22 + t__sig_�omic_t +; + +26 + #_SIGSET_NWORDS + (1024 / (8 * ())) + + ) + +29 + m__v� +[ +_SIGSET_NWORDS +]; + +30 } + t__sig�t_t +; + +41 #i�! +def�ed + +_SIGSET_H_�s + && def�ed +_SIGNAL_H + + +42 + #_SIGSET_H_�s + 1 + + ) + +44 #i�de� +_EXTERN_INLINE + + +45 + #_EXTERN_INLINE + +__ex��_�l�e + + + ) + +49 + #__sigmask +( +sig +) \ + +50 (((�1�<< ((( +sig +�- 1�% (8 * ()))) + + ) + +53 + #__sigw�d +( +sig +�(((sig�- 1�/ (8 * ())) + + ) + +55 #i� +def�ed + +__GNUC__ + && __GNUC__ >= 2 + +56 + #__sigem�y�t +( +�t +) \ + +57 ( + `__ex�nsi�__ + ({ +__�t + = +_SIGSET_NWORDS +; \ + +58 +sig�t_t + * +__�t + = ( +�t +); \ + +59 -- +__�t + >�0� +__�t +-> +__v� +[__cnt] = 0; \ + +60 0; })) + + ) + +61 + #__sigf�l�t +( +�t +) \ + +62 ( + `__ex�nsi�__ + ({ +__�t + = +_SIGSET_NWORDS +; \ + +63 +sig�t_t + * +__�t + = ( +�t +); \ + +64 -- +__�t + >�0� +__�t +-> +__v� +[__cnt] = ~0UL; \ + +65 0; })) + + ) + +67 #ifde� +__USE_GNU + + +71 + #__sigi�m�y�t +( +�t +) \ + +72 ( + `__ex�nsi�__ + ({ +__�t + = +_SIGSET_NWORDS +; \ + +73 cڡ +sig�t_t + * +__�t + = ( +�t +); \ + +74 +__�t + = +__�t +-> +__v� +[-- +__�t +]; \ + +75 ! +__�t + && -- +__�t + >= 0) \ + +76 +__�t + = +__�t +-> +__v� +[ +__�t +]; \ + +77 +__�t + =�0; })) + + ) + +78 + #__sig�d�t +( +de� +, +�� +, +right +) \ + +79 ( + `__ex�nsi�__ + ({ +__�t + = +_SIGSET_NWORDS +; \ + +80 +sig�t_t + * +__de� + = ( +de� +); \ + +81 cڡ +sig�t_t + * +__�� + = ( +�� +); \ + +82 cڡ +sig�t_t + * +__right + = ( +right +); \ + +83 -- +__�t + >= 0) \ + +84 +__de� +-> +__v� +[ +__�t +] = ( +__�� +->__val[__cnt] \ + +85 & +__right +-> +__v� +[ +__�t +]); \ + +86 0; })) + + ) + +87 + #__sigܣt +( +de� +, +�� +, +right +) \ + +88 ( + `__ex�nsi�__ + ({ +__�t + = +_SIGSET_NWORDS +; \ + +89 +sig�t_t + * +__de� + = ( +de� +); \ + +90 cڡ +sig�t_t + * +__�� + = ( +�� +); \ + +91 cڡ +sig�t_t + * +__right + = ( +right +); \ + +92 -- +__�t + >= 0) \ + +93 +__de� +-> +__v� +[ +__�t +] = ( +__�� +->__val[__cnt] \ + +94 | +__right +-> +__v� +[ +__�t +]); \ + +95 0; })) + + ) + +102 +__sigismemb� + (cڡ +__sig�t_t + *, ); + +103 +__sigadd�t + ( +__sig�t_t + *, ); + +104 +__sigd��t + ( +__sig�t_t + *, ); + +106 #ifde� +__USE_EXTERN_INLINES + + +107 + #__SIGSETFN +( +NAME +, +BODY +, +CONST +) \ + +108 +_EXTERN_INLINE + \ + +109 + `NAME + ( +CONST + +__sig�t_t + * +__�t +, +__sig +) \ + +111 +__mask + = + `__sigmask + ( +__sig +); \ + +112 +__w�d + = + `__sigw�d + ( +__sig +); \ + +113 +BODY +; \ + +114 } + + ) + +116 +__SIGSETFN + ( +__sigismemb� +, ( +__�t +-> +__v� +[ +__w�d +] & +__mask +) ? 1 : 0, const) + +117 +__SIGSETFN + ( +__sigadd�t +, (( +__�t +-> +__v� +[ +__w�d +] |� +__mask +), 0), ) + +118 +__SIGSETFN + ( +__sigd��t +, (( +__�t +-> +__v� +[ +__w�d +] &�~ +__mask +), 0), ) + +120 #unde� +__SIGSETFN + + + @/usr/include/bits/sigstack.h + +19 #i�de� +_SIGNAL_H + + +25 + ssig�ack + + +27 * + mss_� +; + +28 + mss_ڡack +; + +35 + mSS_ONSTACK + = 1, + +36 + #SS_ONSTACK + +SS_ONSTACK + + + ) + +37 + mSS_DISABLE + + +38 + #SS_DISABLE + +SS_DISABLE + + + ) + +42 + #MINSIGSTKSZ + 2048 + + ) + +45 + #SIGSTKSZ + 8192 + + ) + +49 + ssig�t�ack + + +51 * + mss_� +; + +52 + mss_�ags +; + +53 +size_t + + mss_size +; + +54 } + t�ack_t +; + + @/usr/include/bits/sigthread.h + +19 #i�de� +_BITS_SIGTHREAD_H + + +20 + #_BITS_SIGTHREAD_H + 1 + + ) + +22 #i�! +def�ed + +_SIGNAL_H + && !def�ed +_PTHREAD_H + + +30 + $�h�ad_sigmask + ( +__how +, + +31 cڡ +__sig�t_t + * +__��ri� + +__�wmask +, + +32 +__sig�t_t + * +__��ri� + +__�dmask +) +__THROW +; + +35 + $�h�ad_k�l + ( +�h�ad_t + +__th�adid +, +__signo +� +__THROW +; + +37 #ifde� +__USE_GNU + + +39 + $�h�ad_sigqueue + ( +�h�ad_t + +__th�adid +, +__signo +, + +40 cڡ +sigv� + +__v�ue +� +__THROW +; + + @/usr/include/bits/sockaddr.h + +23 #i�de� +_BITS_SOCKADDR_H + + +24 + #_BITS_SOCKADDR_H + 1 + + ) + +28 + t�_�m�y_t +; + +34 + #__SOCKADDR_COMMON +( +�_�efix +) \ + +35 +�_�m�y_t + +�_�efix +## +�m�y + + + ) + +37 + #__SOCKADDR_COMMON_SIZE + ( ()) + + ) + + @/usr/include/bits/socket.h + +19 #i�de� +__BITS_SOCKET_H + + +20 + #__BITS_SOCKET_H + + + ) + +22 #i�de� +_SYS_SOCKET_H + + +26 + #__�ed_size_t + + + ) + +27 + ~<�ddef.h +> + +29 + ~<sys/ty�s.h +> + +32 #i�de� +__sock�n_t_def�ed + + +33 +__sock�n_t + + tsock�n_t +; + +34 + #__sock�n_t_def�ed + + + ) + +38 + ~<b�s/sock�_ty�.h +> + +41 + #PF_UNSPEC + 0 + + ) + +42 + #PF_LOCAL + 1 + + ) + +43 + #PF_UNIX + +PF_LOCAL + + + ) + +44 + #PF_FILE + +PF_LOCAL + + + ) + +45 + #PF_INET + 2 + + ) + +46 + #PF_AX25 + 3 + + ) + +47 + #PF_IPX + 4 + + ) + +48 + #PF_APPLETALK + 5 + + ) + +49 + #PF_NETROM + 6 + + ) + +50 + #PF_BRIDGE + 7 + + ) + +51 + #PF_ATMPVC + 8 + + ) + +52 + #PF_X25 + 9 + + ) + +53 + #PF_INET6 + 10 + + ) + +54 + #PF_ROSE + 11 + + ) + +55 + #PF_DEC�t + 12 + + ) + +56 + #PF_NETBEUI + 13 + + ) + +57 + #PF_SECURITY + 14 + + ) + +58 + #PF_KEY + 15 + + ) + +59 + #PF_NETLINK + 16 + + ) + +60 + #PF_ROUTE + +PF_NETLINK + + + ) + +61 + #PF_PACKET + 17 + + ) + +62 + #PF_ASH + 18 + + ) + +63 + #PF_ECONET + 19 + + ) + +64 + #PF_ATMSVC + 20 + + ) + +65 + #PF_RDS + 21 + + ) + +66 + #PF_SNA + 22 + + ) + +67 + #PF_IRDA + 23 + + ) + +68 + #PF_PPPOX + 24 + + ) + +69 + #PF_WANPIPE + 25 + + ) + +70 + #PF_LLC + 26 + + ) + +71 + #PF_CAN + 29 + + ) + +72 + #PF_TIPC + 30 + + ) + +73 + #PF_BLUETOOTH + 31 + + ) + +74 + #PF_IUCV + 32 + + ) + +75 + #PF_RXRPC + 33 + + ) + +76 + #PF_ISDN + 34 + + ) + +77 + #PF_PHONET + 35 + + ) + +78 + #PF_IEEE802154 + 36 + + ) + +79 + #PF_CAIF + 37 + + ) + +80 + #PF_ALG + 38 + + ) + +81 + #PF_NFC + 39 + + ) + +82 + #PF_VSOCK + 40 + + ) + +83 + #PF_MAX + 41 + + ) + +86 + #AF_UNSPEC + +PF_UNSPEC + + + ) + +87 + #AF_LOCAL + +PF_LOCAL + + + ) + +88 + #AF_UNIX + +PF_UNIX + + + ) + +89 + #AF_FILE + +PF_FILE + + + ) + +90 + #AF_INET + +PF_INET + + + ) + +91 + #AF_AX25 + +PF_AX25 + + + ) + +92 + #AF_IPX + +PF_IPX + + + ) + +93 + #AF_APPLETALK + +PF_APPLETALK + + + ) + +94 + #AF_NETROM + +PF_NETROM + + + ) + +95 + #AF_BRIDGE + +PF_BRIDGE + + + ) + +96 + #AF_ATMPVC + +PF_ATMPVC + + + ) + +97 + #AF_X25 + +PF_X25 + + + ) + +98 + #AF_INET6 + +PF_INET6 + + + ) + +99 + #AF_ROSE + +PF_ROSE + + + ) + +100 + #AF_DEC�t + +PF_DEC�t + + + ) + +101 + #AF_NETBEUI + +PF_NETBEUI + + + ) + +102 + #AF_SECURITY + +PF_SECURITY + + + ) + +103 + #AF_KEY + +PF_KEY + + + ) + +104 + #AF_NETLINK + +PF_NETLINK + + + ) + +105 + #AF_ROUTE + +PF_ROUTE + + + ) + +106 + #AF_PACKET + +PF_PACKET + + + ) + +107 + #AF_ASH + +PF_ASH + + + ) + +108 + #AF_ECONET + +PF_ECONET + + + ) + +109 + #AF_ATMSVC + +PF_ATMSVC + + + ) + +110 + #AF_RDS + +PF_RDS + + + ) + +111 + #AF_SNA + +PF_SNA + + + ) + +112 + #AF_IRDA + +PF_IRDA + + + ) + +113 + #AF_PPPOX + +PF_PPPOX + + + ) + +114 + #AF_WANPIPE + +PF_WANPIPE + + + ) + +115 + #AF_LLC + +PF_LLC + + + ) + +116 + #AF_CAN + +PF_CAN + + + ) + +117 + #AF_TIPC + +PF_TIPC + + + ) + +118 + #AF_BLUETOOTH + +PF_BLUETOOTH + + + ) + +119 + #AF_IUCV + +PF_IUCV + + + ) + +120 + #AF_RXRPC + +PF_RXRPC + + + ) + +121 + #AF_ISDN + +PF_ISDN + + + ) + +122 + #AF_PHONET + +PF_PHONET + + + ) + +123 + #AF_IEEE802154 + +PF_IEEE802154 + + + ) + +124 + #AF_CAIF + +PF_CAIF + + + ) + +125 + #AF_ALG + +PF_ALG + + + ) + +126 + #AF_NFC + +PF_NFC + + + ) + +127 + #AF_VSOCK + +PF_VSOCK + + + ) + +128 + #AF_MAX + +PF_MAX + + + ) + +134 + #SOL_RAW + 255 + + ) + +135 + #SOL_DECNET + 261 + + ) + +136 + #SOL_X25 + 262 + + ) + +137 + #SOL_PACKET + 263 + + ) + +138 + #SOL_ATM + 264 + + ) + +139 + #SOL_AAL + 265 + + ) + +140 + #SOL_IRDA + 266 + + ) + +143 + #SOMAXCONN + 128 + + ) + +146 + ~<b�s/sockaddr.h +> + +149 + ssockaddr + + +151 +__SOCKADDR_COMMON + ( +�_ +); + +152 + m�_d�a +[14]; + +158 + #__ss_�ig�y� + + + ) + +159 + #_SS_SIZE + 128 + + ) + +160 + #_SS_PADSIZE + ( +_SS_SIZE + - (2 * ( +__ss_�ig�y� +))) + + ) + +162 + ssockaddr_��age + + +164 +__SOCKADDR_COMMON + ( +ss_ +); + +165 +__ss_�ig�y� + + m__ss_�ign +; + +166 + m__ss_�dd�g +[ +_SS_PADSIZE +]; + +173 + mMSG_OOB + = 0x01, + +174 + #MSG_OOB + +MSG_OOB + + + ) + +175 + mMSG_PEEK + = 0x02, + +176 + #MSG_PEEK + +MSG_PEEK + + + ) + +177 + mMSG_DONTROUTE + = 0x04, + +178 + #MSG_DONTROUTE + +MSG_DONTROUTE + + + ) + +179 #ifde� +__USE_GNU + + +181 + mMSG_TRYHARD + = +MSG_DONTROUTE +, + +182 + #MSG_TRYHARD + +MSG_DONTROUTE + + + ) + +184 + mMSG_CTRUNC + = 0x08, + +185 + #MSG_CTRUNC + +MSG_CTRUNC + + + ) + +186 + mMSG_PROXY + = 0x10, + +187 + #MSG_PROXY + +MSG_PROXY + + + ) + +188 + mMSG_TRUNC + = 0x20, + +189 + #MSG_TRUNC + +MSG_TRUNC + + + ) + +190 + mMSG_DONTWAIT + = 0x40, + +191 + #MSG_DONTWAIT + +MSG_DONTWAIT + + + ) + +192 + mMSG_EOR + = 0x80, + +193 + #MSG_EOR + +MSG_EOR + + + ) + +194 + mMSG_WAITALL + = 0x100, + +195 + #MSG_WAITALL + +MSG_WAITALL + + + ) + +196 + mMSG_FIN + = 0x200, + +197 + #MSG_FIN + +MSG_FIN + + + ) + +198 + mMSG_SYN + = 0x400, + +199 + #MSG_SYN + +MSG_SYN + + + ) + +200 + mMSG_CONFIRM + = 0x800, + +201 + #MSG_CONFIRM + +MSG_CONFIRM + + + ) + +202 + mMSG_RST + = 0x1000, + +203 + #MSG_RST + +MSG_RST + + + ) + +204 + mMSG_ERRQUEUE + = 0x2000, + +205 + #MSG_ERRQUEUE + +MSG_ERRQUEUE + + + ) + +206 + mMSG_NOSIGNAL + = 0x4000, + +207 + #MSG_NOSIGNAL + +MSG_NOSIGNAL + + + ) + +208 + mMSG_MORE + = 0x8000, + +209 + #MSG_MORE + +MSG_MORE + + + ) + +210 + mMSG_WAITFORONE + = 0x10000, + +211 + #MSG_WAITFORONE + +MSG_WAITFORONE + + + ) + +212 + mMSG_FASTOPEN + = 0x20000000, + +213 + #MSG_FASTOPEN + +MSG_FASTOPEN + + + ) + +215 + mMSG_CMSG_CLOEXEC + = 0x40000000 + +218 + #MSG_CMSG_CLOEXEC + +MSG_CMSG_CLOEXEC + + + ) + +224 + smsghdr + + +226 * + mmsg_�me +; + +227 +sock�n_t + + mmsg_�m�� +; + +229 +iovec + * + mmsg_iov +; + +230 +size_t + + mmsg_iov�n +; + +232 * + mmsg_cڌ� +; + +233 +size_t + + mmsg_cڌ��n +; + +238 + mmsg_�ags +; + +242 + scmsghdr + + +244 +size_t + + mcmsg_�n +; + +249 + mcmsg_�v� +; + +250 + mcmsg_ty� +; + +251 #i�(! +def�ed + +__STRICT_ANSI__ + && +__GNUC__ + >�2�|| +__STDC_VERSION__ + >= 199901L + +252 +__ex�nsi�__ + +__cmsg_d�a + + m__�ex�r +; + +257 #i�(! +def�ed + +__STRICT_ANSI__ + && +__GNUC__ + >�2�|| +__STDC_VERSION__ + >= 199901L + +258 + #CMSG_DATA +( +cmsg +�((cmsg)-> +__cmsg_d�a +) + + ) + +260 + #CMSG_DATA +( +cmsg +�((*�(( +cmsghdr + *�(cmsg�+ 1)) + + ) + +262 + #CMSG_NXTHDR +( +mhdr +, +cmsg +� + `__cmsg_nxthdr + (mhdr, cmsg) + + ) + +263 + #CMSG_FIRSTHDR +( +mhdr +) \ + +264 (( +size_t +�( +mhdr +)-> +msg_cڌ��n + >� ( +cmsghdr +) \ + +265 ? ( +cmsghdr + *�( +mhdr +)-> +msg_cڌ� + : (cmsghd�*�0) + + ) + +266 + #CMSG_ALIGN +( +�n +�((֒�+ ( +size_t +) - 1) \ + +267 & ( +size_t +�~( (size_t�- 1)) + + ) + +268 + #CMSG_SPACE +( +�n +�( + `CMSG_ALIGN + (len) \ + +269 + + `CMSG_ALIGN + ( ( +cmsghdr +))) + + ) + +270 + #CMSG_LEN +( +�n +�( + `CMSG_ALIGN + ( ( +cmsghdr +)�+ (�n)) + + ) + +272 +cmsghdr + * + $__cmsg_nxthdr + ( +msghdr + * +__mhdr +, + +273 +cmsghdr + * +__cmsg +� +__THROW +; + +274 #ifde� +__USE_EXTERN_INLINES + + +275 #i�de� +_EXTERN_INLINE + + +276 + #_EXTERN_INLINE + +__ex��_�l�e + + + ) + +278 +_EXTERN_INLINE + +cmsghdr + * + +279 + `__NTH + ( + $__cmsg_nxthdr + ( +msghdr + * +__mhdr +, +cmsghdr + * +__cmsg +)) + +281 i�(( +size_t +� +__cmsg +-> +cmsg_�n + < ( +cmsghdr +)) + +283 ( +cmsghdr + *) 0; + +285 +__cmsg + = ( +cmsghdr + *) ((*) __cmsg + +286 + + `CMSG_ALIGN + ( +__cmsg +-> +cmsg_�n +)); + +287 i�((*�( +__cmsg + + 1�> ((*� +__mhdr +-> +msg_cڌ� + + +288 + +__mhdr +-> +msg_cڌ��n +) + +289 || ((*� +__cmsg + + + `CMSG_ALIGN + (__cmsg-> +cmsg_�n +) + +290 > ((*� +__mhdr +-> +msg_cڌ� + + __mhdr-> +msg_cڌ��n +))) + +292 ( +cmsghdr + *) 0; + +293 +__cmsg +; + +294 + } +} + +301 + mSCM_RIGHTS + = 0x01 + +302 + #SCM_RIGHTS + +SCM_RIGHTS + + + ) + +303 #ifde� +__USE_GNU + + +304 , + mSCM_CREDENTIALS + = 0x02 + +305 + #SCM_CREDENTIALS + +SCM_CREDENTIALS + + + ) + +309 #ifde� +__USE_GNU + + +311 + su�ed + + +313 +pid_t + + mpid +; + +314 +uid_t + + muid +; + +315 +gid_t + + mgid +; + +320 #i�! +def�ed + +__USE_MISC + && !def�ed +__USE_GNU + + +321 #i�de� +FIOGETOWN + + +322 + #__SYS_SOCKET_H_undef_FIOGETOWN + + + ) + +324 #i�de� +FIOSETOWN + + +325 + #__SYS_SOCKET_H_undef_FIOSETOWN + + + ) + +327 #i�de� +SIOCATMARK + + +328 + #__SYS_SOCKET_H_undef_SIOCATMARK + + + ) + +330 #i�de� +SIOCGPGRP + + +331 + #__SYS_SOCKET_H_undef_SIOCGPGRP + + + ) + +333 #i�de� +SIOCGSTAMP + + +334 + #__SYS_SOCKET_H_undef_SIOCGSTAMP + + + ) + +336 #i�de� +SIOCGSTAMPNS + + +337 + #__SYS_SOCKET_H_undef_SIOCGSTAMPNS + + + ) + +339 #i�de� +SIOCSPGRP + + +340 + #__SYS_SOCKET_H_undef_SIOCSPGRP + + + ) + +345 + ~<asm/sock�.h +> + +347 #i�! +def�ed + +__USE_MISC + && !def�ed +__USE_GNU + + +348 #ifde� +__SYS_SOCKET_H_undef_FIOGETOWN + + +349 #unde� +__SYS_SOCKET_H_undef_FIOGETOWN + + +350 #unde� +FIOGETOWN + + +352 #ifde� +__SYS_SOCKET_H_undef_FIOSETOWN + + +353 #unde� +__SYS_SOCKET_H_undef_FIOSETOWN + + +354 #unde� +FIOSETOWN + + +356 #ifde� +__SYS_SOCKET_H_undef_SIOCATMARK + + +357 #unde� +__SYS_SOCKET_H_undef_SIOCATMARK + + +358 #unde� +SIOCATMARK + + +360 #ifde� +__SYS_SOCKET_H_undef_SIOCGPGRP + + +361 #unde� +__SYS_SOCKET_H_undef_SIOCGPGRP + + +362 #unde� +SIOCGPGRP + + +364 #ifde� +__SYS_SOCKET_H_undef_SIOCGSTAMP + + +365 #unde� +__SYS_SOCKET_H_undef_SIOCGSTAMP + + +366 #unde� +SIOCGSTAMP + + +368 #ifde� +__SYS_SOCKET_H_undef_SIOCGSTAMPNS + + +369 #unde� +__SYS_SOCKET_H_undef_SIOCGSTAMPNS + + +370 #unde� +SIOCGSTAMPNS + + +372 #ifde� +__SYS_SOCKET_H_undef_SIOCSPGRP + + +373 #unde� +__SYS_SOCKET_H_undef_SIOCSPGRP + + +374 #unde� +SIOCSPGRP + + +379 + sl�g� + + +381 + ml_�off +; + +382 + ml_l�g� +; + + @/usr/include/bits/socket2.h + +19 #i�de� +_SYS_SOCKET_H + + +23 +ssize_t + +__�cv_chk + ( +__fd +, * +__buf +, +size_t + +__n +, size_� +__bu� +, + +24 +__�ags +); + +25 +ssize_t + +__REDIRECT + ( +__�cv_��s +, ( +__fd +, * +__buf +, +size_t + +__n +, + +26 +__�ags +), +�cv +); + +27 +ssize_t + +__REDIRECT + ( +__�cv_chk_w�n +, + +28 ( +__fd +, * +__buf +, +size_t + +__n +, size_� +__bu� +, + +29 +__�ags +), +__�cv_chk +) + +30 +__w�ljr + ("recv called with bigger�ength�han size of destination " + +33 +__f�tify_fun�i� + +ssize_t + + +34 + $�cv + ( +__fd +, * +__buf +, +size_t + +__n +, +__�ags +) + +36 i�( + `__bos0 + ( +__buf +�!�( +size_t +) -1) + +38 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +39 + `__�cv_chk + ( +__fd +, +__buf +, +__n +, + `__bos0 + (__buf), +__�ags +); + +41 i�( +__n + > + `__bos0 + ( +__buf +)) + +42 + `__�cv_chk_w�n + ( +__fd +, +__buf +, +__n +, + `__bos0 + (__buf), +__�ags +); + +44 + `__�cv_��s + ( +__fd +, +__buf +, +__n +, +__�ags +); + +45 + } +} + +47 +ssize_t + +__�cv�om_chk + ( +__fd +, * +__��ri� + +__buf +, +size_t + +__n +, + +48 +size_t + +__bu� +, +__�ags +, + +49 +__SOCKADDR_ARG + +__addr +, + +50 +sock�n_t + * +__��ri� + +__addr_�n +); + +51 +ssize_t + +__REDIRECT + ( +__�cv�om_��s +, + +52 ( +__fd +, * +__��ri� + +__buf +, +size_t + +__n +, + +53 +__�ags +, +__SOCKADDR_ARG + +__addr +, + +54 +sock�n_t + * +__��ri� + +__addr_�n +), +�cv�om +); + +55 +ssize_t + +__REDIRECT + ( +__�cv�om_chk_w�n +, + +56 ( +__fd +, * +__��ri� + +__buf +, +size_t + +__n +, + +57 +size_t + +__bu� +, +__�ags +, + +58 +__SOCKADDR_ARG + +__addr +, + +59 +sock�n_t + * +__��ri� + +__addr_�n +), +__�cv�om_chk +) + +60 +__w�ljr + ("recvfrom called with bigger�ength�han size of " + +63 +__f�tify_fun�i� + +ssize_t + + +64 + $�cv�om + ( +__fd +, * +__��ri� + +__buf +, +size_t + +__n +, +__�ags +, + +65 +__SOCKADDR_ARG + +__addr +, +sock�n_t + * +__��ri� + +__addr_�n +) + +67 i�( + `__bos0 + ( +__buf +�!�( +size_t +) -1) + +69 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +70 + `__�cv�om_chk + ( +__fd +, +__buf +, +__n +, + `__bos0 + (__buf), +__�ags +, + +71 +__addr +, +__addr_�n +); + +72 i�( +__n + > + `__bos0 + ( +__buf +)) + +73 + `__�cv�om_chk_w�n + ( +__fd +, +__buf +, +__n +, + `__bos0 + (__buf), +__�ags +, + +74 +__addr +, +__addr_�n +); + +76 + `__�cv�om_��s + ( +__fd +, +__buf +, +__n +, +__�ags +, +__addr +, +__addr_�n +); + +77 + } +} + + @/usr/include/bits/stat.h + +18 #i�! +def�ed + +_SYS_STAT_H + && !def�ed +_FCNTL_H + + +22 #i�de� +_BITS_STAT_H + + +23 + #_BITS_STAT_H + 1 + + ) + +26 #i�de� +__x86_64__ + + +27 + #_STAT_VER_LINUX_OLD + 1 + + ) + +28 + #_STAT_VER_KERNEL + 1 + + ) + +29 + #_STAT_VER_SVR4 + 2 + + ) + +30 + #_STAT_VER_LINUX + 3 + + ) + +33 + #_MKNOD_VER_LINUX + 1 + + ) + +34 + #_MKNOD_VER_SVR4 + 2 + + ) + +35 + #_MKNOD_VER + +_MKNOD_VER_LINUX + + + ) + +37 + #_STAT_VER_KERNEL + 0 + + ) + +38 + #_STAT_VER_LINUX + 1 + + ) + +41 + #_MKNOD_VER_LINUX + 0 + + ) + +44 + #_STAT_VER + +_STAT_VER_LINUX + + + ) + +46 + s�� + + +48 +__dev_t + + m�_dev +; + +49 #i�de� +__x86_64__ + + +50 + m__�d1 +; + +52 #i� +def�ed + +__x86_64__ + || !def�ed +__USE_FILE_OFFSET64 + + +53 +__�o_t + + m�_�o +; + +55 +__�o_t + + m__�_�o +; + +57 #i�de� +__x86_64__ + + +58 +__mode_t + + m�_mode +; + +59 +__ƚk_t + + m�_ƚk +; + +61 +__ƚk_t + + m�_ƚk +; + +62 +__mode_t + + m�_mode +; + +64 +__uid_t + + m�_uid +; + +65 +__gid_t + + m�_gid +; + +66 #ifde� +__x86_64__ + + +67 + m__�d0 +; + +69 +__dev_t + + m�_rdev +; + +70 #i�de� +__x86_64__ + + +71 + m__�d2 +; + +73 #i� +def�ed + +__x86_64__ + || !def�ed +__USE_FILE_OFFSET64 + + +74 +__off_t + + m�_size +; + +76 +__off64_t + + m�_size +; + +78 +__blksize_t + + m�_blksize +; + +79 #i� +def�ed + +__x86_64__ + || !def�ed +__USE_FILE_OFFSET64 + + +80 +__blk�t_t + + m�_blocks +; + +82 +__blk�t64_t + + m�_blocks +; + +84 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN2K8 + + +91 +time�ec + + m�_�im +; + +92 +time�ec + + m�_mtim +; + +93 +time�ec + + m�_�im +; + +94 + #�_�ime + +�_�im +. +tv_�c + + + ) + +95 + #�_mtime + +�_mtim +. +tv_�c + + + ) + +96 + #�_�ime + +�_�im +. +tv_�c + + + ) + +98 +__time_t + + m�_�ime +; + +99 +__sys��_ul�g_t + + m�_�im��c +; + +100 +__time_t + + m�_mtime +; + +101 +__sys��_ul�g_t + + m�_mtim��c +; + +102 +__time_t + + m�_�ime +; + +103 +__sys��_ul�g_t + + m�_�im��c +; + +105 #ifde� +__x86_64__ + + +106 +__sys��_��g_t + + m__glibc_��rved +[3]; + +108 #i�de� +__USE_FILE_OFFSET64 + + +109 + m__glibc_��rved4 +; + +110 + m__glibc_��rved5 +; + +112 +__�o64_t + + m�_�o +; + +117 #ifde� +__USE_LARGEFILE64 + + +119 + s��64 + + +121 +__dev_t + + m�_dev +; + +122 #ifde� +__x86_64__ + + +123 +__�o64_t + + m�_�o +; + +124 +__ƚk_t + + m�_ƚk +; + +125 +__mode_t + + m�_mode +; + +127 + m__�d1 +; + +128 +__�o_t + + m__�_�o +; + +129 +__mode_t + + m�_mode +; + +130 +__ƚk_t + + m�_ƚk +; + +132 +__uid_t + + m�_uid +; + +133 +__gid_t + + m�_gid +; + +134 #ifde� +__x86_64__ + + +135 + m__�d0 +; + +136 +__dev_t + + m�_rdev +; + +137 +__off_t + + m�_size +; + +139 +__dev_t + + m�_rdev +; + +140 + m__�d2 +; + +141 +__off64_t + + m�_size +; + +143 +__blksize_t + + m�_blksize +; + +144 +__blk�t64_t + + m�_blocks +; + +145 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN2K8 + + +152 +time�ec + + m�_�im +; + +153 +time�ec + + m�_mtim +; + +154 +time�ec + + m�_�im +; + +156 +__time_t + + m�_�ime +; + +157 +__sys��_ul�g_t + + m�_�im��c +; + +158 +__time_t + + m�_mtime +; + +159 +__sys��_ul�g_t + + m�_mtim��c +; + +160 +__time_t + + m�_�ime +; + +161 +__sys��_ul�g_t + + m�_�im��c +; + +163 #ifde� +__x86_64__ + + +164 +__sys��_��g_t + + m__glibc_��rved +[3]; + +166 +__�o64_t + + m�_�o +; + +172 + #_STATBUF_ST_BLKSIZE + + + ) + +173 + #_STATBUF_ST_RDEV + + + ) + +175 + #_STATBUF_ST_NSEC + + + ) + +179 + #__S_IFMT + 0170000 + + ) + +182 + #__S_IFDIR + 0040000 + + ) + +183 + #__S_IFCHR + 0020000 + + ) + +184 + #__S_IFBLK + 0060000 + + ) + +185 + #__S_IFREG + 0100000 + + ) + +186 + #__S_IFIFO + 0010000 + + ) + +187 + #__S_IFLNK + 0120000 + + ) + +188 + #__S_IFSOCK + 0140000 + + ) + +192 + #__S_TYPEISMQ +( +buf +�((buf)-> +�_mode + - (buf)->�_mode) + + ) + +193 + #__S_TYPEISSEM +( +buf +�((buf)-> +�_mode + - (buf)->�_mode) + + ) + +194 + #__S_TYPEISSHM +( +buf +�((buf)-> +�_mode + - (buf)->�_mode) + + ) + +198 + #__S_ISUID + 04000 + + ) + +199 + #__S_ISGID + 02000 + + ) + +200 + #__S_ISVTX + 01000 + + ) + +201 + #__S_IREAD + 0400 + + ) + +202 + #__S_IWRITE + 0200 + + ) + +203 + #__S_IEXEC + 0100 + + ) + +205 #ifde� +__USE_ATFILE + + +206 + #UTIME_NOW + ((1�<< 30�- 1l) + + ) + +207 + #UTIME_OMIT + ((1�<< 30�- 2l) + + ) + + @/usr/include/bits/stdio-ldbl.h + +19 #i�de� +_STDIO_H + + +23 +__BEGIN_NAMESPACE_STD + + +24 + $__LDBL_REDIR_DECL + ( +�r�tf +) + +25 + $__LDBL_REDIR_DECL + ( +��tf +) + +26 + $__LDBL_REDIR_DECL + ( +�r�tf +) + +27 + $__LDBL_REDIR_DECL + ( +v�r�tf +) + +28 + $__LDBL_REDIR_DECL + ( +v��tf +) + +29 + $__LDBL_REDIR_DECL + ( +v�r�tf +) + +30 #i� +def�ed + +__USE_ISOC99 + && !def�ed +__USE_GNU + \ + +31 && ! +def�ed + +__REDIRECT + \ + +32 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +33 + $__LDBL_REDIR1_DECL + ( +fs�nf +, +__�dbl___isoc99_fs�nf +) + +34 + $__LDBL_REDIR1_DECL + ( +s�nf +, +__�dbl___isoc99_s�nf +) + +35 + $__LDBL_REDIR1_DECL + ( +ss�nf +, +__�dbl___isoc99_ss�nf +) + +37 + $__LDBL_REDIR_DECL + ( +fs�nf +) + +38 + $__LDBL_REDIR_DECL + ( +s�nf +) + +39 + $__LDBL_REDIR_DECL + ( +ss�nf +) + +41 +__END_NAMESPACE_STD + + +43 #i� +def�ed + +__USE_BSD + || def�ed +__USE_ISOC99 + || def�ed +__USE_UNIX98 + + +44 +__BEGIN_NAMESPACE_C99 + + +45 + $__LDBL_REDIR_DECL + ( +���tf +) + +46 + $__LDBL_REDIR_DECL + ( +v���tf +) + +47 +__END_NAMESPACE_C99 + + +50 #ifdef +__USE_ISOC99 + + +51 +__BEGIN_NAMESPACE_C99 + + +52 #i�! +def�ed + +__USE_GNU + && !def�ed +__REDIRECT + \ + +53 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +54 + $__LDBL_REDIR1_DECL + ( +vfs�nf +, +__�dbl___isoc99_vfs�nf +) + +55 + $__LDBL_REDIR1_DECL + ( +vs�nf +, +__�dbl___isoc99_vs�nf +) + +56 + $__LDBL_REDIR1_DECL + ( +vss�nf +, +__�dbl___isoc99_vss�nf +) + +58 + $__LDBL_REDIR_DECL + ( +vfs�nf +) + +59 + $__LDBL_REDIR_DECL + ( +vss�nf +) + +60 + $__LDBL_REDIR_DECL + ( +vs�nf +) + +62 +__END_NAMESPACE_C99 + + +65 #ifde� +__USE_XOPEN2K8 + + +66 + $__LDBL_REDIR_DECL + ( +vd��tf +) + +67 + $__LDBL_REDIR_DECL + ( +d��tf +) + +70 #ifde� +__USE_GNU + + +71 + $__LDBL_REDIR_DECL + ( +va�r�tf +) + +72 + $__LDBL_REDIR_DECL + ( +__a�r�tf +) + +73 + $__LDBL_REDIR_DECL + ( +a�r�tf +) + +74 + $__LDBL_REDIR_DECL + ( +ob�ack_��tf +) + +75 + $__LDBL_REDIR_DECL + ( +ob�ack_v��tf +) + +78 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__f�tify_fun�i� + + +79 + $__LDBL_REDIR_DECL + ( +__�r�tf_chk +) + +80 + $__LDBL_REDIR_DECL + ( +__v�r�tf_chk +) + +81 #i� +def�ed + +__USE_BSD + || def�ed +__USE_ISOC99 + || def�ed +__USE_UNIX98 + + +82 + $__LDBL_REDIR_DECL + ( +__���tf_chk +) + +83 + $__LDBL_REDIR_DECL + ( +__v���tf_chk +) + +85 #i� +__USE_FORTIFY_LEVEL + > 1 + +86 + $__LDBL_REDIR_DECL + ( +__�r�tf_chk +) + +87 + $__LDBL_REDIR_DECL + ( +__��tf_chk +) + +88 + $__LDBL_REDIR_DECL + ( +__v�r�tf_chk +) + +89 + $__LDBL_REDIR_DECL + ( +__v��tf_chk +) + +90 #ifde� +__USE_XOPEN2K8 + + +91 + $__LDBL_REDIR_DECL + ( +__d��tf_chk +) + +92 + $__LDBL_REDIR_DECL + ( +__vd��tf_chk +) + +94 #ifde� +__USE_GNU + + +95 + $__LDBL_REDIR_DECL + ( +__a�r�tf_chk +) + +96 + $__LDBL_REDIR_DECL + ( +__va�r�tf_chk +) + +97 + $__LDBL_REDIR_DECL + ( +__ob�ack_��tf_chk +) + +98 + $__LDBL_REDIR_DECL + ( +__ob�ack_v��tf_chk +) + + @/usr/include/bits/stdio.h + +19 #i�de� +_STDIO_H + + +23 #i�de� +__ex��_�l�e + + +24 + #__STDIO_INLINE + +�l�e + + + ) + +26 + #__STDIO_INLINE + +__ex��_�l�e + + + ) + +30 #ifde� +__USE_EXTERN_INLINES + + +33 #i�!( +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__f�tify_fun�i� +) + +35 +__STDIO_INLINE + + +36 + $v��tf + (cڡ * +__��ri� + +__fmt +, +_G_va_li� + +__�g +) + +38 + `v�r�tf + ( +�dout +, +__fmt +, +__�g +); + +39 + } +} + +43 +__STDIO_INLINE + + +44 + $g�ch� + () + +46 + `_IO_g�c + ( +�d� +); + +47 + } +} + +50 #ifde� +__USE_MISC + + +52 +__STDIO_INLINE + + +53 + $fg�c_u�ocked + ( +FILE + * +__� +) + +55 + `_IO_g�c_u�ocked + ( +__� +); + +56 + } +} + +60 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +62 +__STDIO_INLINE + + +63 + $g�c_u�ocked + ( +FILE + * +__� +) + +65 + `_IO_g�c_u�ocked + ( +__� +); + +66 + } +} + +69 +__STDIO_INLINE + + +70 + $g�ch�_u�ocked + () + +72 + `_IO_g�c_u�ocked + ( +�d� +); + +73 + } +} + +78 +__STDIO_INLINE + + +79 + $putch� + ( +__c +) + +81 + `_IO_putc + ( +__c +, +�dout +); + +82 + } +} + +85 #ifde� +__USE_MISC + + +87 +__STDIO_INLINE + + +88 + $�utc_u�ocked + ( +__c +, +FILE + * +__��am +) + +90 + `_IO_putc_u�ocked + ( +__c +, +__��am +); + +91 + } +} + +95 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +97 +__STDIO_INLINE + + +98 + $putc_u�ocked + ( +__c +, +FILE + * +__��am +) + +100 + `_IO_putc_u�ocked + ( +__c +, +__��am +); + +101 + } +} + +104 +__STDIO_INLINE + + +105 + $putch�_u�ocked + ( +__c +) + +107 + `_IO_putc_u�ocked + ( +__c +, +�dout +); + +108 + } +} + +112 #ifdef +__USE_GNU + + +114 +__STDIO_INLINE + +_IO_ssize_t + + +115 + $g�l�e + (** +__l��� +, +size_t + * +__n +, +FILE + * +__��am +) + +117 + `__g�d�im + ( +__l��� +, +__n +, '\n', +__��am +); + +118 + } +} + +122 #ifde� +__USE_MISC + + +124 +__STDIO_INLINE + + +125 +__NTH + ( + $�of_u�ocked + ( +FILE + * +__��am +)) + +127 + `_IO_�of_u�ocked + ( +__��am +); + +128 + } +} + +131 +__STDIO_INLINE + + +132 +__NTH + ( + $��_u�ocked + ( +FILE + * +__��am +)) + +134 + `_IO_��_u�ocked + ( +__��am +); + +135 + } +} + +141 #i� +def�ed + +__USE_MISC + && def�ed +__GNUC__ + && def�ed +__OPTIMIZE__ + \ + +142 && ! +def�ed + + g__�lu�lus + + +144 + #�d_u�ocked +( +�r +, +size +, +n +, +��am +) \ + +145 ( + `__ex�nsi�__ + (( + `__bu�t�_cڡ�t_p + ( +size +�&& __bu�t�_cڡ�t_�( +n +) \ + +146 && ( +size_t +�( +size +�* (size_t�( +n +) <= 8 \ + +147 && ( +size_t +�( +size +) != 0) \ + +148 ? ({ * +__�r + = (*�( +�r +); \ + +149 +FILE + * +__��am + = ( +��am +); \ + +150 +size_t + +__�t +; \ + +151 +__�t + = ( +size_t +�( +size +�* (size_t�( +n +); \ + +152 +__�t + > 0; --__cnt) \ + +154 +__c + = + `_IO_g�c_u�ocked + ( +__��am +); \ + +155 i�( +__c + =� +EOF +) \ + +157 * +__�r +++ = +__c +; \ + +159 (( +size_t +�( +size +�* (size_t�( +n +�- +__�t +) \ + +160 / ( +size_t +�( +size +); }) \ + +161 : ((( + `__bu�t�_cڡ�t_p + ( +size +�&& ( +size_t +) (size) == 0) \ + +162 || ( + `__bu�t�_cڡ�t_p + ( +n +�&& ( +size_t +) (n) == 0)) \ + +164 ? ((�( +�r +), (�( +��am +), (�( +size +), \ + +165 (�( +n +), ( +size_t +) 0) \ + +166 : + `�d_u�ocked + ( +�r +, +size +, +n +, +��am +)))) + + ) + +168 + #fwr�e_u�ocked +( +�r +, +size +, +n +, +��am +) \ + +169 ( + `__ex�nsi�__ + (( + `__bu�t�_cڡ�t_p + ( +size +�&& __bu�t�_cڡ�t_�( +n +) \ + +170 && ( +size_t +�( +size +�* (size_t�( +n +) <= 8 \ + +171 && ( +size_t +�( +size +) != 0) \ + +172 ? ({ cڡ * +__�r + = (cڡ *�( +�r +); \ + +173 +FILE + * +__��am + = ( +��am +); \ + +174 +size_t + +__�t +; \ + +175 +__�t + = ( +size_t +�( +size +�* (size_t�( +n +); \ + +176 +__�t + > 0; --__cnt) \ + +177 i�( + `_IO_putc_u�ocked + (* +__�r +++, +__��am +�=� +EOF +) \ + +179 (( +size_t +�( +size +�* (size_t�( +n +�- +__�t +) \ + +180 / ( +size_t +�( +size +); }) \ + +181 : ((( + `__bu�t�_cڡ�t_p + ( +size +�&& ( +size_t +) (size) == 0) \ + +182 || ( + `__bu�t�_cڡ�t_p + ( +n +�&& ( +size_t +) (n) == 0)) \ + +184 ? ((�( +�r +), (�( +��am +), (�( +size +), \ + +185 (�( +n +), ( +size_t +) 0) \ + +186 : + `fwr�e_u�ocked + ( +�r +, +size +, +n +, +��am +)))) + + ) + +190 #unde� +__STDIO_INLINE + + + @/usr/include/bits/stdio2.h + +19 #i�de� +_STDIO_H + + +23 + $__�r�tf_chk + (* +__��ri� + +__s +, +__�ag +, +size_t + +__�� +, + +24 cڡ * +__��ri� + +__f�m� +, ...� +__THROW +; + +25 + $__v�r�tf_chk + (* +__��ri� + +__s +, +__�ag +, +size_t + +__�� +, + +26 cڡ * +__��ri� + +__f�m� +, + +27 +_G_va_li� + +__� +� +__THROW +; + +29 #ifde� +__va_�g_�ck + + +30 +__f�tify_fun�i� + + +31 + `__NTH + ( + $�r�tf + (* +__��ri� + +__s +, cڡ *__��ri� +__fmt +, ...)) + +33 + `__bu�t�___�r�tf_chk + ( +__s +, +__USE_FORTIFY_LEVEL + - 1, + +34 + `__bos + ( +__s +), +__fmt +, + `__va_�g_�ck + ()); + +35 + } +} + +36 #�i�! +def�ed + +__�lu�lus + + +37 + #�r�tf +( +�r +, ...) \ + +38 + `__bu�t�___�r�tf_chk + ( +�r +, +__USE_FORTIFY_LEVEL + - 1, + `__bos + (str), \ + +39 +__VA_ARGS__ +) + + ) + +42 +__f�tify_fun�i� + + +43 +__NTH + ( + $v�r�tf + (* +__��ri� + +__s +, cڡ *__��ri� +__fmt +, + +44 +_G_va_li� + +__� +)) + +46 + `__bu�t�___v�r�tf_chk + ( +__s +, +__USE_FORTIFY_LEVEL + - 1, + +47 + `__bos + ( +__s +), +__fmt +, +__� +); + +48 + } +} + +50 #i� +def�ed + +__USE_BSD + || def�ed +__USE_ISOC99 + || def�ed +__USE_UNIX98 + + +52 + $__���tf_chk + (* +__��ri� + +__s +, +size_t + +__n +, +__�ag +, + +53 +size_t + +__�� +, cڡ * +__��ri� + +__f�m� +, + +54 ...� +__THROW +; + +55 + $__v���tf_chk + (* +__��ri� + +__s +, +size_t + +__n +, +__�ag +, + +56 +size_t + +__�� +, cڡ * +__��ri� + +__f�m� +, + +57 +_G_va_li� + +__� +� +__THROW +; + +59 #ifde� +__va_�g_�ck + + +60 +__f�tify_fun�i� + + +61 + `__NTH + ( + $���tf + (* +__��ri� + +__s +, +size_t + +__n +, + +62 cڡ * +__��ri� + +__fmt +, ...)) + +64 + `__bu�t�___���tf_chk + ( +__s +, +__n +, +__USE_FORTIFY_LEVEL + - 1, + +65 + `__bos + ( +__s +), +__fmt +, + `__va_�g_�ck + ()); + +66 + } +} + +67 #�i�! +def�ed + +__�lu�lus + + +68 + #���tf +( +�r +, +�n +, ...) \ + +69 + `__bu�t�___���tf_chk + ( +�r +, +�n +, +__USE_FORTIFY_LEVEL + - 1, + `__bos + (str), \ + +70 +__VA_ARGS__ +) + + ) + +73 +__f�tify_fun�i� + + +74 +__NTH + ( + $v���tf + (* +__��ri� + +__s +, +size_t + +__n +, + +75 cڡ * +__��ri� + +__fmt +, +_G_va_li� + +__� +)) + +77 + `__bu�t�___v���tf_chk + ( +__s +, +__n +, +__USE_FORTIFY_LEVEL + - 1, + +78 + `__bos + ( +__s +), +__fmt +, +__� +); + +79 + } +} + +83 #i� +__USE_FORTIFY_LEVEL + > 1 + +85 +__�r�tf_chk + ( +FILE + * +__��ri� + +__��am +, +__�ag +, + +86 cڡ * +__��ri� + +__f�m� +, ...); + +87 +__��tf_chk + ( +__�ag +, cڡ * +__��ri� + +__f�m� +, ...); + +88 +__v�r�tf_chk + ( +FILE + * +__��ri� + +__��am +, +__�ag +, + +89 cڡ * +__��ri� + +__f�m� +, +_G_va_li� + +__� +); + +90 +__v��tf_chk + ( +__�ag +, cڡ * +__��ri� + +__f�m� +, + +91 +_G_va_li� + +__� +); + +93 #ifde� +__va_�g_�ck + + +94 +__f�tify_fun�i� + + +95 + $�r�tf + ( +FILE + * +__��ri� + +__��am +, cڡ *__��ri� +__fmt +, ...) + +97 + `__�r�tf_chk + ( +__��am +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +98 + `__va_�g_�ck + ()); + +99 + } +} + +101 +__f�tify_fun�i� + + +102 + $��tf + (cڡ * +__��ri� + +__fmt +, ...) + +104 + `__��tf_chk + ( +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + `__va_�g_�ck + ()); + +105 + } +} + +106 #�i�! +def�ed + +__�lu�lus + + +107 + #��tf +(...) \ + +108 + `__��tf_chk + ( +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +109 + #�r�tf +( +��am +, ...) \ + +110 + `__�r�tf_chk + ( +��am +, +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +113 +__f�tify_fun�i� + + +114 + $v��tf + (cڡ * +__��ri� + +__fmt +, +_G_va_li� + +__� +) + +116 #ifde� +__USE_EXTERN_INLINES + + +117 + `__v�r�tf_chk + ( +�dout +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +119 + `__v��tf_chk + ( +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +121 + } +} + +123 +__f�tify_fun�i� + + +124 + $v�r�tf + ( +FILE + * +__��ri� + +__��am +, + +125 cڡ * +__��ri� + +__fmt +, +_G_va_li� + +__� +) + +127 + `__v�r�tf_chk + ( +__��am +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +128 + } +} + +130 #ifde� +__USE_XOPEN2K8 + + +131 + $__d��tf_chk + ( +__fd +, +__�ag +, cڡ * +__��ri� + +__fmt +, + +132 ...� + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 3, 4))); + +133 + $__vd��tf_chk + ( +__fd +, +__�ag +, + +134 cڡ * +__��ri� + +__fmt +, +_G_va_li� + +__�g +) + +135 + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 3, 0))); + +137 #ifde� +__va_�g_�ck + + +138 +__f�tify_fun�i� + + +139 + $d��tf + ( +__fd +, cڡ * +__��ri� + +__fmt +, ...) + +141 + `__d��tf_chk + ( +__fd +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +142 + `__va_�g_�ck + ()); + +143 + } +} + +144 #�i�! +def�ed + +__�lu�lus + + +145 + #d��tf +( +fd +, ...) \ + +146 + `__d��tf_chk + ( +fd +, +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +149 +__f�tify_fun�i� + + +150 + $vd��tf + ( +__fd +, cڡ * +__��ri� + +__fmt +, +_G_va_li� + +__� +) + +152 + `__vd��tf_chk + ( +__fd +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +153 + } +} + +156 #ifde� +__USE_GNU + + +158 + $__a�r�tf_chk + (** +__��ri� + +__�r +, +__�ag +, + +159 cڡ * +__��ri� + +__fmt +, ...) + +160 +__THROW + + `__��ibu�__ + (( + $__f�m�__ + ( +__��tf__ +, 3, 4))� +__wur +; + +161 + $__va�r�tf_chk + (** +__��ri� + +__�r +, +__�ag +, + +162 cڡ * +__��ri� + +__fmt +, +_G_va_li� + +__�g +) + +163 +__THROW + + `__��ibu�__ + (( + $__f�m�__ + ( +__��tf__ +, 3, 0))� +__wur +; + +164 + $__ob�ack_��tf_chk + ( +ob�ack + * +__��ri� + +__ob�ack +, + +165 +__�ag +, cڡ * +__��ri� + +__f�m� +, + +167 +__THROW + + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 3, 4))); + +168 + $__ob�ack_v��tf_chk + ( +ob�ack + * +__��ri� + +__ob�ack +, + +169 +__�ag +, + +170 cڡ * +__��ri� + +__f�m� +, + +171 +_G_va_li� + +__�gs +) + +172 +__THROW + + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 3, 0))); + +174 #ifde� +__va_�g_�ck + + +175 +__f�tify_fun�i� + + +176 + `__NTH + ( + $a�r�tf + (** +__��ri� + +__�r +, cڡ *__��ri� +__fmt +, ...)) + +178 + `__a�r�tf_chk + ( +__�r +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +179 + `__va_�g_�ck + ()); + +180 + } +} + +182 +__f�tify_fun�i� + + +183 +__NTH + ( + $__a�r�tf + (** +__��ri� + +__�r +, cڡ *__��ri� +__fmt +, + +186 + `__a�r�tf_chk + ( +__�r +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +187 + `__va_�g_�ck + ()); + +188 + } +} + +190 +__f�tify_fun�i� + + +191 +__NTH + ( + $ob�ack_��tf + ( +ob�ack + * +__��ri� + +__ob�ack +, + +192 cڡ * +__��ri� + +__fmt +, ...)) + +194 + `__ob�ack_��tf_chk + ( +__ob�ack +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +195 + `__va_�g_�ck + ()); + +196 + } +} + +197 #�i�! +def�ed + +__�lu�lus + + +198 + #a�r�tf +( +�r +, ...) \ + +199 + `__a�r�tf_chk + ( +�r +, +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +200 + #__a�r�tf +( +�r +, ...) \ + +201 + `__a�r�tf_chk + ( +�r +, +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +202 + #ob�ack_��tf +( +ob�ack +, ...) \ + +203 + `__ob�ack_��tf_chk + ( +ob�ack +, +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +206 +__f�tify_fun�i� + + +207 +__NTH + ( + $va�r�tf + (** +__��ri� + +__�r +, cڡ *__��ri� +__fmt +, + +208 +_G_va_li� + +__� +)) + +210 + `__va�r�tf_chk + ( +__�r +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +211 + } +} + +213 +__f�tify_fun�i� + + +214 +__NTH + ( + $ob�ack_v��tf + ( +ob�ack + * +__��ri� + +__ob�ack +, + +215 cڡ * +__��ri� + +__fmt +, +_G_va_li� + +__� +)) + +217 + `__ob�ack_v��tf_chk + ( +__ob�ack +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +218 +__� +); + +219 + } +} + +225 #i�! +def�ed + +__USE_ISOC11 + \ + +226 || ( +def�ed + + g__�lu�lus + && __�lu�lu�<�201103L && !def�ed +__USE_GNU +) + +227 * + $__g�s_chk + (* +__�r +, +size_t +� +__wur +; + +228 * + `__REDIRECT + ( +__g�s_w�n +, (* +__�r +), +g�s +) + +229 +__wur + + `__w�ljr + ("please use fgets or getline instead, gets can't " + +232 +__f�tify_fun�i� + +__wur + * + +233 + $g�s + (* +__�r +) + +235 i�( + `__bos + ( +__�r +�!�( +size_t +) -1) + +236 + `__g�s_chk + ( +__�r +, + `__bos + (__str)); + +237 + `__g�s_w�n + ( +__�r +); + +238 + } +} + +241 * + $__fg�s_chk + (* +__��ri� + +__s +, +size_t + +__size +, +__n +, + +242 +FILE + * +__��ri� + +__��am +� +__wur +; + +243 * + `__REDIRECT + ( +__fg�s_��s +, + +244 (* +__��ri� + +__s +, +__n +, + +245 +FILE + * +__��ri� + +__��am +), +fg�s +� +__wur +; + +246 * + `__REDIRECT + ( +__fg�s_chk_w�n +, + +247 (* +__��ri� + +__s +, +size_t + +__size +, +__n +, + +248 +FILE + * +__��ri� + +__��am +), +__fg�s_chk +) + +249 +__wur + + `__w�ljr + ("fgets called with bigger size�han�ength " + +252 +__f�tify_fun�i� + +__wur + * + +253 + $fg�s + (* +__��ri� + +__s +, +__n +, +FILE + *__��ri� +__��am +) + +255 i�( + `__bos + ( +__s +�!�( +size_t +) -1) + +257 i�(! + `__bu�t�_cڡ�t_p + ( +__n +) || __n <= 0) + +258 + `__fg�s_chk + ( +__s +, + `__bos + (__s), +__n +, +__��am +); + +260 i�(( +size_t +� +__n + > + `__bos + ( +__s +)) + +261 + `__fg�s_chk_w�n + ( +__s +, + `__bos + (__s), +__n +, +__��am +); + +263 + `__fg�s_��s + ( +__s +, +__n +, +__��am +); + +264 + } +} + +266 +size_t + + $__�d_chk + (* +__��ri� + +__�r +, +size_t + +__��� +, + +267 +size_t + +__size +, size_� +__n +, + +268 +FILE + * +__��ri� + +__��am +� +__wur +; + +269 +size_t + + `__REDIRECT + ( +__�d_��s +, + +270 (* +__��ri� + +__�r +, +size_t + +__size +, + +271 +size_t + +__n +, +FILE + * +__��ri� + +__��am +), + +272 +�d +� +__wur +; + +273 +size_t + + `__REDIRECT + ( +__�d_chk_w�n +, + +274 (* +__��ri� + +__�r +, +size_t + +__��� +, + +275 +size_t + +__size +, size_� +__n +, + +276 +FILE + * +__��ri� + +__��am +), + +277 +__�d_chk +) + +278 +__wur + + `__w�ljr + ("fread called with bigger size *�memb�han�ength " + +281 +__f�tify_fun�i� + +__wur + +size_t + + +282 + $�d + (* +__��ri� + +__�r +, +size_t + +__size +, size_� +__n +, + +283 +FILE + * +__��ri� + +__��am +) + +285 i�( + `__bos0 + ( +__�r +�!�( +size_t +) -1) + +287 i�(! + `__bu�t�_cڡ�t_p + ( +__size +) + +288 || ! + `__bu�t�_cڡ�t_p + ( +__n +) + +289 || ( +__size + | +__n +�>�((( +size_t +) 1) << (8 * (size_t) / 2))) + +290 + `__�d_chk + ( +__�r +, + `__bos0 + (__�r), +__size +, +__n +, +__��am +); + +292 i�( +__size + * +__n + > + `__bos0 + ( +__�r +)) + +293 + `__�d_chk_w�n + ( +__�r +, + `__bos0 + (__�r), +__size +, +__n +, +__��am +); + +295 + `__�d_��s + ( +__�r +, +__size +, +__n +, +__��am +); + +296 + } +} + +298 #ifde� +__USE_GNU + + +299 * + $__fg�s_u�ocked_chk + (* +__��ri� + +__s +, +size_t + +__size +, + +300 +__n +, +FILE + * +__��ri� + +__��am +� +__wur +; + +301 * + `__REDIRECT + ( +__fg�s_u�ocked_��s +, + +302 (* +__��ri� + +__s +, +__n +, + +303 +FILE + * +__��ri� + +__��am +), +fg�s_u�ocked +� +__wur +; + +304 * + `__REDIRECT + ( +__fg�s_u�ocked_chk_w�n +, + +305 (* +__��ri� + +__s +, +size_t + +__size +, +__n +, + +306 +FILE + * +__��ri� + +__��am +), +__fg�s_u�ocked_chk +) + +307 +__wur + + `__w�ljr + ("fgets_unlocked called with bigger size�han�ength " + +310 +__f�tify_fun�i� + +__wur + * + +311 + $fg�s_u�ocked + (* +__��ri� + +__s +, +__n +, +FILE + *__��ri� +__��am +) + +313 i�( + `__bos + ( +__s +�!�( +size_t +) -1) + +315 i�(! + `__bu�t�_cڡ�t_p + ( +__n +) || __n <= 0) + +316 + `__fg�s_u�ocked_chk + ( +__s +, + `__bos + (__s), +__n +, +__��am +); + +318 i�(( +size_t +� +__n + > + `__bos + ( +__s +)) + +319 + `__fg�s_u�ocked_chk_w�n + ( +__s +, + `__bos + (__s), +__n +, +__��am +); + +321 + `__fg�s_u�ocked_��s + ( +__s +, +__n +, +__��am +); + +322 + } +} + +325 #ifde� +__USE_MISC + + +326 #unde� +�d_u�ocked + + +327 +size_t + + $__�d_u�ocked_chk + (* +__��ri� + +__�r +, +size_t + +__��� +, + +328 +size_t + +__size +, size_� +__n +, + +329 +FILE + * +__��ri� + +__��am +� +__wur +; + +330 +size_t + + `__REDIRECT + ( +__�d_u�ocked_��s +, + +331 (* +__��ri� + +__�r +, +size_t + +__size +, + +332 +size_t + +__n +, +FILE + * +__��ri� + +__��am +), + +333 +�d_u�ocked +� +__wur +; + +334 +size_t + + `__REDIRECT + ( +__�d_u�ocked_chk_w�n +, + +335 (* +__��ri� + +__�r +, +size_t + +__��� +, + +336 +size_t + +__size +, size_� +__n +, + +337 +FILE + * +__��ri� + +__��am +), + +338 +__�d_u�ocked_chk +) + +339 +__wur + + `__w�ljr + ("fread_unlocked called with bigger size *�memb�han " + +342 +__f�tify_fun�i� + +__wur + +size_t + + +343 + $�d_u�ocked + (* +__��ri� + +__�r +, +size_t + +__size +, size_� +__n +, + +344 +FILE + * +__��ri� + +__��am +) + +346 i�( + `__bos0 + ( +__�r +�!�( +size_t +) -1) + +348 i�(! + `__bu�t�_cڡ�t_p + ( +__size +) + +349 || ! + `__bu�t�_cڡ�t_p + ( +__n +) + +350 || ( +__size + | +__n +�>�((( +size_t +) 1) << (8 * (size_t) / 2))) + +351 + `__�d_u�ocked_chk + ( +__�r +, + `__bos0 + (__�r), +__size +, +__n +, + +352 +__��am +); + +354 i�( +__size + * +__n + > + `__bos0 + ( +__�r +)) + +355 + `__�d_u�ocked_chk_w�n + ( +__�r +, + `__bos0 + (__�r), +__size +, +__n +, + +356 +__��am +); + +359 #ifde� +__USE_EXTERN_INLINES + + +360 i�( + `__bu�t�_cڡ�t_p + ( +__size +) + +361 && + `__bu�t�_cڡ�t_p + ( +__n +) + +362 && ( +__size + | +__n +�< ((( +size_t +) 1) << (8 * (size_t) / 2)) + +363 && +__size + * +__n + <= 8) + +365 +size_t + +__�t + = +__size + * +__n +; + +366 * +__�� + = (*� +__�r +; + +367 i�( +__�t + == 0) + +370 ; +__�t + > 0; --__cnt) + +372 +__c + = + `_IO_g�c_u�ocked + ( +__��am +); + +373 i�( +__c + =� +EOF +) + +375 * +__�� +++ = +__c +; + +377 ( +__�� + - (*� +__�r +�/ +__size +; + +380 + `__�d_u�ocked_��s + ( +__�r +, +__size +, +__n +, +__��am +); + +381 + } +} + + @/usr/include/bits/stdio_lim.h + +18 #i�! +def�ed + +_STDIO_H + && !def�ed +__�ed_FOPEN_MAX + && !def�ed +__�ed_IOV_MAX + + +22 #ifde� +_STDIO_H + + +23 + #L_tm�am + 20 + + ) + +24 + #TMP_MAX + 238328 + + ) + +25 + #FILENAME_MAX + 4096 + + ) + +27 #ifde� +__USE_POSIX + + +28 + #L_��mid + 9 + + ) + +29 #i�! +def�ed + +__USE_XOPEN2K + || def�ed +__USE_GNU + + +30 + #L_cu�rid + 9 + + ) + +35 #i� +def�ed + +__�ed_FOPEN_MAX + || def�ed +_STDIO_H + + +36 #unde� +FOPEN_MAX + + +37 + #FOPEN_MAX + 16 + + ) + +40 #i� +def�ed + +__�ed_IOV_MAX + && !def�ed +IOV_MAX + + +41 + #IOV_MAX + 1024 + + ) + + @/usr/include/bits/stdlib-bsearch.h + +19 +__ex��_�l�e + * + +20 + $b��ch + (cڡ * +__key +, cڡ * +__ba� +, +size_t + +__nmemb +, size_� +__size +, + +21 +__com�r_�_t + +__com�r +) + +23 +size_t + +__l +, +__u +, +__idx +; + +24 cڡ * +__p +; + +25 +__com�ris� +; + +27 +__l + = 0; + +28 +__u + = +__nmemb +; + +29 +__l + < +__u +) + +31 +__idx + = ( +__l + + +__u +) / 2; + +32 +__p + = (*�(((cڡ *� +__ba� +�+ ( +__idx + * +__size +)); + +33 +__com�ris� + = (* +__com�r +�( +__key +, +__p +); + +34 i�( +__com�ris� + < 0) + +35 +__u + = +__idx +; + +36 i�( +__com�ris� + > 0) + +37 +__l + = +__idx + + 1; + +39 (*� +__p +; + +42 +NULL +; + +43 + } +} + + @/usr/include/bits/stdlib-float.h + +19 #i�de� +_STDLIB_H + + +23 #ifde� +__USE_EXTERN_INLINES + + +24 +__BEGIN_NAMESPACE_STD + + +25 +__ex��_�l�e + + +26 +__NTH + ( + $�of + (cڡ * +__Ō +)) + +28 + `��od + ( +__Ō +, (**� +NULL +); + +29 + } +} + +30 + g__END_NAMESPACE_STD + + + @/usr/include/bits/stdlib-ldbl.h + +19 #i�de� +_STDLIB_H + + +23 #ifdef +__USE_ISOC99 + + +24 +__BEGIN_NAMESPACE_C99 + + +25 + $__LDBL_REDIR1_DECL + ( +���d +, +��od +) + +26 +__END_NAMESPACE_C99 + + +29 #ifde� +__USE_GNU + + +30 + $__LDBL_REDIR1_DECL + ( +���d_l +, +��od_l +) + +33 #ifde� +__USE_MISC + + +34 + $__LDBL_REDIR1_DECL + ( +qecvt +, +ecvt +) + +35 + $__LDBL_REDIR1_DECL + ( +qfcvt +, +fcvt +) + +36 + $__LDBL_REDIR1_DECL + ( +qgcvt +, +gcvt +) + +37 + $__LDBL_REDIR1_DECL + ( +qecvt_r +, +ecvt_r +) + +38 + $__LDBL_REDIR1_DECL + ( +qfcvt_r +, +fcvt_r +) + + @/usr/include/bits/stdlib.h + +19 #i�de� +_STDLIB_H + + +23 * + $__���th_chk + (cڡ * +__��ri� + +__�me +, + +24 * +__��ri� + +__�s�ved +, + +25 +size_t + +__�s�ved�n +� +__THROW + +__wur +; + +26 * + `__REDIRECT_NTH + ( +__���th_��s +, + +27 (cڡ * +__��ri� + +__�me +, + +28 * +__��ri� + +__�s�ved +), +���th +� +__wur +; + +29 * + `__REDIRECT_NTH + ( +__���th_chk_w�n +, + +30 (cڡ * +__��ri� + +__�me +, + +31 * +__��ri� + +__�s�ved +, + +32 +size_t + +__�s�ved�n +), +__���th_chk +� +__wur + + +33 + `__w�ljr + ("second�rgument of�ealpath must be�ither NULL or�t " + +36 +__f�tify_fun�i� + +__wur + * + +37 + `__NTH + ( + $���th + (cڡ * +__��ri� + +__�me +, *__��ri� +__�s�ved +)) + +39 i�( + `__bos + ( +__�s�ved +�!�( +size_t +) -1) + +41 #i� +def�ed + +_LIBC_LIMITS_H_ + && def�ed +PATH_MAX + + +42 i�( + `__bos + ( +__�s�ved +�< +PATH_MAX +) + +43 + `__���th_chk_w�n + ( +__�me +, +__�s�ved +, + `__bos + (__resolved)); + +45 + `__���th_chk + ( +__�me +, +__�s�ved +, + `__bos + (__resolved)); + +48 + `__���th_��s + ( +__�me +, +__�s�ved +); + +49 + } +} + +52 + $__��ame_r_chk + ( +__fd +, * +__buf +, +size_t + +__bu� +, + +53 +size_t + +__ėl +� +__THROW + + `__n�nu� + ((2)); + +54 + `__REDIRECT_NTH + ( +__��ame_r_��s +, ( +__fd +, * +__buf +, + +55 +size_t + +__bu� +), +��ame_r +) + +56 + `__n�nu� + ((2)); + +57 + `__REDIRECT_NTH + ( +__��ame_r_chk_w�n +, + +58 ( +__fd +, * +__buf +, +size_t + +__bu� +, + +59 +size_t + +__ėl +), +__��ame_r_chk +) + +60 + `__n�nu� + ((2)� + `__w�ljr + ("ptsname_r called with buflen bigger�han " + +63 +__f�tify_fun�i� + + +64 + `__NTH + ( + $��ame_r + ( +__fd +, * +__buf +, +size_t + +__bu� +)) + +66 i�( + `__bos + ( +__buf +�!�( +size_t +) -1) + +68 i�(! + `__bu�t�_cڡ�t_p + ( +__bu� +)) + +69 + `__��ame_r_chk + ( +__fd +, +__buf +, +__bu� +, + `__bos + (__buf)); + +70 i�( +__bu� + > + `__bos + ( +__buf +)) + +71 + `__��ame_r_chk_w�n + ( +__fd +, +__buf +, +__bu� +, + `__bos + (__buf)); + +73 + `__��ame_r_��s + ( +__fd +, +__buf +, +__bu� +); + +74 + } +} + +77 + $__w�omb_chk + (* +__s +, +wch�_t + +__wch� +, +size_t + +__bu� +) + +78 +__THROW + +__wur +; + +79 + `__REDIRECT_NTH + ( +__w�omb_��s +, (* +__s +, +wch�_t + +__wch� +), + +80 +w�omb +� +__wur +; + +82 +__f�tify_fun�i� + +__wur + + +83 + `__NTH + ( + $w�omb + (* +__s +, +wch�_t + +__wch� +)) + +88 + #__STDLIB_MB_LEN_MAX + 16 + + ) + +89 #i� +def�ed + +MB_LEN_MAX + && MB_LEN_MAX !� +__STDLIB_MB_LEN_MAX + + +92 i�( + `__bos + ( +__s +�!�( +size_t +�-1 && +__STDLIB_MB_LEN_MAX + > __bos (__s)) + +93 + `__w�omb_chk + ( +__s +, +__wch� +, + `__bos + (__s)); + +94 + `__w�omb_��s + ( +__s +, +__wch� +); + +95 + } +} + +98 +size_t + + $__mb�owcs_chk + ( +wch�_t + * +__��ri� + +__d� +, + +99 cڡ * +__��ri� + +__�c +, + +100 +size_t + +__�n +, size_� +__d��n +� +__THROW +; + +101 +size_t + + `__REDIRECT_NTH + ( +__mb�owcs_��s +, + +102 ( +wch�_t + * +__��ri� + +__d� +, + +103 cڡ * +__��ri� + +__�c +, + +104 +size_t + +__�n +), +mb�owcs +); + +105 +size_t + + `__REDIRECT_NTH + ( +__mb�owcs_chk_w�n +, + +106 ( +wch�_t + * +__��ri� + +__d� +, + +107 cڡ * +__��ri� + +__�c +, + +108 +size_t + +__�n +, size_� +__d��n +), +__mb�owcs_chk +) + +109 + `__w�ljr + ("mbstowcs called with dst buffer smaller�han�en " + +112 +__f�tify_fun�i� + +size_t + + +113 + `__NTH + ( + $mb�owcs + ( +wch�_t + * +__��ri� + +__d� +, cڡ *__��ri� +__�c +, + +114 +size_t + +__�n +)) + +116 i�( + `__bos + ( +__d� +�!�( +size_t +) -1) + +118 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +119 + `__mb�owcs_chk + ( +__d� +, +__�c +, +__�n +, + +120 + `__bos + ( +__d� +�/ ( +wch�_t +)); + +122 i�( +__�n + > + `__bos + ( +__d� +�/ ( +wch�_t +)) + +123 + `__mb�owcs_chk_w�n + ( +__d� +, +__�c +, +__�n +, + +124 + `__bos + ( +__d� +�/ ( +wch�_t +)); + +126 + `__mb�owcs_��s + ( +__d� +, +__�c +, +__�n +); + +127 + } +} + +130 +size_t + + $__wc�ombs_chk + (* +__��ri� + +__d� +, + +131 cڡ +wch�_t + * +__��ri� + +__�c +, + +132 +size_t + +__�n +, size_� +__d��n +� +__THROW +; + +133 +size_t + + `__REDIRECT_NTH + ( +__wc�ombs_��s +, + +134 (* +__��ri� + +__d� +, + +135 cڡ +wch�_t + * +__��ri� + +__�c +, + +136 +size_t + +__�n +), +wc�ombs +); + +137 +size_t + + `__REDIRECT_NTH + ( +__wc�ombs_chk_w�n +, + +138 (* +__��ri� + +__d� +, + +139 cڡ +wch�_t + * +__��ri� + +__�c +, + +140 +size_t + +__�n +, size_� +__d��n +), +__wc�ombs_chk +) + +141 + `__w�ljr + ("wcstombs called with dst buffer smaller�han�en"); + +143 +__f�tify_fun�i� + +size_t + + +144 + `__NTH + ( + $wc�ombs + (* +__��ri� + +__d� +, cڡ +wch�_t + *__��ri� +__�c +, + +145 +size_t + +__�n +)) + +147 i�( + `__bos + ( +__d� +�!�( +size_t +) -1) + +149 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +150 + `__wc�ombs_chk + ( +__d� +, +__�c +, +__�n +, + `__bos + (__dst)); + +151 i�( +__�n + > + `__bos + ( +__d� +)) + +152 + `__wc�ombs_chk_w�n + ( +__d� +, +__�c +, +__�n +, + `__bos + (__dst)); + +154 + `__wc�ombs_��s + ( +__d� +, +__�c +, +__�n +); + +155 + } +} + + @/usr/include/bits/string.h + +19 #i�de� +_STRING_H + + +24 + #_STRING_ARCH_u�lig�d + 1 + + ) + +28 #i�! +def�ed + +__x86_64__ + && (def�ed +__i486__ + || def�ed +__��ium__ + \ + +29 || +def�ed + + g__��ium�o__ + || def�ed + g__��ium4__ + \ + +30 || +def�ed + + g__noc�a__ + || def�ed + g__�om__ + \ + +31 || +def�ed + + g__c�e2__ + || def�ed + g__c�ei7__ + \ + +32 || +def�ed + + g__k6__ + || def�ed + g__geode__ + \ + +33 || +def�ed + + g__k8__ + || def�ed + g__�hl�__ + \ + +34 || +def�ed + + g__amd�m10__ +) + +38 #i�! +def�ed + +__NO_STRING_INLINES + && def�ed +__USE_STRING_INLINES + \ + +39 && +def�ed + + g__GNUC__ + && __GNUC__ >= 2 + +41 #i�de� +__STRING_INLINE + + +42 #i�de� +__ex��_�l�e + + +43 + #__STRING_INLINE + +�l�e + + + ) + +45 + #__STRING_INLINE + +__ex��_�l�e + + + ) + +50 + #__STRING_SMALL_GET16 +( +�c +, +idx +) \ + +51 ((((cڡ *�( +�c +))[ +idx + + 1] << 8) \ + +52 | ((cڡ *�( +�c +))[ +idx +]) + + ) + +53 + #__STRING_SMALL_GET32 +( +�c +, +idx +) \ + +54 (((((cڡ *�( +�c +))[ +idx + + 3] << 8 \ + +55 | ((cڡ *�( +�c +))[ +idx + + 2]) << 8 \ + +56 | ((cڡ *�( +�c +))[ +idx + + 1]) << 8 \ + +57 | ((cڡ *�( +�c +))[ +idx +]) + + ) + +61 + #_HAVE_STRING_ARCH_mem�y + 1 + + ) + +62 + #mem�y +( +de� +, +�c +, +n +) \ + +63 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +n +) \ + +64 ? + `__mem�y_c + (( +de� +), ( +�c +), ( +n +)) \ + +65 : + `__mem�y_g + (( +de� +), ( +�c +), ( +n +)))) + + ) + +66 + #__mem�y_c +( +de� +, +�c +, +n +) \ + +67 (( +n +) == 0 \ + +68 ? ( +de� +) \ + +69 : ((( +n +) % 4 == 0) \ + +70 ? + `__mem�y_by4 + ( +de� +, +�c +, +n +) \ + +71 : ((( +n +) % 2 == 0) \ + +72 ? + `__mem�y_by2 + ( +de� +, +�c +, +n +) \ + +73 : + `__mem�y_g + ( +de� +, +�c +, +n +)))) + + ) + +75 +__STRING_INLINE + * +__mem�y_by4 + (* +__de� +, cڡ * +__�c +, + +76 +size_t + +__n +); + +78 +__STRING_INLINE + * + +79 + $__mem�y_by4 + (* +__de� +, cڡ * +__�c +, +size_t + +__n +) + +81 +__d0 +, +__d1 +; + +82 * +__tmp + = +__de� +; + +83 +__asm__ + +__vީ�e__ + + +91 : "=&r" ( +__d0 +), "=&r" ( +__tmp +), "=&r" ( +__�c +), "=&r" ( +__d1 +) + +92 : "1" ( +__tmp +), "2" ( +__�c +), "3" ( +__n + / 4) + +94 +__de� +; + +95 + } +} + +97 +__STRING_INLINE + * +__mem�y_by2 + (* +__de� +, cڡ * +__�c +, + +98 +size_t + +__n +); + +100 +__STRING_INLINE + * + +101 + $__mem�y_by2 + (* +__de� +, cڡ * +__�c +, +size_t + +__n +) + +103 +__d0 +, +__d1 +; + +104 * +__tmp + = +__de� +; + +105 +__asm__ + +__vީ�e__ + + +118 : "=&q" ( +__d0 +), "=&r" ( +__tmp +), "=&r" ( +__�c +), "=&r" ( +__d1 +) + +119 : "1" ( +__tmp +), "2" ( +__�c +), "3" ( +__n + / 2) + +121 +__de� +; + +122 + } +} + +124 +__STRING_INLINE + * +__mem�y_g + (* +__de� +, cڡ * +__�c +, +size_t + +__n +); + +126 +__STRING_INLINE + * + +127 + $__mem�y_g + (* +__de� +, cڡ * +__�c +, +size_t + +__n +) + +129 +__d0 +, +__d1 +, +__d2 +; + +130 * +__tmp + = +__de� +; + +131 +__asm__ + +__vީ�e__ + + +142 : "=&c" ( +__d0 +), "=&D" ( +__d1 +), "=&S" ( +__d2 +), + +143 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__de� +) + +144 : "0" ( +__n +), "1" ( +__tmp +), "2" ( +__�c +), + +145 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__�c +) + +147 +__de� +; + +148 + } +} + +150 + #_HAVE_STRING_ARCH_memmove + 1 + + ) + +151 #i�de� +_FORCE_INLINES + + +154 + #memmove +( +de� +, +�c +, +n +� + `__memmove_g + (de�, src,�) + + ) + +156 +__STRING_INLINE + * + $__memmove_g + (*, cڡ *, +size_t +) + +157 + `__asm__ + ("memmove"); + +159 +__STRING_INLINE + * + +160 + $__memmove_g + (* +__de� +, cڡ * +__�c +, +size_t + +__n +) + +162 +__d0 +, +__d1 +, +__d2 +; + +163 * +__tmp + = +__de� +; + +164 i�( +__de� + < +__�c +) + +165 +__asm__ + +__vީ�e__ + + +168 : "=&c" ( +__d0 +), "=&S" ( +__d1 +), "=&D" ( +__d2 +), + +169 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__de� +) + +170 : "0" ( +__n +), "1" ( +__�c +), "2" ( +__tmp +), + +171 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__�c +)); + +173 +__asm__ + +__vީ�e__ + + +177 : "=&c" ( +__d0 +), "=&S" ( +__d1 +), "=&D" ( +__d2 +), + +178 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__de� +) + +179 : "0" ( +__n +), "1" (__�- 1 + (cڡ *� +__�c +), + +180 "2" ( +__n + - 1 + (*� +__tmp +), + +181 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__�c +)); + +182 +__de� +; + +183 + } +} + +187 + #_HAVE_STRING_ARCH_memcmp + 1 + + ) + +188 #i�de� +_FORCE_INLINES + + +189 #i�de� +__PIC__ + + +191 +__STRING_INLINE + + +192 + $memcmp + (cڡ * +__s1 +, cڡ * +__s2 +, +size_t + +__n +) + +194 +__d0 +, +__d1 +, +__d2 +; + +195 +__�s +; + +196 +__asm__ + +__vީ�e__ + + +204 : "=&a" ( +__�s +), "=&S" ( +__d0 +), "=&D" ( +__d1 +), "=&c" ( +__d2 +) + +205 : "0" (0), "1" ( +__s1 +), "2" ( +__s2 +), "3" ( +__n +), + +206 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s1 +), + +207 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s2 +) + +209 +__�s +; + +210 + } +} + +215 + #_HAVE_STRING_ARCH_mem�t + 1 + + ) + +216 + #_USE_STRING_ARCH_mem�t + 1 + + ) + +217 + #mem�t +( +s +, +c +, +n +) \ + +218 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +n +) && (n) <= 16 \ + +219 ? (( +n +) == 1 \ + +220 ? + `__mem�t_c1 + (( +s +), ( +c +)) \ + +221 : + `__mem�t_gc + (( +s +), ( +c +), ( +n +))) \ + +222 : ( + `__bu�t�_cڡ�t_p + ( +c +) \ + +223 ? ( + `__bu�t�_cڡ�t_p + ( +n +) \ + +224 ? + `__mem�t_c� + (( +s +), ( +c +), ( +n +)) \ + +225 : + `mem�t + (( +s +), ( +c +), ( +n +))) \ + +226 : ( + `__bu�t�_cڡ�t_p + ( +n +) \ + +227 ? + `__mem�t_g� + (( +s +), ( +c +), ( +n +)) \ + +228 : + `mem�t + (( +s +), ( +c +), ( +n +)))))) + + ) + +230 + #__mem�t_c1 +( +s +, +c +�({ * +__s + = (s); \ + +231 *((*� +__s +��(�( +c +); \ + +232 +__s +; }) + + ) + +234 + #__mem�t_gc +( +s +, +c +, +n +) \ + +235 ({ * +__s + = ( +s +); \ + +237 +__ui +; \ + +238 +__usi +; \ + +239 +__uc +; \ + +240 } * +__u + = +__s +; \ + +241 +__c + = ((�((�( +c +))) * 0x01010101; \ + +247 i�(( +n +) == 3 || (n) >= 5) \ + +248 +__asm__ + + `__vީ�e__ + ("" : "�" ( +__c +) : "0" (__c)); \ + +251 +n +) \ + +254 +__u +-> +__ui + = +__c +; \ + +255 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +257 +__u +-> +__ui + = +__c +; \ + +258 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +260 +__u +-> +__ui + = +__c +; \ + +261 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +263 +__u +-> +__usi + = (� +__c +; \ + +264 +__u + = + `__ex�nsi�__ + ((*) __u + 2); \ + +265 +__u +-> +__uc + = (� +__c +; \ + +269 +__u +-> +__ui + = +__c +; \ + +270 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +272 +__u +-> +__ui + = +__c +; \ + +273 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +275 +__u +-> +__ui + = +__c +; \ + +276 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +278 +__u +-> +__usi + = (� +__c +; \ + +282 +__u +-> +__ui + = +__c +; \ + +283 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +285 +__u +-> +__ui + = +__c +; \ + +286 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +288 +__u +-> +__ui + = +__c +; \ + +289 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +291 +__u +-> +__uc + = (� +__c +; \ + +295 +__u +-> +__ui + = +__c +; \ + +296 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +298 +__u +-> +__ui + = +__c +; \ + +299 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +301 +__u +-> +__ui + = +__c +; \ + +302 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +304 +__u +-> +__ui + = +__c +; \ + +309 +__s +; }) + + ) + +311 + #__mem�t_c� +( +s +, +c +, +n +) \ + +312 ((( +n +) % 4 == 0) \ + +313 ? + `__mem�t_c�_by4 + ( +s +, ((�((�( +c +))) * 0x01010101,\ + +314 +n +) \ + +315 : ((( +n +) % 2 == 0) \ + +316 ? + `__mem�t_c�_by2 + ( +s +, \ + +317 ((�((�( +c +))) * 0x01010101,\ + +318 +n +) \ + +319 : + `mem�t + ( +s +, +c +, +n +))) + + ) + +321 +__STRING_INLINE + * +__mem�t_c�_by4 + (* +__s +, +__c +, + +322 +size_t + +__n +); + +324 +__STRING_INLINE + * + +325 + $__mem�t_c�_by4 + (* +__s +, +__c +, +size_t + +__n +) + +327 * +__tmp + = +__s +; + +328 +__d0 +; + +329 #ifde� +__i686__ + + +330 +__asm__ + +__vީ�e__ + + +333 : "=&a" ( +__c +), "=&D" ( +__tmp +), "=&c" ( +__d0 +), + +334 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s +) + +335 : "0" ((� +__c +), "1" ( +__tmp +), "2" ( +__n + / 4) + +338 +__asm__ + +__vީ�e__ + + +344 : "=&r" ( +__c +), "=&r" ( +__tmp +), "=&r" ( +__d0 +), + +345 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s +) + +346 : "0" ((� +__c +), "1" ( +__tmp +), "2" ( +__n + / 4) + +349 +__s +; + +350 + } +} + +352 +__STRING_INLINE + * +__mem�t_c�_by2 + (* +__s +, +__c +, + +353 +size_t + +__n +); + +355 +__STRING_INLINE + * + +356 + $__mem�t_c�_by2 + (* +__s +, +__c +, +size_t + +__n +) + +358 +__d0 +, +__d1 +; + +359 * +__tmp + = +__s +; + +360 #ifde� +__i686__ + + +361 +__asm__ + +__vީ�e__ + + +365 : "=&a" ( +__d0 +), "=&D" ( +__tmp +), "=&c" ( +__d1 +), + +366 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s +) + +367 : "0" ((� +__c +), "1" ( +__tmp +), "2" ( +__n + / 4) + +370 +__asm__ + +__vީ�e__ + + +376 : "=&q" ( +__d0 +), "=&r" ( +__tmp +), "=&r" ( +__d1 +), + +377 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s +) + +378 : "0" ((� +__c +), "1" ( +__tmp +), "2" ( +__n + / 4) + +381 +__s +; + +382 + } +} + +384 + #__mem�t_g� +( +s +, +c +, +n +) \ + +385 ((( +n +) % 4 == 0) \ + +386 ? + `__mem�t_g�_by4 + ( +s +, +c +, +n +) \ + +387 : ((( +n +) % 2 == 0) \ + +388 ? + `__mem�t_g�_by2 + ( +s +, +c +, +n +) \ + +389 : + `mem�t + ( +s +, +c +, +n +))) + + ) + +391 +__STRING_INLINE + * +__mem�t_g�_by4 + (* +__s +, +__c +, +size_t + +__n +); + +393 +__STRING_INLINE + * + +394 + $__mem�t_g�_by4 + (* +__s +, +__c +, +size_t + +__n +) + +396 * +__tmp + = +__s +; + +397 +__d0 +; + +398 +__asm__ + +__vީ�e__ + + +408 : "=&q" ( +__c +), "=&r" ( +__tmp +), "=&r" ( +__d0 +), + +409 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s +) + +410 : "0" ((� +__c +), "1" ( +__tmp +), "2" ( +__n + / 4) + +412 +__s +; + +413 + } +} + +415 +__STRING_INLINE + * +__mem�t_g�_by2 + (* +__s +, +__c +, +size_t + +__n +); + +417 +__STRING_INLINE + * + +418 + $__mem�t_g�_by2 + (* +__s +, +__c +, +size_t + +__n +) + +420 +__d0 +, +__d1 +; + +421 * +__tmp + = +__s +; + +422 +__asm__ + +__vީ�e__ + + +433 : "=&q" ( +__d0 +), "=&r" ( +__tmp +), "=&r" ( +__d1 +), + +434 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s +) + +435 : "0" ((� +__c +), "1" ( +__tmp +), "2" ( +__n + / 4) + +437 +__s +; + +438 + } +} + +442 + #_HAVE_STRING_ARCH_memchr + 1 + + ) + +443 #i�de� +_FORCE_INLINES + + +444 +__STRING_INLINE + * + +445 + $memchr + (cڡ * +__s +, +__c +, +size_t + +__n +) + +447 +__d0 +; + +448 #ifde� +__i686__ + + +449 +__d1 +; + +451 * +__�s +; + +452 i�( +__n + == 0) + +453 +NULL +; + +454 #ifde� +__i686__ + + +455 +__asm__ + +__vީ�e__ + + +459 : "=D" ( +__�s +), "=&c" ( +__d0 +), "=&r" ( +__d1 +) + +460 : "a" ( +__c +), "0" ( +__s +), "1" ( +__n +), "2" (1), + +461 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s +) + +464 +__asm__ + +__vީ�e__ + + +470 : "=D" ( +__�s +), "=&c" ( +__d0 +) + +471 : "a" ( +__c +), "0" ( +__s +), "1" ( +__n +), + +472 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s +) + +475 +__�s + - 1; + +476 + } +} + +479 + #_HAVE_STRING_ARCH_memrchr + 1 + + ) + +480 #i�de� +_FORCE_INLINES + + +481 +__STRING_INLINE + * +__memrchr + (cڡ * +__s +, +__c +, +size_t + +__n +); + +483 +__STRING_INLINE + * + +484 + $__memrchr + (cڡ * +__s +, +__c +, +size_t + +__n +) + +486 +__d0 +; + +487 #ifde� +__i686__ + + +488 +__d1 +; + +490 * +__�s +; + +491 i�( +__n + == 0) + +492 +NULL +; + +493 #ifde� +__i686__ + + +494 +__asm__ + +__vީ�e__ + + +500 : "=D" ( +__�s +), "=&c" ( +__d0 +), "=&r" ( +__d1 +) + +501 : "a" ( +__c +), "0" ( +__s + + +__n + - 1), "1" (__n), "2" (-1), + +502 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s +) + +505 +__asm__ + +__vީ�e__ + + +512 : "=D" ( +__�s +), "=&c" ( +__d0 +) + +513 : "a" ( +__c +), "0" ( +__s + + +__n + - 1), "1" (__n), + +514 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s +) + +517 +__�s +; + +518 + } +} + +519 #ifde� +__USE_GNU + + +520 + #memrchr +( +s +, +c +, +n +� + `__memrchr + ((s), (c), (n)) + + ) + +525 + #_HAVE_STRING_ARCH_�wmemchr + 1 + + ) + +526 +__STRING_INLINE + * +__�wmemchr + (cڡ * +__s +, +__c +); + +528 #i�de� +_FORCE_INLINES + + +529 +__STRING_INLINE + * + +530 + $__�wmemchr + (cڡ * +__s +, +__c +) + +532 +__d0 +; + +533 * +__�s +; + +534 +__asm__ + +__vީ�e__ + + +537 : "=D" ( +__�s +), "=&c" ( +__d0 +) + +538 : "a" ( +__c +), "0" ( +__s +), "1" (0xffffffff), + +539 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s +) + +541 +__�s + - 1; + +542 + } +} + +543 #ifde� +__USE_GNU + + +544 +__STRING_INLINE + * + +545 + $�wmemchr + (cڡ * +__s +, +__c +) + +547 + `__�wmemchr + ( +__s +, +__c +); + +548 + } +} + +554 + #_HAVE_STRING_ARCH_��� + 1 + + ) + +555 + #��� +( +�r +) \ + +556 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�r +) \ + +557 ? + `__bu�t�_��� + ( +�r +) \ + +558 : + `__���_g + ( +�r +))) + + ) + +559 +__STRING_INLINE + +size_t + +__���_g + (cڡ * +__�r +); + +561 +__STRING_INLINE + +size_t + + +562 + $__���_g + (cڡ * +__�r +) + +564 +__dummy +; + +565 cڡ * +__tmp + = +__�r +; + +566 +__asm__ + +__vީ�e__ + + +572 : "�" ( +__tmp +), "=&q" ( +__dummy +) + +573 : "0" ( +__�r +), + +574 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__�r +) + +576 +__tmp + - +__�r + - 1; + +577 + } +} + +581 + #_HAVE_STRING_ARCH_�r�y + 1 + + ) + +582 + #�r�y +( +de� +, +�c +) \ + +583 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +) \ + +584 ? ( (( +�c +)[0]�=�1 && + `��� + (src) + 1 <= 8 \ + +585 ? + `__�r�y_a_sm�l + (( +de� +), ( +�c +), + `��� + (src) + 1) \ + +586 : (*� + `mem�y + ((*�( +de� +), \ + +587 (cڡ *�( +�c +), \ + +588 + `��� + ( +�c +) + 1)) \ + +589 : + `__�r�y_g + (( +de� +), ( +�c +)))) + + ) + +591 + #__�r�y_a_sm�l +( +de� +, +�c +, +��� +) \ + +592 ( + `__ex�nsi�__ + ({ * +__de� + = ( +de� +); \ + +594 +__ui +; \ + +595 +__usi +; \ + +596 +__uc +; \ + +597 +__c +; \ + +598 } * +__u + = (*� +__de� +; \ + +599 +��� +) \ + +602 +__u +-> +__uc + = '\0'; \ + +605 +__u +-> +__usi + = + `__STRING_SMALL_GET16 + ( +�c +, 0); \ + +608 +__u +-> +__usi + = + `__STRING_SMALL_GET16 + ( +�c +, 0); \ + +609 +__u + = + `__ex�nsi�__ + ((*) __u + 2); \ + +610 +__u +-> +__uc + = '\0'; \ + +613 +__u +-> +__ui + = + `__STRING_SMALL_GET32 + ( +�c +, 0); \ + +616 +__u +-> +__ui + = + `__STRING_SMALL_GET32 + ( +�c +, 0); \ + +617 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +618 +__u +-> +__uc + = '\0'; \ + +621 +__u +-> +__ui + = + `__STRING_SMALL_GET32 + ( +�c +, 0); \ + +622 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +623 +__u +-> +__usi + = + `__STRING_SMALL_GET16 + ( +�c +, 4); \ + +626 +__u +-> +__ui + = + `__STRING_SMALL_GET32 + ( +�c +, 0); \ + +627 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +628 +__u +-> +__usi + = + `__STRING_SMALL_GET16 + ( +�c +, 4); \ + +629 +__u + = + `__ex�nsi�__ + ((*) __u + 2); \ + +630 +__u +-> +__uc + = '\0'; \ + +633 +__u +-> +__ui + = + `__STRING_SMALL_GET32 + ( +�c +, 0); \ + +634 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +635 +__u +-> +__ui + = + `__STRING_SMALL_GET32 + ( +�c +, 4); \ + +638 (*� +__de� +; })) + + ) + +640 +__STRING_INLINE + * +__�r�y_g + (* +__de� +, cڡ * +__�c +); + +642 +__STRING_INLINE + * + +643 + $__�r�y_g + (* +__de� +, cڡ * +__�c +) + +645 * +__tmp + = +__de� +; + +646 +__dummy +; + +647 +__asm__ + +__vީ�e__ + + +656 : "=&r" ( +__�c +), "=&r" ( +__tmp +), "=&q" ( +__dummy +), + +657 "=m" ( *(�ru� { +__x +[0xfffffff]; } *) +__de� +) + +658 : "0" ( +__�c +), "1" ( +__tmp +), + +659 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__�c +) + +661 +__de� +; + +662 + } +} + +665 #ifde� +__USE_GNU + + +666 + #_HAVE_STRING_ARCH_�p�y + 1 + + ) + +668 + #__�p�y +( +de� +, +�c +) \ + +669 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +) \ + +670 ? ( + `��� + ( +�c +) + 1 <= 8 \ + +671 ? + `__�p�y_a_sm�l + (( +de� +), ( +�c +), + `��� + (src) + 1) \ + +672 : + `__�p�y_c + (( +de� +), ( +�c +), + `��� + (src) + 1)) \ + +673 : + `__�p�y_g + (( +de� +), ( +�c +)))) + + ) + +674 + #__�p�y_c +( +de� +, +�c +, +��� +) \ + +675 (( +��� +) % 4 == 0 \ + +676 ? + `__memp�y_by4 + ( +de� +, +�c +, +��� +) - 1 \ + +677 : (( +��� +) % 2 == 0 \ + +678 ? + `__memp�y_by2 + ( +de� +, +�c +, +��� +) - 1 \ + +679 : + `__memp�y_byn + ( +de� +, +�c +, +��� +�- 1)) + + ) + +682 + #�p�y +( +de� +, +�c +� + `__�p�y + ((de�), (�c)) + + ) + +684 + #__�p�y_a_sm�l +( +de� +, +�c +, +��� +) \ + +685 ( + `__ex�nsi�__ + ({ union { \ + +686 +__ui +; \ + +687 +__usi +; \ + +688 +__uc +; \ + +689 +__c +; \ + +690 } * +__u + = (*�( +de� +); \ + +691 +��� +) \ + +694 +__u +-> +__uc + = '\0'; \ + +697 +__u +-> +__usi + = + `__STRING_SMALL_GET16 + ( +�c +, 0); \ + +698 +__u + = + `__ex�nsi�__ + ((*) __u + 1); \ + +701 +__u +-> +__usi + = + `__STRING_SMALL_GET16 + ( +�c +, 0); \ + +702 +__u + = + `__ex�nsi�__ + ((*) __u + 2); \ + +703 +__u +-> +__uc + = '\0'; \ + +706 +__u +-> +__ui + = + `__STRING_SMALL_GET32 + ( +�c +, 0); \ + +707 +__u + = + `__ex�nsi�__ + ((*) __u + 3); \ + +710 +__u +-> +__ui + = + `__STRING_SMALL_GET32 + ( +�c +, 0); \ + +711 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +712 +__u +-> +__uc + = '\0'; \ + +715 +__u +-> +__ui + = + `__STRING_SMALL_GET32 + ( +�c +, 0); \ + +716 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +717 +__u +-> +__usi + = + `__STRING_SMALL_GET16 + ( +�c +, 4); \ + +718 +__u + = + `__ex�nsi�__ + ((*) __u + 1); \ + +721 +__u +-> +__ui + = + `__STRING_SMALL_GET32 + ( +�c +, 0); \ + +722 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +723 +__u +-> +__usi + = + `__STRING_SMALL_GET16 + ( +�c +, 4); \ + +724 +__u + = + `__ex�nsi�__ + ((*) __u + 2); \ + +725 +__u +-> +__uc + = '\0'; \ + +728 +__u +-> +__ui + = + `__STRING_SMALL_GET32 + ( +�c +, 0); \ + +729 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +730 +__u +-> +__ui + = + `__STRING_SMALL_GET32 + ( +�c +, 4); \ + +731 +__u + = + `__ex�nsi�__ + ((*) __u + 3); \ + +734 (*� +__u +; })) + + ) + +736 +__STRING_INLINE + * +__memp�y_by4 + (* +__de� +, cڡ * +__�c +, + +737 +size_t + +__��� +); + +739 +__STRING_INLINE + * + +740 + $__memp�y_by4 + (* +__de� +, cڡ * +__�c +, +size_t + +__��� +) + +742 * +__tmp + = +__de� +; + +743 +__d0 +, +__d1 +; + +744 +__asm__ + +__vީ�e__ + + +752 : "=&r" ( +__d0 +), "�" ( +__tmp +), "=&r" ( +__�c +), "=&r" ( +__d1 +) + +753 : "1" ( +__tmp +), "2" ( +__�c +), "3" ( +__��� + / 4) + +755 +__tmp +; + +756 + } +} + +758 +__STRING_INLINE + * +__memp�y_by2 + (* +__de� +, cڡ * +__�c +, + +759 +size_t + +__��� +); + +761 +__STRING_INLINE + * + +762 + $__memp�y_by2 + (* +__de� +, cڡ * +__�c +, +size_t + +__��� +) + +764 * +__tmp + = +__de� +; + +765 +__d0 +, +__d1 +; + +766 +__asm__ + +__vީ�e__ + + +779 : "=&q" ( +__d0 +), "�" ( +__tmp +), "=&r" ( +__�c +), "=&r" ( +__d1 +), + +780 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__��� +]; } *) +__de� +) + +781 : "1" ( +__tmp +), "2" ( +__�c +), "3" ( +__��� + / 2), + +782 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__��� +]; } *) +__�c +) + +784 +__tmp + + 2; + +785 + } +} + +787 +__STRING_INLINE + * +__memp�y_byn + (* +__de� +, cڡ * +__�c +, + +788 +size_t + +__��� +); + +790 +__STRING_INLINE + * + +791 + $__memp�y_byn + (* +__de� +, cڡ * +__�c +, +size_t + +__��� +) + +793 +__d0 +, +__d1 +; + +794 * +__tmp + = +__de� +; + +795 +__asm__ + +__vީ�e__ + + +806 : "=D" ( +__tmp +), "=&c" ( +__d0 +), "=&S" ( +__d1 +), + +807 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__��� +]; } *) +__de� +) + +808 : "0" ( +__tmp +), "1" ( +__��� +), "2" ( +__�c +), + +809 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__��� +]; } *) +__�c +) + +811 +__tmp +; + +812 + } +} + +814 +__STRING_INLINE + * +__�p�y_g + (* +__de� +, cڡ * +__�c +); + +816 +__STRING_INLINE + * + +817 + $__�p�y_g + (* +__de� +, cڡ * +__�c +) + +819 * +__tmp + = +__de� +; + +820 +__dummy +; + +821 +__asm__ + +__vީ�e__ + + +830 : "=&r" ( +__�c +), "�" ( +__tmp +), "=&q" ( +__dummy +), + +831 "=m" ( *(�ru� { +__x +[0xfffffff]; } *) +__de� +) + +832 : "0" ( +__�c +), "1" ( +__tmp +), + +833 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__�c +) + +835 +__tmp + - 1; + +836 + } +} + +841 + #_HAVE_STRING_ARCH_���y + 1 + + ) + +842 + #���y +( +de� +, +�c +, +n +) \ + +843 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +) \ + +844 ? (( + `��� + ( +�c +�+ 1 >�(( +size_t +�( +n +)) \ + +845 ? (*� + `mem�y + ((*�( +de� +), \ + +846 (cڡ *�( +�c +), +n +) \ + +847 : + `__���y_cg + (( +de� +), ( +�c +), + `��� + (�c�+ 1, +n +))) \ + +848 : + `__���y_gg + (( +de� +), ( +�c +), +n +))) + + ) + +849 + #__���y_cg +( +de� +, +�c +, +��� +, +n +) \ + +850 ((( +��� +) % 4 == 0) \ + +851 ? + `__���y_by4 + ( +de� +, +�c +, +��� +, +n +) \ + +852 : ((( +��� +) % 2 == 0) \ + +853 ? + `__���y_by2 + ( +de� +, +�c +, +��� +, +n +) \ + +854 : + `__���y_byn + ( +de� +, +�c +, +��� +, +n +))) + + ) + +856 +__STRING_INLINE + * +__���y_by4 + (* +__de� +, cڡ +__�c +[], + +857 +size_t + +__��� +, size_� +__n +); + +859 +__STRING_INLINE + * + +860 + $__���y_by4 + (* +__de� +, cڡ +__�c +[], +size_t + +__��� +, size_� +__n +) + +862 * +__tmp + = +__de� +; + +863 +__dummy1 +, +__dummy2 +; + +864 +__asm__ + +__vީ�e__ + + +872 : "=&r" ( +__dummy1 +), "�" ( +__tmp +), "=&r" ( +__�c +), "=&r" ( +__dummy2 +), + +873 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__��� +]; } *) +__de� +) + +874 : "1" ( +__tmp +), "2" ( +__�c +), "3" ( +__��� + / 4), + +875 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__��� +]; } *) +__�c +) + +877 (� + `mem�t + ( +__tmp +, '\0', +__n + - +__��� +); + +878 +__de� +; + +879 + } +} + +881 +__STRING_INLINE + * +__���y_by2 + (* +__de� +, cڡ +__�c +[], + +882 +size_t + +__��� +, size_� +__n +); + +884 +__STRING_INLINE + * + +885 + $__���y_by2 + (* +__de� +, cڡ +__�c +[], +size_t + +__��� +, size_� +__n +) + +887 * +__tmp + = +__de� +; + +888 +__dummy1 +, +__dummy2 +; + +889 +__asm__ + +__vީ�e__ + + +902 : "=&q" ( +__dummy1 +), "�" ( +__tmp +), "=&r" ( +__�c +), "=&r" ( +__dummy2 +), + +903 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__��� +]; } *) +__de� +) + +904 : "1" ( +__tmp +), "2" ( +__�c +), "3" ( +__��� + / 2), + +905 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__��� +]; } *) +__�c +) + +907 (� + `mem�t + ( +__tmp + + 2, '\0', +__n + - +__��� +); + +908 +__de� +; + +909 + } +} + +911 +__STRING_INLINE + * +__���y_byn + (* +__de� +, cڡ +__�c +[], + +912 +size_t + +__��� +, size_� +__n +); + +914 +__STRING_INLINE + * + +915 + $__���y_byn + (* +__de� +, cڡ +__�c +[], +size_t + +__��� +, size_� +__n +) + +917 +__d0 +, +__d1 +; + +918 * +__tmp + = +__de� +; + +919 +__asm__ + +__vީ�e__ + + +930 : "=D" ( +__tmp +), "=&c" ( +__d0 +), "=&S" ( +__d1 +), + +931 "=m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__��� +]; } *) +__de� +) + +932 : "1" ( +__��� +), "0" ( +__tmp +),"2" ( +__�c +), + +933 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__��� +]; } *) +__�c +) + +935 (� + `mem�t + ( +__tmp +, '\0', +__n + - +__��� +); + +936 +__de� +; + +937 + } +} + +939 +__STRING_INLINE + * +__���y_gg + (* +__de� +, cڡ * +__�c +, + +940 +size_t + +__n +); + +942 +__STRING_INLINE + * + +943 + $__���y_gg + (* +__de� +, cڡ * +__�c +, +size_t + +__n +) + +945 * +__tmp + = +__de� +; + +946 +__dummy +; + +947 i�( +__n + > 0) + +948 +__asm__ + +__vީ�e__ + + +964 : "=&r" ( +__�c +), "=&r" ( +__tmp +), "=&q" ( +__dummy +), "=&r" ( +__n +) + +965 : "0" ( +__�c +), "1" ( +__tmp +), "3" ( +__n +) + +968 +__de� +; + +969 + } +} + +973 + #_HAVE_STRING_ARCH_�r�t + 1 + + ) + +974 + #�r�t +( +de� +, +�c +) \ + +975 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +) \ + +976 ? + `__�r�t_c + (( +de� +), ( +�c +), + `��� + (src) + 1) \ + +977 : + `__�r�t_g + (( +de� +), ( +�c +)))) + + ) + +979 +__STRING_INLINE + * +__�r�t_c + (* +__de� +, cڡ +__�c +[], + +980 +size_t + +__��� +); + +982 +__STRING_INLINE + * + +983 + $__�r�t_c + (* +__de� +, cڡ +__�c +[], +size_t + +__��� +) + +985 #ifde� +__i686__ + + +986 +__d0 +; + +987 * +__tmp +; + +988 +__asm__ + +__vީ�e__ + + +990 : "=D" ( +__tmp +), "=&c" ( +__d0 +), + +991 "=m" ( *(�ru� { +__x +[0xfffffff]; } *) +__de� +) + +992 : "0" ( +__de� +), "1" (0xffffffff), "a" (0), + +993 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__��� +]; } *) +__�c +) + +995 -- +__tmp +; + +997 * +__tmp + = +__de� + - 1; + +998 +__asm__ + +__vީ�e__ + + +1003 : "�" ( +__tmp +), + +1004 "=m" ( *(�ru� { +__x +[0xfffffff]; } *) +__de� +) + +1005 : "0" ( +__tmp +), + +1006 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__��� +]; } *) +__�c +) + +1009 (� + `mem�y + ( +__tmp +, +__�c +, +__��� +); + +1010 +__de� +; + +1011 + } +} + +1013 +__STRING_INLINE + * +__�r�t_g + (* +__de� +, cڡ * +__�c +); + +1015 +__STRING_INLINE + * + +1016 + $__�r�t_g + (* +__de� +, cڡ * +__�c +) + +1018 * +__tmp + = +__de� + - 1; + +1019 +__dummy +; + +1020 +__asm__ + +__vީ�e__ + + +1032 : "=&q" ( +__dummy +), "=&r" ( +__tmp +), "=&r" ( +__�c +), + +1033 "=m" ( *(�ru� { +__x +[0xfffffff]; } *) +__de� +) + +1034 : "1" ( +__tmp +), "2" ( +__�c +), + +1035 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__�c +) + +1037 +__de� +; + +1038 + } +} + +1042 + #_HAVE_STRING_ARCH_���t + 1 + + ) + +1043 + #���t +( +de� +, +�c +, +n +) \ + +1044 ( + `__ex�nsi�__ + ({ * +__de� + = ( +de� +); \ + +1045 + `__bu�t�_cڡ�t_p + ( +�c +�&& __bu�t�_cڡ�t_�( +n +) \ + +1046 ? ( + `��� + ( +�c +�< (( +size_t +�( +n +)) \ + +1047 ? + `�r�t + ( +__de� +, ( +�c +)) \ + +1048 : (*(*) + `__memp�y + ( + `�rchr + ( +__de� +, '\0'), \ + +1049 (cڡ *�( +�c +), \ + +1050 ( +n +)��0, +__de� +)) \ + +1051 : + `__���t_g + ( +__de� +, ( +�c +), ( +n +)); })) + + ) + +1053 +__STRING_INLINE + * +__���t_g + (* +__de� +, cڡ +__�c +[], + +1054 +size_t + +__n +); + +1056 +__STRING_INLINE + * + +1057 + $__���t_g + (* +__de� +, cڡ +__�c +[], +size_t + +__n +) + +1059 * +__tmp + = +__de� +; + +1060 +__dummy +; + +1061 #ifde� +__i686__ + + +1062 +__asm__ + +__vީ�e__ + + +1076 : "=&a" ( +__dummy +), "=&D" ( +__tmp +), "=&S" ( +__�c +), "=&c" ( +__n +) + +1077 : "g" ( +__n +), "0" (0), "1" ( +__tmp +), "2" ( +__�c +), "3" (0xffffffff) + +1080 -- +__tmp +; + +1081 +__asm__ + +__vީ�e__ + + +1098 : "=&q" ( +__dummy +), "=&r" ( +__tmp +), "=&r" ( +__�c +), "=&r" ( +__n +) + +1099 : "1" ( +__tmp +), "2" ( +__�c +), "3" ( +__n +) + +1102 +__de� +; + +1103 + } +} + +1107 + #_HAVE_STRING_ARCH_�rcmp + 1 + + ) + +1108 + #�rcmp +( +s1 +, +s2 +) \ + +1109 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& __bu�t�_cڡ�t_�( +s2 +) \ + +1110 && ( (( +s1 +)[0]�!�1 || + `��� + (s1) >= 4) \ + +1111 && ( (( +s2 +)[0]�!�1 || + `��� + (s2) >= 4) \ + +1112 ? + `memcmp + ((cڡ *�( +s1 +), (cڡ *�( +s2 +), \ + +1113 ( + `��� + ( +s1 +�< s���( +s2 +) \ + +1114 ? + `��� + ( +s1 +�: s���( +s2 +)) + 1) \ + +1115 : ( + `__bu�t�_cڡ�t_p + ( +s1 +) && ((s1)[0]) == 1 \ + +1116 && (( +s2 +)[0]�=�1 && + `��� + ( +s1 +) < 4 \ + +1117 ? ( + `__bu�t�_cڡ�t_p + ( +s2 +) && ((s2)[0]) == 1 \ + +1118 ? + `__�rcmp_cc + ((cڡ *�( +s1 +), \ + +1119 (cڡ *�( +s2 +), \ + +1120 + `��� + ( +s1 +)) \ + +1121 : + `__�rcmp_cg + ((cڡ *�( +s1 +), \ + +1122 (cڡ *�( +s2 +), \ + +1123 + `��� + ( +s1 +))) \ + +1124 : ( + `__bu�t�_cڡ�t_p + ( +s2 +�&& (( +s1 +)[0]) == 1 \ + +1125 && (( +s2 +)[0]�=�1 && + `��� + (s2) < 4 \ + +1126 ? ( + `__bu�t�_cڡ�t_p + ( +s1 +) \ + +1127 ? + `__�rcmp_cc + ((cڡ *�( +s1 +), \ + +1128 (cڡ *�( +s2 +), \ + +1129 + `��� + ( +s2 +)) \ + +1130 : + `__�rcmp_gc + ((cڡ *�( +s1 +), \ + +1131 (cڡ *�( +s2 +), \ + +1132 + `��� + ( +s2 +))) \ + +1133 : + `__�rcmp_gg + (( +s1 +), ( +s2 +)))))) + + ) + +1135 + #__�rcmp_cc +( +s1 +, +s2 +, +l +) \ + +1136 ( + `__ex�nsi�__ + ({ +__�su� + = ( +s1 +)[0] - ( +s2 +)[0]; \ + +1137 i�( +l + > 0 && +__�su� + == 0) \ + +1139 +__�su� + = ( +s1 +)[1] - ( +s2 +)[1]; \ + +1140 i�( +l + > 1 && +__�su� + == 0) \ + +1142 +__�su� + = ( +s1 +)[2] - ( +s2 +)[2]; \ + +1143 i�( +l + > 2 && +__�su� + == 0) \ + +1144 +__�su� + = ( +s1 +)[3] - ( +s2 +)[3]; \ + +1147 +__�su� +; })) + + ) + +1149 + #__�rcmp_cg +( +s1 +, +s2 +, +l1 +) \ + +1150 ( + `__ex�nsi�__ + ({ cڡ * +__s2 + = ( +s2 +); \ + +1151 +__�su� + = ( +s1 +)[0] - +__s2 +[0]; \ + +1152 i�( +l1 + > 0 && +__�su� + == 0) \ + +1154 +__�su� + = ( +s1 +)[1] - +__s2 +[1]; \ + +1155 i�( +l1 + > 1 && +__�su� + == 0) \ + +1157 +__�su� + = ( +s1 +)[2] - +__s2 +[2]; \ + +1158 i�( +l1 + > 2 && +__�su� + == 0) \ + +1159 +__�su� + = ( +s1 +)[3] - +__s2 +[3]; \ + +1162 +__�su� +; })) + + ) + +1164 + #__�rcmp_gc +( +s1 +, +s2 +, +l2 +) \ + +1165 ( + `__ex�nsi�__ + ({ cڡ * +__s1 + = ( +s1 +); \ + +1166 +__�su� + = +__s1 +[0] - ( +s2 +)[0]; \ + +1167 i�( +l2 + > 0 && +__�su� + == 0) \ + +1169 +__�su� + = +__s1 +[1] - ( +s2 +)[1]; \ + +1170 i�( +l2 + > 1 && +__�su� + == 0) \ + +1172 +__�su� + = +__s1 +[2] - ( +s2 +)[2]; \ + +1173 i�( +l2 + > 2 && +__�su� + == 0) \ + +1174 +__�su� + = +__s1 +[3] - ( +s2 +)[3]; \ + +1177 +__�su� +; })) + + ) + +1179 +__STRING_INLINE + +__�rcmp_gg + (cڡ * +__s1 +, cڡ * +__s2 +); + +1181 +__STRING_INLINE + + +1182 + $__�rcmp_gg + (cڡ * +__s1 +, cڡ * +__s2 +) + +1184 +__�s +; + +1185 +__asm__ + +__vީ�e__ + + +1201 : "=q" ( +__�s +), "=&r" ( +__s1 +), "=&r" ( +__s2 +) + +1202 : "1" ( +__s1 +), "2" ( +__s2 +), + +1203 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s1 +), + +1204 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s2 +) + +1206 +__�s +; + +1207 + } +} + +1211 + #_HAVE_STRING_ARCH_��cmp + 1 + + ) + +1212 + #��cmp +( +s1 +, +s2 +, +n +) \ + +1213 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& + `��� + (s1�< (( +size_t +�( +n +)) \ + +1214 ? + `�rcmp + (( +s1 +), ( +s2 +)) \ + +1215 : ( + `__bu�t�_cڡ�t_p + ( +s2 +�&& + `��� + (s2�< (( +size_t +�( +n +))\ + +1216 ? + `�rcmp + (( +s1 +), ( +s2 +)) \ + +1217 : + `__��cmp_g + (( +s1 +), ( +s2 +), ( +n +))))) + + ) + +1219 +__STRING_INLINE + +__��cmp_g + (cڡ * +__s1 +, cڡ * +__s2 +, + +1220 +size_t + +__n +); + +1222 +__STRING_INLINE + + +1223 + $__��cmp_g + (cڡ * +__s1 +, cڡ * +__s2 +, +size_t + +__n +) + +1225 +__�s +; + +1226 +__asm__ + +__vީ�e__ + + +1245 : "=q" ( +__�s +), "=&r" ( +__s1 +), "=&r" ( +__s2 +), "=&r" ( +__n +) + +1246 : "1" ( +__s1 +), "2" ( +__s2 +), "3" ( +__n +), + +1247 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s1 +), + +1248 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__n +]; } *) +__s2 +) + +1250 +__�s +; + +1251 + } +} + +1255 + #_HAVE_STRING_ARCH_�rchr + 1 + + ) + +1256 + #_USE_STRING_ARCH_�rchr + 1 + + ) + +1257 + #�rchr +( +s +, +c +) \ + +1258 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +c +) \ + +1259 ? (( +c +) == '\0' \ + +1260 ? (*� + `__�wmemchr + (( +s +), ( +c +)) \ + +1261 : + `__�rchr_c + (( +s +), (( +c +) & 0xff) << 8)) \ + +1262 : + `__�rchr_g + (( +s +), ( +c +)))) + + ) + +1264 +__STRING_INLINE + * +__�rchr_c + (cڡ * +__s +, +__c +); + +1266 +__STRING_INLINE + * + +1267 + $__�rchr_c + (cڡ * +__s +, +__c +) + +1269 +__d0 +; + +1270 * +__�s +; + +1271 +__asm__ + +__vީ�e__ + + +1281 : "�" ( +__�s +), "=&a" ( +__d0 +) + +1282 : "0" ( +__s +), "1" ( +__c +), + +1283 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s +) + +1285 +__�s +; + +1286 + } +} + +1288 +__STRING_INLINE + * +__�rchr_g + (cڡ * +__s +, +__c +); + +1290 +__STRING_INLINE + * + +1291 + $__�rchr_g + (cڡ * +__s +, +__c +) + +1293 +__d0 +; + +1294 * +__�s +; + +1295 +__asm__ + +__vީ�e__ + + +1306 : "�" ( +__�s +), "=&a" ( +__d0 +) + +1307 : "0" ( +__s +), "1" ( +__c +), + +1308 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s +) + +1310 +__�s +; + +1311 + } +} + +1315 + #_HAVE_STRING_ARCH_�rch�ul + 1 + + ) + +1316 + #__�rch�ul +( +s +, +c +) \ + +1317 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +c +) \ + +1318 ? (( +c +) == '\0' \ + +1319 ? (*� + `__�wmemchr + (( +s +), +c +) \ + +1320 : + `__�rch�ul_c + (( +s +), (( +c +) & 0xff) << 8)) \ + +1321 : + `__�rch�ul_g + (( +s +), +c +))) + + ) + +1323 +__STRING_INLINE + * +__�rch�ul_c + (cڡ * +__s +, +__c +); + +1325 +__STRING_INLINE + * + +1326 + $__�rch�ul_c + (cڡ * +__s +, +__c +) + +1328 +__d0 +; + +1329 * +__�s +; + +1330 +__asm__ + +__vީ�e__ + + +1340 : "�" ( +__�s +), "=&a" ( +__d0 +) + +1341 : "0" ( +__s +), "1" ( +__c +), + +1342 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s +) + +1344 +__�s +; + +1345 + } +} + +1347 +__STRING_INLINE + * +__�rch�ul_g + (cڡ * +__s +, +__c +); + +1349 +__STRING_INLINE + * + +1350 + $__�rch�ul_g + (cڡ * +__s +, +__c +) + +1352 +__d0 +; + +1353 * +__�s +; + +1354 +__asm__ + +__vީ�e__ + + +1365 : "�" ( +__�s +), "=&a" ( +__d0 +) + +1366 : "0" ( +__s +), "1" ( +__c +), + +1367 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s +) + +1369 +__�s +; + +1370 + } +} + +1371 #ifde� +__USE_GNU + + +1372 + #�rch�ul +( +s +, +c +� + `__�rch�ul + ((s), (c)) + + ) + +1376 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +1378 + #_HAVE_STRING_ARCH_�dex + 1 + + ) + +1379 + #�dex +( +s +, +c +) \ + +1380 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +c +) \ + +1381 ? + `__�rchr_c + (( +s +), (( +c +) & 0xff) << 8) \ + +1382 : + `__�rchr_g + (( +s +), ( +c +)))) + + ) + +1387 + #_HAVE_STRING_ARCH_��chr + 1 + + ) + +1388 + #��chr +( +s +, +c +) \ + +1389 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +c +) \ + +1390 ? + `__��chr_c + (( +s +), (( +c +) & 0xff) << 8) \ + +1391 : + `__��chr_g + (( +s +), ( +c +)))) + + ) + +1393 #ifde� +__i686__ + + +1394 +__STRING_INLINE + * +__��chr_c + (cڡ * +__s +, +__c +); + +1396 +__STRING_INLINE + * + +1397 + $__��chr_c + (cڡ * +__s +, +__c +) + +1399 +__d0 +, +__d1 +; + +1400 * +__�s +; + +1401 +__asm__ + +__vީ�e__ + + +1409 : "=d" ( +__�s +), "=&S" ( +__d0 +), "=&a" ( +__d1 +) + +1410 : "0" (1), "1" ( +__s +), "2" ( +__c +), + +1411 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s +) + +1413 +__�s + - 1; + +1414 + } +} + +1416 +__STRING_INLINE + * +__��chr_g + (cڡ * +__s +, +__c +); + +1418 +__STRING_INLINE + * + +1419 + $__��chr_g + (cڡ * +__s +, +__c +) + +1421 +__d0 +, +__d1 +; + +1422 * +__�s +; + +1423 +__asm__ + +__vީ�e__ + + +1432 : "=d" ( +__�s +), "=&S" ( +__d0 +), "=&a" ( +__d1 +) + +1433 : "0" (1), "1" ( +__s +), "2" ( +__c +), + +1434 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s +) + +1436 +__�s + - 1; + +1437 + } +} + +1439 +__STRING_INLINE + * +__��chr_c + (cڡ * +__s +, +__c +); + +1441 +__STRING_INLINE + * + +1442 + $__��chr_c + (cڡ * +__s +, +__c +) + +1444 +__d0 +, +__d1 +; + +1445 * +__�s +; + +1446 +__asm__ + +__vީ�e__ + + +1456 : "=d" ( +__�s +), "=&S" ( +__d0 +), "=&a" ( +__d1 +) + +1457 : "0" (0), "1" ( +__s +), "2" ( +__c +), + +1458 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s +) + +1460 +__�s +; + +1461 + } +} + +1463 +__STRING_INLINE + * +__��chr_g + (cڡ * +__s +, +__c +); + +1465 +__STRING_INLINE + * + +1466 + $__��chr_g + (cڡ * +__s +, +__c +) + +1468 +__d0 +, +__d1 +; + +1469 * +__�s +; + +1470 +__asm__ + +__vީ�e__ + + +1481 : "�" ( +__�s +), "=&S" ( +__d0 +), "=&a" ( +__d1 +) + +1482 : "0" (0), "1" ( +__s +), "2" ( +__c +), + +1483 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s +) + +1485 +__�s +; + +1486 + } +} + +1490 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +1492 + #_HAVE_STRING_ARCH_r�dex + 1 + + ) + +1493 + #r�dex +( +s +, +c +) \ + +1494 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +c +) \ + +1495 ? + `__��chr_c + (( +s +), (( +c +) & 0xff) << 8) \ + +1496 : + `__��chr_g + (( +s +), ( +c +)))) + + ) + +1502 + #_HAVE_STRING_ARCH_�rc�n + 1 + + ) + +1503 + #�rc�n +( +s +, +�je� +) \ + +1504 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�je� +) && ((reject)[0]) == 1 \ + +1505 ? (( +�je� +)[0] == '\0' \ + +1506 ? + `��� + ( +s +) \ + +1507 : (( +�je� +)[1] == '\0' \ + +1508 ? + `__�rc�n_c1 + (( +s +), ((( +�je� +)[0] << 8) & 0xff00)) \ + +1509 : + `__�rc�n_cg + (( +s +), ( +�je� +), + `��� + (reject)))) \ + +1510 : + `__�rc�n_g + (( +s +), ( +�je� +)))) + + ) + +1512 +__STRING_INLINE + +size_t + +__�rc�n_c1 + (cڡ * +__s +, +__�je� +); + +1514 #i�de� +_FORCE_INLINES + + +1515 +__STRING_INLINE + +size_t + + +1516 + $__�rc�n_c1 + (cڡ * +__s +, +__�je� +) + +1518 +__d0 +; + +1519 * +__�s +; + +1520 +__asm__ + +__vީ�e__ + + +1529 : "�" ( +__�s +), "=&a" ( +__d0 +) + +1530 : "0" ( +__s +), "1" ( +__�je� +), + +1531 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s +) + +1533 ( +__�s + - 1�- +__s +; + +1534 + } +} + +1537 +__STRING_INLINE + +size_t + +__�rc�n_cg + (cڡ * +__s +, cڡ +__�je� +[], + +1538 +size_t + +__�je�_�n +); + +1540 +__STRING_INLINE + +size_t + + +1541 + $__�rc�n_cg + (cڡ * +__s +, cڡ +__�je� +[], +size_t + +__�je�_�n +) + +1543 +__d0 +, +__d1 +, +__d2 +; + +1544 cڡ * +__�s +; + +1545 +__asm__ + +__vީ�e__ + + +1556 : "=S" ( +__�s +), "=&a" ( +__d0 +), "=&c" ( +__d1 +), "=&D" ( +__d2 +) + +1557 : "0" ( +__s +), "d" ( +__�je� +), "g" ( +__�je�_�n +) + +1559 ( +__�s + - 1�- +__s +; + +1560 + } +} + +1562 +__STRING_INLINE + +size_t + +__�rc�n_g + (cڡ * +__s +, cڡ * +__�je� +); + +1563 #ifde� +__PIC__ + + +1565 +__STRING_INLINE + +size_t + + +1566 + $__�rc�n_g + (cڡ * +__s +, cڡ * +__�je� +) + +1568 +__d0 +, +__d1 +, +__d2 +; + +1569 cڡ * +__�s +; + +1570 +__asm__ + +__vީ�e__ + + +1587 : "=S" ( +__�s +), "=&a" ( +__d0 +), "=&c" ( +__d1 +), "=&D" ( +__d2 +) + +1588 : "r" ( +__�je� +), "0" ( +__s +), "1" (0), "2" (0xffffffff) + +1590 ( +__�s + - 1�- +__s +; + +1591 + } +} + +1593 +__STRING_INLINE + +size_t + + +1594 + $__�rc�n_g + (cڡ * +__s +, cڡ * +__�je� +) + +1596 +__d0 +, +__d1 +, +__d2 +, +__d3 +; + +1597 cڡ * +__�s +; + +1598 +__asm__ + +__vީ�e__ + + +1612 : "=S" ( +__�s +), "=&a" ( +__d0 +), "=&c" ( +__d1 +), "=&D" ( +__d2 +), "=&d" ( +__d3 +) + +1613 : "0" ( +__s +), "1" (0), "2" (0xffffffff), "3" ( +__�je� +), "b" (__reject) + +1616 ( +__�s + - 1�- +__s +; + +1617 + } +} + +1623 + #_HAVE_STRING_ARCH_�r�n + 1 + + ) + +1624 + #�r�n +( +s +, +ac�� +) \ + +1625 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +ac�� +) && ((accept)[0]) == 1 \ + +1626 ? (( +ac�� +)[0] == '\0' \ + +1627 ? ((�( +s +), 0) \ + +1628 : (( +ac�� +)[1] == '\0' \ + +1629 ? + `__�r�n_c1 + (( +s +), ((( +ac�� +)[0] << 8 ) & 0xff00)) \ + +1630 : + `__�r�n_cg + (( +s +), ( +ac�� +), + `��� + (accept)))) \ + +1631 : + `__�r�n_g + (( +s +), ( +ac�� +)))) + + ) + +1633 #i�de� +_FORCE_INLINES + + +1634 +__STRING_INLINE + +size_t + +__�r�n_c1 + (cڡ * +__s +, +__ac�� +); + +1636 +__STRING_INLINE + +size_t + + +1637 + $__�r�n_c1 + (cڡ * +__s +, +__ac�� +) + +1639 +__d0 +; + +1640 * +__�s +; + +1642 +__asm__ + +__vީ�e__ + + +1648 : "�" ( +__�s +), "=&q" ( +__d0 +) + +1649 : "0" ( +__s +), "1" ( +__ac�� +), + +1650 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s +) + +1652 ( +__�s + - 1�- +__s +; + +1653 + } +} + +1656 +__STRING_INLINE + +size_t + +__�r�n_cg + (cڡ * +__s +, cڡ +__ac�� +[], + +1657 +size_t + +__ac��_�n +); + +1659 +__STRING_INLINE + +size_t + + +1660 + $__�r�n_cg + (cڡ * +__s +, cڡ +__ac�� +[], +size_t + +__ac��_�n +) + +1662 +__d0 +, +__d1 +, +__d2 +; + +1663 cڡ * +__�s +; + +1664 +__asm__ + +__vީ�e__ + + +1675 : "=S" ( +__�s +), "=&a" ( +__d0 +), "=&c" ( +__d1 +), "=&D" ( +__d2 +) + +1676 : "0" ( +__s +), "g" ( +__ac�� +), "g" ( +__ac��_�n +), + +1679 "m" ( *(�ru� { +__x +[0xfffffff]; } *) +__s +), + +1680 "m" ( *(�ru� { +__ex�nsi�__ + +__x +[ +__ac��_�n +]; } *) +__ac�� +) + +1682 ( +__�s + - 1�- +__s +; + +1683 + } +} + +1685 +__STRING_INLINE + +size_t + +__�r�n_g + (cڡ * +__s +, cڡ * +__ac�� +); + +1686 #ifde� +__PIC__ + + +1688 +__STRING_INLINE + +size_t + + +1689 + $__�r�n_g + (cڡ * +__s +, cڡ * +__ac�� +) + +1691 +__d0 +, +__d1 +, +__d2 +; + +1692 cڡ * +__�s +; + +1693 +__asm__ + +__vީ�e__ + + +1709 : "=S" ( +__�s +), "=&a" ( +__d0 +), "=&c" ( +__d1 +), "=&D" ( +__d2 +) + +1710 : "d" ( +__ac�� +), "0" ( +__s +), "1" (0), "2" (0xffffffff), "3" (__accept) + +1712 ( +__�s + - 1�- +__s +; + +1713 + } +} + +1715 +__STRING_INLINE + +size_t + + +1716 + $__�r�n_g + (cڡ * +__s +, cڡ * +__ac�� +) + +1718 +__d0 +, +__d1 +, +__d2 +, +__d3 +; + +1719 cڡ * +__�s +; + +1720 +__asm__ + +__vީ�e__ + + +1734 : "=S" ( +__�s +), "=&a" ( +__d0 +), "=&c" ( +__d1 +), "=&D" ( +__d2 +), "=&d" ( +__d3 +) + +1735 : "0" ( +__s +), "1" (0), "2" (0xffffffff), "3" ( +__ac�� +), "b" (__accept) + +1737 ( +__�s + - 1�- +__s +; + +1738 + } +} + +1743 + #_HAVE_STRING_ARCH_��brk + 1 + + ) + +1744 + #��brk +( +s +, +ac�� +) \ + +1745 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +ac�� +) && ((accept)[0]) == 1 \ + +1746 ? (( +ac�� +)[0] == '\0' \ + +1747 ? ((�( +s +), (*) 0) \ + +1748 : (( +ac�� +)[1] == '\0' \ + +1749 ? + `�rchr + (( +s +), ( +ac�� +)[0]) \ + +1750 : + `__��brk_cg + (( +s +), ( +ac�� +), + `��� + (accept)))) \ + +1751 : + `__��brk_g + (( +s +), ( +ac�� +)))) + + ) + +1753 +__STRING_INLINE + * +__��brk_cg + (cڡ * +__s +, cڡ +__ac�� +[], + +1754 +size_t + +__ac��_�n +); + +1756 +__STRING_INLINE + * + +1757 + $__��brk_cg + (cڡ * +__s +, cڡ +__ac�� +[], +size_t + +__ac��_�n +) + +1759 +__d0 +, +__d1 +, +__d2 +; + +1760 * +__�s +; + +1761 +__asm__ + +__vީ�e__ + + +1776 : "=S" ( +__�s +), "=&a" ( +__d0 +), "=&c" ( +__d1 +), "=&D" ( +__d2 +) + +1777 : "0" ( +__s +), "d" ( +__ac�� +), "g" ( +__ac��_�n +) + +1779 +__�s +; + +1780 + } +} + +1782 +__STRING_INLINE + * +__��brk_g + (cڡ * +__s +, cڡ * +__ac�� +); + +1783 #ifde� +__PIC__ + + +1785 +__STRING_INLINE + * + +1786 + $__��brk_g + (cڡ * +__s +, cڡ * +__ac�� +) + +1788 +__d0 +, +__d1 +, +__d2 +; + +1789 * +__�s +; + +1790 +__asm__ + +__vީ�e__ + + +1811 : "=S" ( +__�s +), "=&a" ( +__d0 +), "=&c" ( +__d1 +), "=&D" ( +__d2 +) + +1812 : "d" ( +__ac�� +), "0" ( +__s +), "1" (0), "2" (0xffffffff) + +1814 +__�s +; + +1815 + } +} + +1817 +__STRING_INLINE + * + +1818 + $__��brk_g + (cڡ * +__s +, cڡ * +__ac�� +) + +1820 +__d0 +, +__d1 +, +__d2 +, +__d3 +; + +1821 * +__�s +; + +1822 +__asm__ + +__vީ�e__ + + +1841 : "=S" ( +__�s +), "=&a" ( +__d0 +), "=&c" ( +__d1 +), "=&d" ( +__d2 +), "=&D" ( +__d3 +) + +1842 : "0" ( +__s +), "1" (0), "2" (0xffffffff), "b" ( +__ac�� +) + +1844 +__�s +; + +1845 + } +} + +1850 + #_HAVE_STRING_ARCH_�r�r + 1 + + ) + +1851 + #�r�r +( +hay�ack +, +�ed� +) \ + +1852 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�ed� +) && ((needle)[0]) == 1 \ + +1853 ? (( +�ed� +)[0] == '\0' \ + +1854 ? ( +hay�ack +) \ + +1855 : (( +�ed� +)[1] == '\0' \ + +1856 ? + `�rchr + (( +hay�ack +), ( +�ed� +)[0]) \ + +1857 : + `__�r�r_cg + (( +hay�ack +), ( +�ed� +), \ + +1858 + `��� + ( +�ed� +)))) \ + +1859 : + `__�r�r_g + (( +hay�ack +), ( +�ed� +)))) + + ) + +1863 +__STRING_INLINE + * +__�r�r_cg + (cڡ * +__hay�ack +, + +1864 cڡ +__�ed� +[], + +1865 +size_t + +__�ed�_�n +); + +1867 +__STRING_INLINE + * + +1868 + $__�r�r_cg + (cڡ * +__hay�ack +, cڡ +__�ed� +[], + +1869 +size_t + +__�ed�_�n +) + +1871 +__d0 +, +__d1 +, +__d2 +; + +1872 * +__�s +; + +1873 +__asm__ + +__vީ�e__ + + +1886 : "=&a" ( +__�s +), "=&S" ( +__d0 +), "=&D" ( +__d1 +), "=&c" ( +__d2 +) + +1887 : "g" ( +__�ed�_�n +), "1" ( +__hay�ack +), "d" ( +__�ed� +) + +1889 +__�s +; + +1890 + } +} + +1892 +__STRING_INLINE + * +__�r�r_g + (cڡ * +__hay�ack +, + +1893 cڡ * +__�ed� +); + +1894 #ifde� +__PIC__ + + +1896 +__STRING_INLINE + * + +1897 + $__�r�r_g + (cڡ * +__hay�ack +, cڡ * +__�ed� +) + +1899 +__d0 +, +__d1 +, +__d2 +; + +1900 * +__�s +; + +1901 +__asm__ + +__vީ�e__ + + +1920 : "=&a" ( +__�s +), "=&c" ( +__d0 +), "=&S" ( +__d1 +), "=&D" ( +__d2 +) + +1921 : "0" (0), "1" (0xffffffff), "2" ( +__hay�ack +), "3" ( +__�ed� +), + +1922 "d" ( +__�ed� +) + +1924 +__�s +; + +1925 + } +} + +1927 +__STRING_INLINE + * + +1928 + $__�r�r_g + (cڡ * +__hay�ack +, cڡ * +__�ed� +) + +1930 +__d0 +, +__d1 +, +__d2 +, +__d3 +; + +1931 * +__�s +; + +1932 +__asm__ + +__vީ�e__ + + +1949 : "=&a" ( +__�s +), "=&c" ( +__d0 +), "=&S" ( +__d1 +), "=&D" ( +__d2 +), "=&d" ( +__d3 +) + +1950 : "0" (0), "1" (0xffffffff), "2" ( +__hay�ack +), "3" ( +__�ed� +), + +1951 "b" ( +__�ed� +) + +1953 +__�s +; + +1954 + } +} + +1960 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +1961 #ifde� +__i686__ + + +1962 + #_HAVE_STRING_ARCH_ffs + 1 + + ) + +1963 + #ffs +( +w�d +�( + `__bu�t�_cڡ�t_p + (word) \ + +1964 ? + `__bu�t�_ffs + ( +w�d +) \ + +1965 : ({ +__�t +, +__tmp +; \ + +1966 +__asm__ + +__vީ�e__ + \ + +1969 : "=&r" ( +__�t +), "�" ( +__tmp +) \ + +1970 : "rm" ( +w�d +), "1" (-1)); \ + +1971 +__�t + + 1; })) + + ) + +1973 #i�de� +ff� + + +1974 + #ff� +( +w�d +� + `ffs +(w�d) + + ) + +1979 #i�de� +_FORCE_INLINES + + +1980 #unde� +__STRING_INLINE + + + @/usr/include/bits/string2.h + +20 #i�de� +_STRING_H + + +24 #i�de� +__NO_STRING_INLINES + + +41 #i�de� +__STRING_INLINE + + +42 #ifde� +__�lu�lus + + +43 + #__STRING_INLINE + +�l�e + + + ) + +45 + #__STRING_INLINE + +__ex��_�l�e + + + ) + +49 #i� +_STRING_ARCH_u�lig�d + + +51 + ~<�d�n.h +> + +52 + ~<b�s/ty�s.h +> + +54 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +55 + #__STRING2_SMALL_GET16 +( +�c +, +idx +) \ + +56 (((cڡ *�(cڡ *�( +�c +))[ +idx + + 1] << 8 \ + +57 | ((cڡ *�(cڡ *�( +�c +))[ +idx +]) + + ) + +58 + #__STRING2_SMALL_GET32 +( +�c +, +idx +) \ + +59 (((((cڡ *�(cڡ *�( +�c +))[ +idx + + 3] << 8 \ + +60 | ((cڡ *�(cڡ *�( +�c +))[ +idx + + 2]) << 8 \ + +61 | ((cڡ *�(cڡ *�( +�c +))[ +idx + + 1]) << 8 \ + +62 | ((cڡ *�(cڡ *�( +�c +))[ +idx +]) + + ) + +64 + #__STRING2_SMALL_GET16 +( +�c +, +idx +) \ + +65 (((cڡ *�(cڡ *�( +�c +))[ +idx +] << 8 \ + +66 | ((cڡ *�(cڡ *�( +�c +))[ +idx + + 1]) + + ) + +67 + #__STRING2_SMALL_GET32 +( +�c +, +idx +) \ + +68 (((((cڡ *�(cڡ *�( +�c +))[ +idx +] << 8 \ + +69 | ((cڡ *�(cڡ *�( +�c +))[ +idx + + 1]) << 8 \ + +70 | ((cڡ *�(cڡ *�( +�c +))[ +idx + + 2]) << 8 \ + +71 | ((cڡ *�(cڡ *�( +�c +))[ +idx + + 3]) + + ) + +76 + #__STRING2_COPY_TYPE +( +N +) \ + +77 �ru� { +__�r +[ +N +]; } \ + +78 + t__��ibu�__ + (( + t__�cked__ +)� + t__STRING2_COPY_ARR +## + tN + + + ) + +79 + t__STRING2_COPY_TYPE + (2); + +80 +__STRING2_COPY_TYPE + (3); + +81 +__STRING2_COPY_TYPE + (4); + +82 +__STRING2_COPY_TYPE + (5); + +83 +__STRING2_COPY_TYPE + (6); + +84 +__STRING2_COPY_TYPE + (7); + +85 +__STRING2_COPY_TYPE + (8); + +86 #unde� +__STRING2_COPY_TYPE + + +92 + #__�r�g2_1b�r_p +( +__x +) \ + +93 (( +size_t +)(cڡ *)(( +__x +�+ 1�- (size_t)(cڡ *)(__x�=�1) + + ) + +96 #i�! +def�ed + +_HAVE_STRING_ARCH_mem�t + + +97 #i�! +__GNUC_PREREQ + (3, 0) + +98 #i� +_STRING_ARCH_u�lig�d + + +99 + #mem�t +( +s +, +c +, +n +) \ + +100 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +n +) && (n) <= 16 \ + +101 ? (( +n +) == 1 \ + +102 ? + `__mem�t_1 + ( +s +, +c +) \ + +103 : + `__mem�t_gc + ( +s +, +c +, +n +)) \ + +104 : ( + `__bu�t�_cڡ�t_p + ( +c +) && (c) == '\0' \ + +105 ? ({ * +__s + = ( +s +); + `__bz�o + (__s, +n +); __s; }) \ + +106 : + `mem�t + ( +s +, +c +, +n +)))) + + ) + +108 + #__mem�t_1 +( +s +, +c +�({ * +__s + = (s); \ + +109 *(( +__u�t8_t + *� +__s +��(__u�t8_t� +c +; __s; }) + + ) + +111 + #__mem�t_gc +( +s +, +c +, +n +) \ + +112 ({ * +__s + = ( +s +); \ + +114 +__ui +; \ + +115 +__usi +; \ + +116 +__uc +; \ + +117 } * +__u + = +__s +; \ + +118 +__u�t8_t + +__c + = (__u�t8_t�( +c +); \ + +121 (�( +n +)) \ + +124 +__u +-> +__ui + = +__c + * 0x01010101; \ + +125 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +127 +__u +-> +__ui + = +__c + * 0x01010101; \ + +128 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +130 +__u +-> +__ui + = +__c + * 0x01010101; \ + +131 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +133 +__u +-> +__usi + = (� +__c + * 0x0101; \ + +134 +__u + = + `__ex�nsi�__ + ((*) __u + 2); \ + +135 +__u +-> +__uc + = (� +__c +; \ + +139 +__u +-> +__ui + = +__c + * 0x01010101; \ + +140 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +142 +__u +-> +__ui + = +__c + * 0x01010101; \ + +143 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +145 +__u +-> +__ui + = +__c + * 0x01010101; \ + +146 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +148 +__u +-> +__usi + = (� +__c + * 0x0101; \ + +152 +__u +-> +__ui + = +__c + * 0x01010101; \ + +153 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +155 +__u +-> +__ui + = +__c + * 0x01010101; \ + +156 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +158 +__u +-> +__ui + = +__c + * 0x01010101; \ + +159 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +161 +__u +-> +__uc + = (� +__c +; \ + +165 +__u +-> +__ui + = +__c + * 0x01010101; \ + +166 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +168 +__u +-> +__ui + = +__c + * 0x01010101; \ + +169 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +171 +__u +-> +__ui + = +__c + * 0x01010101; \ + +172 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +174 +__u +-> +__ui + = +__c + * 0x01010101; \ + +179 +__s +; }) + + ) + +181 + #mem�t +( +s +, +c +, +n +) \ + +182 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +c +) && (c) == '\0' \ + +183 ? ({ * +__s + = ( +s +); + `__bz�o + (__s, +n +); __s; }) \ + +184 : + `mem�t + ( +s +, +c +, +n +))) + + ) + +193 #i� +__GNUC_PREREQ + (2, 91) + +194 + #__bz�o +( +s +, +n +� + `__bu�t�_mem�t + (s, '\0',�) + + ) + +202 #ifde� +__USE_GNU + + +203 #i�! +def�ed + +_HAVE_STRING_ARCH_memp�y + || def�ed +_FORCE_INLINES + + +204 #i�de� +_HAVE_STRING_ARCH_memp�y + + +205 #i� +__GNUC_PREREQ + (3, 4) + +206 + #__memp�y +( +de� +, +�c +, +n +� + `__bu�t�_memp�y + (de�, src,�) + + ) + +207 #�i� +__GNUC_PREREQ + (3, 0) + +208 + #__memp�y +( +de� +, +�c +, +n +) \ + +209 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +�&& __bu�t�_cڡ�t_�( +n +) \ + +210 && + `__�r�g2_1b�r_p + ( +�c +�&& +n + <= 8 \ + +211 ? + `__bu�t�_mem�y + ( +de� +, +�c +, +n +) + (n) \ + +212 : + `__memp�y + ( +de� +, +�c +, +n +))) + + ) + +214 + #__memp�y +( +de� +, +�c +, +n +) \ + +215 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +�&& __bu�t�_cڡ�t_�( +n +) \ + +216 && + `__�r�g2_1b�r_p + ( +�c +�&& +n + <= 8 \ + +217 ? + `__memp�y_sm�l + ( +de� +, + `__memp�y_�gs + ( +�c +), +n +) \ + +218 : + `__memp�y + ( +de� +, +�c +, +n +))) + + ) + +222 + #memp�y +( +de� +, +�c +, +n +� + `__memp�y + (de�, src,�) + + ) + +225 #i�! +__GNUC_PREREQ + (3, 0�|| +def�ed + +_FORCE_INLINES + + +226 #i� +_STRING_ARCH_u�lig�d + + +227 #i�de� +_FORCE_INLINES + + +228 + #__memp�y_�gs +( +�c +) \ + +229 ((cڡ *�( +�c +))[0], ((const *) (src))[2], \ + +230 ((cڡ *�( +�c +))[4], ((const *) (src))[6], \ + +231 +__ex�nsi�__ + + `__STRING2_SMALL_GET16 + ( +�c +, 0), \ + +232 +__ex�nsi�__ + + `__STRING2_SMALL_GET16 + ( +�c +, 4), \ + +233 +__ex�nsi�__ + + `__STRING2_SMALL_GET32 + ( +�c +, 0), \ + +234 +__ex�nsi�__ + + `__STRING2_SMALL_GET32 + ( +�c +, 4) + + ) + +236 +__STRING_INLINE + * +__memp�y_sm�l + (*, , , , , + +237 +__u�t16_t +, __u�t16_t, +__u�t32_t +, + +238 +__u�t32_t +, +size_t +); + +239 +__STRING_INLINE + * + +240 + $__memp�y_sm�l + (* +__de�1 +, + +241 +__�c0_1 +, +__�c2_1 +, +__�c4_1 +, +__�c6_1 +, + +242 +__u�t16_t + +__�c0_2 +, __u�t16_� +__�c4_2 +, + +243 +__u�t32_t + +__�c0_4 +, __u�t32_� +__�c4_4 +, + +244 +size_t + +__��� +) + +247 +__u�t32_t + +__ui +; + +248 +__u�t16_t + +__usi +; + +249 +__uc +; + +250 +__c +; + +251 } * +__u + = +__de�1 +; + +252 (� +__��� +) + +255 +__u +-> +__c + = +__�c0_1 +; + +256 +__u + = + `__ex�nsi�__ + ((*) __u + 1); + +259 +__u +-> +__usi + = +__�c0_2 +; + +260 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +263 +__u +-> +__usi + = +__�c0_2 +; + +264 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +265 +__u +-> +__c + = +__�c2_1 +; + +266 +__u + = + `__ex�nsi�__ + ((*) __u + 1); + +269 +__u +-> +__ui + = +__�c0_4 +; + +270 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +273 +__u +-> +__ui + = +__�c0_4 +; + +274 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +275 +__u +-> +__c + = +__�c4_1 +; + +276 +__u + = + `__ex�nsi�__ + ((*) __u + 1); + +279 +__u +-> +__ui + = +__�c0_4 +; + +280 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +281 +__u +-> +__usi + = +__�c4_2 +; + +282 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +285 +__u +-> +__ui + = +__�c0_4 +; + +286 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +287 +__u +-> +__usi + = +__�c4_2 +; + +288 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +289 +__u +-> +__c + = +__�c6_1 +; + +290 +__u + = + `__ex�nsi�__ + ((*) __u + 1); + +293 +__u +-> +__ui + = +__�c0_4 +; + +294 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +295 +__u +-> +__ui + = +__�c4_4 +; + +296 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +299 (*� +__u +; + +300 + } +} + +302 #i�de� +_FORCE_INLINES + + +303 + #__memp�y_�gs +( +�c +) \ + +304 ((cڡ *�( +�c +))[0], \ + +305 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR2 +) \ + +306 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1] } }), \ + +307 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR3 +) \ + +308 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +309 ((cڡ *�( +�c +))[2] } }), \ + +310 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR4 +) \ + +311 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +312 ((cڡ *�( +�c +))[2], ((const *) (src))[3] } }), \ + +313 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR5 +) \ + +314 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +315 ((cڡ *�( +�c +))[2], ((const *) (src))[3], \ + +316 ((cڡ *�( +�c +))[4] } }), \ + +317 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR6 +) \ + +318 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +319 ((cڡ *�( +�c +))[2], ((const *) (src))[3], \ + +320 ((cڡ *�( +�c +))[4], ((const *) (src))[5] } }), \ + +321 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR7 +) \ + +322 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +323 ((cڡ *�( +�c +))[2], ((const *) (src))[3], \ + +324 ((cڡ *�( +�c +))[4], ((const *) (src))[5], \ + +325 ((cڡ *�( +�c +))[6] } }), \ + +326 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR8 +) \ + +327 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +328 ((cڡ *�( +�c +))[2], ((const *) (src))[3], \ + +329 ((cڡ *�( +�c +))[4], ((const *) (src))[5], \ + +330 ((cڡ *�( +�c +))[6], ((cڡ *�(�c))[7] } }) + + ) + +332 +__STRING_INLINE + * +__memp�y_sm�l + (*, , +__STRING2_COPY_ARR2 +, + +333 +__STRING2_COPY_ARR3 +, + +334 +__STRING2_COPY_ARR4 +, + +335 +__STRING2_COPY_ARR5 +, + +336 +__STRING2_COPY_ARR6 +, + +337 +__STRING2_COPY_ARR7 +, + +338 +__STRING2_COPY_ARR8 +, +size_t +); + +339 +__STRING_INLINE + * + +340 + $__memp�y_sm�l + (* +__de� +, +__�c1 +, + +341 +__STRING2_COPY_ARR2 + +__�c2 +, +__STRING2_COPY_ARR3 + +__�c3 +, + +342 +__STRING2_COPY_ARR4 + +__�c4 +, +__STRING2_COPY_ARR5 + +__�c5 +, + +343 +__STRING2_COPY_ARR6 + +__�c6 +, +__STRING2_COPY_ARR7 + +__�c7 +, + +344 +__STRING2_COPY_ARR8 + +__�c8 +, +size_t + +__��� +) + +347 +__c +; + +348 +__STRING2_COPY_ARR2 + +__s�2 +; + +349 +__STRING2_COPY_ARR3 + +__s�3 +; + +350 +__STRING2_COPY_ARR4 + +__s�4 +; + +351 +__STRING2_COPY_ARR5 + +__s�5 +; + +352 +__STRING2_COPY_ARR6 + +__s�6 +; + +353 +__STRING2_COPY_ARR7 + +__s�7 +; + +354 +__STRING2_COPY_ARR8 + +__s�8 +; + +355 } * +__u + = +__de� +; + +356 (� +__��� +) + +359 +__u +-> +__c + = +__�c1 +; + +362 +__ex�nsi�__ + +__u +-> +__s�2 + = +__�c2 +; + +365 +__ex�nsi�__ + +__u +-> +__s�3 + = +__�c3 +; + +368 +__ex�nsi�__ + +__u +-> +__s�4 + = +__�c4 +; + +371 +__ex�nsi�__ + +__u +-> +__s�5 + = +__�c5 +; + +374 +__ex�nsi�__ + +__u +-> +__s�6 + = +__�c6 +; + +377 +__ex�nsi�__ + +__u +-> +__s�7 + = +__�c7 +; + +380 +__ex�nsi�__ + +__u +-> +__s�8 + = +__�c8 +; + +383 + `__ex�nsi�__ + ((*� +__u + + +__��� +); + +384 + } +} + +392 #i�de� +_HAVE_STRING_ARCH_�rchr + + +393 * +__�wmemchr + (cڡ * +__s +, +__c +); + +394 #i� +__GNUC_PREREQ + (3, 2) + +395 + #�rchr +( +s +, +c +) \ + +396 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +c +�&& !__bu�t�_cڡ�t_�( +s +) \ + +397 && ( +c +) == '\0' \ + +398 ? (*� + `__�wmemchr + ( +s +, +c +) \ + +399 : + `__bu�t�_�rchr + ( +s +, +c +))) + + ) + +401 + #�rchr +( +s +, +c +) \ + +402 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +c +) && (c) == '\0' \ + +403 ? (*� + `__�wmemchr + ( +s +, +c +) \ + +404 : + `�rchr + ( +s +, +c +))) + + ) + +410 #i�(! +def�ed + +_HAVE_STRING_ARCH_�r�y + && ! +__GNUC_PREREQ + (3, 0)) \ + +411 || +def�ed + + g_FORCE_INLINES + + +412 #i�! +def�ed + +_HAVE_STRING_ARCH_�r�y + && ! +__GNUC_PREREQ + (3, 0) + +413 + #�r�y +( +de� +, +�c +) \ + +414 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +) \ + +415 ? ( + `__�r�g2_1b�r_p + ( +�c +�&& + `��� + (src) + 1 <= 8 \ + +416 ? + `__�r�y_sm�l + ( +de� +, + `__�r�y_�gs + ( +�c +), \ + +417 + `��� + ( +�c +) + 1) \ + +418 : (*� + `mem�y + ( +de� +, +�c +, + `��� + (src) + 1)) \ + +419 : + `�r�y + ( +de� +, +�c +))) + + ) + +422 #i� +_STRING_ARCH_u�lig�d + + +423 #i�de� +_FORCE_INLINES + + +424 + #__�r�y_�gs +( +�c +) \ + +425 +__ex�nsi�__ + + `__STRING2_SMALL_GET16 + ( +�c +, 0), \ + +426 +__ex�nsi�__ + + `__STRING2_SMALL_GET16 + ( +�c +, 4), \ + +427 +__ex�nsi�__ + + `__STRING2_SMALL_GET32 + ( +�c +, 0), \ + +428 +__ex�nsi�__ + + `__STRING2_SMALL_GET32 + ( +�c +, 4) + + ) + +430 +__STRING_INLINE + * +__�r�y_sm�l + (*, +__u�t16_t +, __uint16_t, + +431 +__u�t32_t +, __u�t32_t, +size_t +); + +432 +__STRING_INLINE + * + +433 + $__�r�y_sm�l + (* +__de� +, + +434 +__u�t16_t + +__�c0_2 +, __u�t16_� +__�c4_2 +, + +435 +__u�t32_t + +__�c0_4 +, __u�t32_� +__�c4_4 +, + +436 +size_t + +__��� +) + +439 +__u�t32_t + +__ui +; + +440 +__u�t16_t + +__usi +; + +441 +__uc +; + +442 } * +__u + = (*� +__de� +; + +443 (� +__��� +) + +446 +__u +-> +__uc + = '\0'; + +449 +__u +-> +__usi + = +__�c0_2 +; + +452 +__u +-> +__usi + = +__�c0_2 +; + +453 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +454 +__u +-> +__uc + = '\0'; + +457 +__u +-> +__ui + = +__�c0_4 +; + +460 +__u +-> +__ui + = +__�c0_4 +; + +461 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +462 +__u +-> +__uc + = '\0'; + +465 +__u +-> +__ui + = +__�c0_4 +; + +466 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +467 +__u +-> +__usi + = +__�c4_2 +; + +470 +__u +-> +__ui + = +__�c0_4 +; + +471 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +472 +__u +-> +__usi + = +__�c4_2 +; + +473 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +474 +__u +-> +__uc + = '\0'; + +477 +__u +-> +__ui + = +__�c0_4 +; + +478 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +479 +__u +-> +__ui + = +__�c4_4 +; + +482 +__de� +; + +483 + } +} + +485 #i�de� +_FORCE_INLINES + + +486 + #__�r�y_�gs +( +�c +) \ + +487 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR2 +) \ + +488 { { ((cڡ *�( +�c +))[0], '\0' } }), \ + +489 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR3 +) \ + +490 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +492 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR4 +) \ + +493 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +494 ((cڡ *�( +�c +))[2], '\0' } }), \ + +495 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR5 +) \ + +496 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +497 ((cڡ *�( +�c +))[2], ((const *) (src))[3], \ + +499 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR6 +) \ + +500 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +501 ((cڡ *�( +�c +))[2], ((const *) (src))[3], \ + +502 ((cڡ *�( +�c +))[4], '\0' } }), \ + +503 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR7 +) \ + +504 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +505 ((cڡ *�( +�c +))[2], ((const *) (src))[3], \ + +506 ((cڡ *�( +�c +))[4], ((const *) (src))[5], \ + +508 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR8 +) \ + +509 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +510 ((cڡ *�( +�c +))[2], ((const *) (src))[3], \ + +511 ((cڡ *�( +�c +))[4], ((const *) (src))[5], \ + +512 ((cڡ *�( +�c +))[6], '\0' } }) + + ) + +514 +__STRING_INLINE + * +__�r�y_sm�l + (*, +__STRING2_COPY_ARR2 +, + +515 +__STRING2_COPY_ARR3 +, + +516 +__STRING2_COPY_ARR4 +, + +517 +__STRING2_COPY_ARR5 +, + +518 +__STRING2_COPY_ARR6 +, + +519 +__STRING2_COPY_ARR7 +, + +520 +__STRING2_COPY_ARR8 +, +size_t +); + +521 +__STRING_INLINE + * + +522 + $__�r�y_sm�l + (* +__de� +, + +523 +__STRING2_COPY_ARR2 + +__�c2 +, +__STRING2_COPY_ARR3 + +__�c3 +, + +524 +__STRING2_COPY_ARR4 + +__�c4 +, +__STRING2_COPY_ARR5 + +__�c5 +, + +525 +__STRING2_COPY_ARR6 + +__�c6 +, +__STRING2_COPY_ARR7 + +__�c7 +, + +526 +__STRING2_COPY_ARR8 + +__�c8 +, +size_t + +__��� +) + +529 +__c +; + +530 +__STRING2_COPY_ARR2 + +__s�2 +; + +531 +__STRING2_COPY_ARR3 + +__s�3 +; + +532 +__STRING2_COPY_ARR4 + +__s�4 +; + +533 +__STRING2_COPY_ARR5 + +__s�5 +; + +534 +__STRING2_COPY_ARR6 + +__s�6 +; + +535 +__STRING2_COPY_ARR7 + +__s�7 +; + +536 +__STRING2_COPY_ARR8 + +__s�8 +; + +537 } * +__u + = (*� +__de� +; + +538 (� +__��� +) + +541 +__u +-> +__c + = '\0'; + +544 +__ex�nsi�__ + +__u +-> +__s�2 + = +__�c2 +; + +547 +__ex�nsi�__ + +__u +-> +__s�3 + = +__�c3 +; + +550 +__ex�nsi�__ + +__u +-> +__s�4 + = +__�c4 +; + +553 +__ex�nsi�__ + +__u +-> +__s�5 + = +__�c5 +; + +556 +__ex�nsi�__ + +__u +-> +__s�6 + = +__�c6 +; + +559 +__ex�nsi�__ + +__u +-> +__s�7 + = +__�c7 +; + +562 +__ex�nsi�__ + +__u +-> +__s�8 + = +__�c8 +; + +565 +__de� +; + +566 + } +} + +572 #ifde� +__USE_GNU + + +573 #i�! +def�ed + +_HAVE_STRING_ARCH_�p�y + || def�ed +_FORCE_INLINES + + +574 #i�de� +_HAVE_STRING_ARCH_�p�y + + +575 #i� +__GNUC_PREREQ + (3, 4) + +576 + #__�p�y +( +de� +, +�c +� + `__bu�t�_�p�y + (de�, src) + + ) + +577 #�i� +__GNUC_PREREQ + (3, 0) + +578 + #__�p�y +( +de� +, +�c +) \ + +579 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +) \ + +580 ? ( + `__�r�g2_1b�r_p + ( +�c +�&& + `��� + (src) + 1 <= 8 \ + +581 ? + `__bu�t�_�r�y + ( +de� +, +�c +�+ + `��� + (src) \ + +582 : ((*�( +__memp�y +�( +de� +, +�c +, + `��� + (src) + 1) \ + +584 : + `__�p�y + ( +de� +, +�c +))) + + ) + +586 + #__�p�y +( +de� +, +�c +) \ + +587 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +) \ + +588 ? ( + `__�r�g2_1b�r_p + ( +�c +�&& + `��� + (src) + 1 <= 8 \ + +589 ? + `__�p�y_sm�l + ( +de� +, + `__�p�y_�gs + ( +�c +), \ + +590 + `��� + ( +�c +) + 1) \ + +591 : ((*�( +__memp�y +�( +de� +, +�c +, + `��� + (src) + 1) \ + +593 : + `__�p�y + ( +de� +, +�c +))) + + ) + +597 + #�p�y +( +de� +, +�c +� + `__�p�y + (de�, src) + + ) + +600 #i�! +__GNUC_PREREQ + (3, 0�|| +def�ed + +_FORCE_INLINES + + +601 #i� +_STRING_ARCH_u�lig�d + + +602 #i�de� +_FORCE_INLINES + + +603 + #__�p�y_�gs +( +�c +) \ + +604 +__ex�nsi�__ + + `__STRING2_SMALL_GET16 + ( +�c +, 0), \ + +605 +__ex�nsi�__ + + `__STRING2_SMALL_GET16 + ( +�c +, 4), \ + +606 +__ex�nsi�__ + + `__STRING2_SMALL_GET32 + ( +�c +, 0), \ + +607 +__ex�nsi�__ + + `__STRING2_SMALL_GET32 + ( +�c +, 4) + + ) + +609 +__STRING_INLINE + * +__�p�y_sm�l + (*, +__u�t16_t +, __uint16_t, + +610 +__u�t32_t +, __u�t32_t, +size_t +); + +611 +__STRING_INLINE + * + +612 + $__�p�y_sm�l + (* +__de� +, + +613 +__u�t16_t + +__�c0_2 +, __u�t16_� +__�c4_2 +, + +614 +__u�t32_t + +__�c0_4 +, __u�t32_� +__�c4_4 +, + +615 +size_t + +__��� +) + +618 +__ui +; + +619 +__usi +; + +620 +__uc +; + +621 +__c +; + +622 } * +__u + = (*� +__de� +; + +623 (� +__��� +) + +626 +__u +-> +__uc + = '\0'; + +629 +__u +-> +__usi + = +__�c0_2 +; + +630 +__u + = + `__ex�nsi�__ + ((*) __u + 1); + +633 +__u +-> +__usi + = +__�c0_2 +; + +634 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +635 +__u +-> +__uc + = '\0'; + +638 +__u +-> +__ui + = +__�c0_4 +; + +639 +__u + = + `__ex�nsi�__ + ((*) __u + 3); + +642 +__u +-> +__ui + = +__�c0_4 +; + +643 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +644 +__u +-> +__uc + = '\0'; + +647 +__u +-> +__ui + = +__�c0_4 +; + +648 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +649 +__u +-> +__usi + = +__�c4_2 +; + +650 +__u + = + `__ex�nsi�__ + ((*) __u + 1); + +653 +__u +-> +__ui + = +__�c0_4 +; + +654 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +655 +__u +-> +__usi + = +__�c4_2 +; + +656 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +657 +__u +-> +__uc + = '\0'; + +660 +__u +-> +__ui + = +__�c0_4 +; + +661 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +662 +__u +-> +__ui + = +__�c4_4 +; + +663 +__u + = + `__ex�nsi�__ + ((*) __u + 3); + +666 & +__u +-> +__c +; + +667 + } +} + +669 #i�de� +_FORCE_INLINES + + +670 + #__�p�y_�gs +( +�c +) \ + +671 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR2 +) \ + +672 { { ((cڡ *�( +�c +))[0], '\0' } }), \ + +673 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR3 +) \ + +674 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +676 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR4 +) \ + +677 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +678 ((cڡ *�( +�c +))[2], '\0' } }), \ + +679 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR5 +) \ + +680 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +681 ((cڡ *�( +�c +))[2], ((const *) (src))[3], \ + +683 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR6 +) \ + +684 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +685 ((cڡ *�( +�c +))[2], ((const *) (src))[3], \ + +686 ((cڡ *�( +�c +))[4], '\0' } }), \ + +687 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR7 +) \ + +688 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +689 ((cڡ *�( +�c +))[2], ((const *) (src))[3], \ + +690 ((cڡ *�( +�c +))[4], ((const *) (src))[5], \ + +692 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR8 +) \ + +693 { { ((cڡ *�( +�c +))[0], ((const *) (src))[1], \ + +694 ((cڡ *�( +�c +))[2], ((const *) (src))[3], \ + +695 ((cڡ *�( +�c +))[4], ((const *) (src))[5], \ + +696 ((cڡ *�( +�c +))[6], '\0' } }) + + ) + +698 +__STRING_INLINE + * +__�p�y_sm�l + (*, +__STRING2_COPY_ARR2 +, + +699 +__STRING2_COPY_ARR3 +, + +700 +__STRING2_COPY_ARR4 +, + +701 +__STRING2_COPY_ARR5 +, + +702 +__STRING2_COPY_ARR6 +, + +703 +__STRING2_COPY_ARR7 +, + +704 +__STRING2_COPY_ARR8 +, +size_t +); + +705 +__STRING_INLINE + * + +706 + $__�p�y_sm�l + (* +__de� +, + +707 +__STRING2_COPY_ARR2 + +__�c2 +, +__STRING2_COPY_ARR3 + +__�c3 +, + +708 +__STRING2_COPY_ARR4 + +__�c4 +, +__STRING2_COPY_ARR5 + +__�c5 +, + +709 +__STRING2_COPY_ARR6 + +__�c6 +, +__STRING2_COPY_ARR7 + +__�c7 +, + +710 +__STRING2_COPY_ARR8 + +__�c8 +, +size_t + +__��� +) + +713 +__c +; + +714 +__STRING2_COPY_ARR2 + +__s�2 +; + +715 +__STRING2_COPY_ARR3 + +__s�3 +; + +716 +__STRING2_COPY_ARR4 + +__s�4 +; + +717 +__STRING2_COPY_ARR5 + +__s�5 +; + +718 +__STRING2_COPY_ARR6 + +__s�6 +; + +719 +__STRING2_COPY_ARR7 + +__s�7 +; + +720 +__STRING2_COPY_ARR8 + +__s�8 +; + +721 } * +__u + = (*� +__de� +; + +722 (� +__��� +) + +725 +__u +-> +__c + = '\0'; + +728 +__ex�nsi�__ + +__u +-> +__s�2 + = +__�c2 +; + +731 +__ex�nsi�__ + +__u +-> +__s�3 + = +__�c3 +; + +734 +__ex�nsi�__ + +__u +-> +__s�4 + = +__�c4 +; + +737 +__ex�nsi�__ + +__u +-> +__s�5 + = +__�c5 +; + +740 +__ex�nsi�__ + +__u +-> +__s�6 + = +__�c6 +; + +743 +__ex�nsi�__ + +__u +-> +__s�7 + = +__�c7 +; + +746 +__ex�nsi�__ + +__u +-> +__s�8 + = +__�c8 +; + +749 +__de� + + +__��� + - 1; + +750 + } +} + +758 #i�de� +_HAVE_STRING_ARCH_���y + + +759 #i� +__GNUC_PREREQ + (3, 2) + +760 + #���y +( +de� +, +�c +, +n +� + `__bu�t�_���y + (de�, src,�) + + ) + +762 + #���y +( +de� +, +�c +, +n +) \ + +763 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +�&& __bu�t�_cڡ�t_�( +n +) \ + +764 ? ( + `��� + ( +�c +�+ 1 >�(( +size_t +�( +n +)) \ + +765 ? (*� + `mem�y + ( +de� +, +�c +, +n +) \ + +766 : + `���y + ( +de� +, +�c +, +n +)) \ + +767 : + `���y + ( +de� +, +�c +, +n +))) + + ) + +773 #i�de� +_HAVE_STRING_ARCH_���t + + +774 #ifde� +_USE_STRING_ARCH_�rchr + + +775 + #���t +( +de� +, +�c +, +n +) \ + +776 ( + `__ex�nsi�__ + ({ * +__de� + = ( +de� +); \ + +777 + `__bu�t�_cڡ�t_p + ( +�c +�&& __bu�t�_cڡ�t_�( +n +) \ + +778 ? ( + `��� + ( +�c +�< (( +size_t +�( +n +)) \ + +779 ? + `�r�t + ( +__de� +, +�c +) \ + +780 : (*((*� + `__memp�y + ( + `�rchr + ( +__de� +, '\0'), \ + +781 +�c +, +n +)��'\0', +__de� +)) \ + +782 : + `���t + ( +de� +, +�c +, +n +); })) + + ) + +783 #�i� +__GNUC_PREREQ + (3, 2) + +784 + #���t +( +de� +, +�c +, +n +� + `__bu�t�_���t + (de�, src,�) + + ) + +786 + #���t +( +de� +, +�c +, +n +) \ + +787 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +�&& __bu�t�_cڡ�t_�( +n +) \ + +788 ? ( + `��� + ( +�c +�< (( +size_t +�( +n +)) \ + +789 ? + `�r�t + ( +de� +, +�c +) \ + +790 : + `���t + ( +de� +, +�c +, +n +)) \ + +791 : + `���t + ( +de� +, +�c +, +n +))) + + ) + +797 #i�de� +_HAVE_STRING_ARCH_�rcmp + + +798 #i� +__GNUC_PREREQ + (3, 2) + +799 + #�rcmp +( +s1 +, +s2 +) \ + +800 +__ex�nsi�__ + \ + +801 ({ +size_t + +__s1_�n +, +__s2_�n +; \ + +802 ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& __bu�t�_cڡ�t_�( +s2 +) \ + +803 && ( +__s1_�n + = + `__bu�t�_��� + ( +s1 +), +__s2_�n + = __bu�t�_��� ( +s2 +), \ + +804 (! + `__�r�g2_1b�r_p + ( +s1 +�|| +__s1_�n + >= 4) \ + +805 && (! + `__�r�g2_1b�r_p + ( +s2 +�|| +__s2_�n + >= 4)) \ + +806 ? + `__bu�t�_�rcmp + ( +s1 +, +s2 +) \ + +807 : ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& + `__�r�g2_1b�r_p + (s1) \ + +808 && ( +__s1_�n + = + `__bu�t�_��� + ( +s1 +), __s1_len < 4) \ + +809 ? ( + `__bu�t�_cڡ�t_p + ( +s2 +�&& + `__�r�g2_1b�r_p + (s2) \ + +810 ? + `__bu�t�_�rcmp + ( +s1 +, +s2 +) \ + +811 : + `__�rcmp_cg + ( +s1 +, +s2 +, +__s1_�n +)) \ + +812 : ( + `__bu�t�_cڡ�t_p + ( +s2 +�&& + `__�r�g2_1b�r_p + (s2) \ + +813 && ( +__s2_�n + = + `__bu�t�_��� + ( +s2 +), __s2_len < 4) \ + +814 ? ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& + `__�r�g2_1b�r_p + (s1) \ + +815 ? + `__bu�t�_�rcmp + ( +s1 +, +s2 +) \ + +816 : + `__�rcmp_gc + ( +s1 +, +s2 +, +__s2_�n +)) \ + +817 : + `__bu�t�_�rcmp + ( +s1 +, +s2 +)))); }) + + ) + +819 + #�rcmp +( +s1 +, +s2 +) \ + +820 +__ex�nsi�__ + \ + +821 ({ +size_t + +__s1_�n +, +__s2_�n +; \ + +822 ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& __bu�t�_cڡ�t_�( +s2 +) \ + +823 && ( +__s1_�n + = + `��� + ( +s1 +), +__s2_�n + = s���( +s2 +), \ + +824 (! + `__�r�g2_1b�r_p + ( +s1 +�|| +__s1_�n + >= 4) \ + +825 && (! + `__�r�g2_1b�r_p + ( +s2 +�|| +__s2_�n + >= 4)) \ + +826 ? + `memcmp + ((cڡ *�( +s1 +), (cڡ *�( +s2 +), \ + +827 ( +__s1_�n + < +__s2_�n + ? __s1_len : __s2_len) + 1) \ + +828 : ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& + `__�r�g2_1b�r_p + (s1) \ + +829 && ( +__s1_�n + = + `��� + ( +s1 +), __s1_len < 4) \ + +830 ? ( + `__bu�t�_cڡ�t_p + ( +s2 +�&& + `__�r�g2_1b�r_p + (s2) \ + +831 ? + `__�rcmp_cc + ( +s1 +, +s2 +, +__s1_�n +) \ + +832 : + `__�rcmp_cg + ( +s1 +, +s2 +, +__s1_�n +)) \ + +833 : ( + `__bu�t�_cڡ�t_p + ( +s2 +�&& + `__�r�g2_1b�r_p + (s2) \ + +834 && ( +__s2_�n + = + `��� + ( +s2 +), __s2_len < 4) \ + +835 ? ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& + `__�r�g2_1b�r_p + (s1) \ + +836 ? + `__�rcmp_cc + ( +s1 +, +s2 +, +__s2_�n +) \ + +837 : + `__�rcmp_gc + ( +s1 +, +s2 +, +__s2_�n +)) \ + +838 : + `�rcmp + ( +s1 +, +s2 +)))); }) + + ) + +841 + #__�rcmp_cc +( +s1 +, +s2 +, +l +) \ + +842 ( + `__ex�nsi�__ + ({ +__�su� + = \ + +843 (((cڡ *�(cڡ *�( +s1 +))[0] \ + +844 - ((cڡ *�(cڡ *)( +s2 +))[0]); \ + +845 i�( +l + > 0 && +__�su� + == 0) \ + +847 +__�su� + = (((const *) \ + +848 (cڡ *�( +s1 +))[1] \ + +850 (cڡ *�( +s2 +))[1]); \ + +851 i�( +l + > 1 && +__�su� + == 0) \ + +853 +__�su� + = \ + +855 (cڡ *�( +s1 +))[2] \ + +857 (cڡ *�( +s2 +))[2]); \ + +858 i�( +l + > 2 && +__�su� + == 0) \ + +859 +__�su� + = \ + +861 (cڡ *�( +s1 +))[3] \ + +863 (cڡ *�( +s2 +))[3]); \ + +866 +__�su� +; })) + + ) + +868 + #__�rcmp_cg +( +s1 +, +s2 +, +l1 +) \ + +869 ( + `__ex�nsi�__ + ({ cڡ * +__s2 + = \ + +870 (cڡ *�(cڡ *�( +s2 +); \ + +871 +__�su� + = \ + +872 (((cڡ *�(cڡ *�( +s1 +))[0] \ + +873 - +__s2 +[0]); \ + +874 i�( +l1 + > 0 && +__�su� + == 0) \ + +876 +__�su� + = (((const *) \ + +877 (cڡ *�( +s1 +))[1] - +__s2 +[1]); \ + +878 i�( +l1 + > 1 && +__�su� + == 0) \ + +880 +__�su� + = (((const *) \ + +881 (cڡ *�( +s1 +))[2] - +__s2 +[2]); \ + +882 i�( +l1 + > 2 && +__�su� + == 0) \ + +883 +__�su� + = (((const *) \ + +884 (cڡ *�( +s1 +))[3] \ + +885 - +__s2 +[3]); \ + +888 +__�su� +; })) + + ) + +890 + #__�rcmp_gc +( +s1 +, +s2 +, +l2 +�(- + `__�rcmp_cg + (s2, s1,�2)) + + ) + +895 #i�de� +_HAVE_STRING_ARCH_��cmp + + +896 + #��cmp +( +s1 +, +s2 +, +n +) \ + +897 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +n +) \ + +898 && (( + `__bu�t�_cڡ�t_p + ( +s1 +) \ + +899 && + `��� + ( +s1 +�< (( +size_t +�( +n +))) \ + +900 || ( + `__bu�t�_cڡ�t_p + ( +s2 +) \ + +901 && + `��� + ( +s2 +�< (( +size_t +�( +n +)))) \ + +902 ? + `�rcmp + ( +s1 +, +s2 +�: + `��cmp + (s1, s2, +n +))) + + ) + +908 #i�! +def�ed + +_HAVE_STRING_ARCH_�rc�n + || def�ed +_FORCE_INLINES + + +909 #i�de� +_HAVE_STRING_ARCH_�rc�n + + +910 #i� +__GNUC_PREREQ + (3, 2) + +911 + #�rc�n +( +s +, +�je� +) \ + +912 +__ex�nsi�__ + \ + +913 ({ +__r0 +, +__r1 +, +__r2 +; \ + +914 ( + `__bu�t�_cڡ�t_p + ( +�je� +�&& + `__�r�g2_1b�r_p + (reject) \ + +915 ? (( + `__bu�t�_cڡ�t_p + ( +s +�&& + `__�r�g2_1b�r_p + (s)) \ + +916 ? + `__bu�t�_�rc�n + ( +s +, +�je� +) \ + +917 : (( +__r0 + = ((cڡ *�( +�je� +))[0], __r0 == '\0') \ + +918 ? + `��� + ( +s +) \ + +919 : (( +__r1 + = ((cڡ *�( +�je� +))[1], __r1 == '\0') \ + +920 ? + `__�rc�n_c1 + ( +s +, +__r0 +) \ + +921 : (( +__r2 + = ((cڡ *�( +�je� +))[2], __r2 == '\0') \ + +922 ? + `__�rc�n_c2 + ( +s +, +__r0 +, +__r1 +) \ + +923 : (((cڡ *�( +�je� +))[3] == '\0' \ + +924 ? + `__�rc�n_c3 + ( +s +, +__r0 +, +__r1 +, +__r2 +) \ + +925 : + `__bu�t�_�rc�n + ( +s +, +�je� +)))))) \ + +926 : + `__bu�t�_�rc�n + ( +s +, +�je� +)); }) + + ) + +928 + #�rc�n +( +s +, +�je� +) \ + +929 +__ex�nsi�__ + \ + +930 ({ +__r0 +, +__r1 +, +__r2 +; \ + +931 ( + `__bu�t�_cڡ�t_p + ( +�je� +�&& + `__�r�g2_1b�r_p + (reject) \ + +932 ? (( +__r0 + = ((cڡ *�( +�je� +))[0], __r0 == '\0') \ + +933 ? + `��� + ( +s +) \ + +934 : (( +__r1 + = ((cڡ *�( +�je� +))[1], __r1 == '\0') \ + +935 ? + `__�rc�n_c1 + ( +s +, +__r0 +) \ + +936 : (( +__r2 + = ((cڡ *�( +�je� +))[2], __r2 == '\0') \ + +937 ? + `__�rc�n_c2 + ( +s +, +__r0 +, +__r1 +) \ + +938 : (((cڡ *�( +�je� +))[3] == '\0' \ + +939 ? + `__�rc�n_c3 + ( +s +, +__r0 +, +__r1 +, +__r2 +) \ + +940 : + `�rc�n + ( +s +, +�je� +))))) \ + +941 : + `�rc�n + ( +s +, +�je� +)); }) + + ) + +945 +__STRING_INLINE + +size_t + +__�rc�n_c1 + (cڡ * +__s +, +__�je� +); + +946 +__STRING_INLINE + +size_t + + +947 + $__�rc�n_c1 + (cڡ * +__s +, +__�je� +) + +949 +size_t + +__�su� + = 0; + +950 +__s +[ +__�su� +] !�'\0' && __s[__�su�] !� +__�je� +) + +951 ++ +__�su� +; + +952 +__�su� +; + +953 + } +} + +955 +__STRING_INLINE + +size_t + +__�rc�n_c2 + (cڡ * +__s +, +__�je�1 +, + +956 +__�je�2 +); + +957 +__STRING_INLINE + +size_t + + +958 + $__�rc�n_c2 + (cڡ * +__s +, +__�je�1 +, +__�je�2 +) + +960 +size_t + +__�su� + = 0; + +961 +__s +[ +__�su� +] !�'\0' && __s[__�su�] !� +__�je�1 + + +962 && +__s +[ +__�su� +] !� +__�je�2 +) + +963 ++ +__�su� +; + +964 +__�su� +; + +965 + } +} + +967 +__STRING_INLINE + +size_t + +__�rc�n_c3 + (cڡ * +__s +, +__�je�1 +, + +968 +__�je�2 +, +__�je�3 +); + +969 +__STRING_INLINE + +size_t + + +970 + $__�rc�n_c3 + (cڡ * +__s +, +__�je�1 +, +__�je�2 +, + +971 +__�je�3 +) + +973 +size_t + +__�su� + = 0; + +974 +__s +[ +__�su� +] !�'\0' && __s[__�su�] !� +__�je�1 + + +975 && +__s +[ +__�su� +] !� +__�je�2 + && __s[__�su�] !� +__�je�3 +) + +976 ++ +__�su� +; + +977 +__�su� +; + +978 + } +} + +984 #i�! +def�ed + +_HAVE_STRING_ARCH_�r�n + || def�ed +_FORCE_INLINES + + +985 #i�de� +_HAVE_STRING_ARCH_�r�n + + +986 #i� +__GNUC_PREREQ + (3, 2) + +987 + #�r�n +( +s +, +ac�� +) \ + +988 +__ex�nsi�__ + \ + +989 ({ +__a0 +, +__a1 +, +__a2 +; \ + +990 ( + `__bu�t�_cڡ�t_p + ( +ac�� +�&& + `__�r�g2_1b�r_p + (accept) \ + +991 ? (( + `__bu�t�_cڡ�t_p + ( +s +�&& + `__�r�g2_1b�r_p + (s)) \ + +992 ? + `__bu�t�_�r�n + ( +s +, +ac�� +) \ + +993 : (( +__a0 + = ((cڡ *�( +ac�� +))[0], __a0 == '\0') \ + +994 ? ((�( +s +), ( +size_t +) 0) \ + +995 : (( +__a1 + = ((cڡ *�( +ac�� +))[1], __a1 == '\0') \ + +996 ? + `__�r�n_c1 + ( +s +, +__a0 +) \ + +997 : (( +__a2 + = ((cڡ *�( +ac�� +))[2], __a2 == '\0') \ + +998 ? + `__�r�n_c2 + ( +s +, +__a0 +, +__a1 +) \ + +999 : (((cڡ *�( +ac�� +))[3] == '\0' \ + +1000 ? + `__�r�n_c3 + ( +s +, +__a0 +, +__a1 +, +__a2 +) \ + +1001 : + `__bu�t�_�r�n + ( +s +, +ac�� +)))))) \ + +1002 : + `__bu�t�_�r�n + ( +s +, +ac�� +)); }) + + ) + +1004 + #�r�n +( +s +, +ac�� +) \ + +1005 +__ex�nsi�__ + \ + +1006 ({ +__a0 +, +__a1 +, +__a2 +; \ + +1007 ( + `__bu�t�_cڡ�t_p + ( +ac�� +�&& + `__�r�g2_1b�r_p + (accept) \ + +1008 ? (( +__a0 + = ((cڡ *�( +ac�� +))[0], __a0 == '\0') \ + +1009 ? ((�( +s +), ( +size_t +) 0) \ + +1010 : (( +__a1 + = ((cڡ *�( +ac�� +))[1], __a1 == '\0') \ + +1011 ? + `__�r�n_c1 + ( +s +, +__a0 +) \ + +1012 : (( +__a2 + = ((cڡ *�( +ac�� +))[2], __a2 == '\0') \ + +1013 ? + `__�r�n_c2 + ( +s +, +__a0 +, +__a1 +) \ + +1014 : (((cڡ *�( +ac�� +))[3] == '\0' \ + +1015 ? + `__�r�n_c3 + ( +s +, +__a0 +, +__a1 +, +__a2 +) \ + +1016 : + `�r�n + ( +s +, +ac�� +))))) \ + +1017 : + `�r�n + ( +s +, +ac�� +)); }) + + ) + +1021 +__STRING_INLINE + +size_t + +__�r�n_c1 + (cڡ * +__s +, +__ac�� +); + +1022 +__STRING_INLINE + +size_t + + +1023 + $__�r�n_c1 + (cڡ * +__s +, +__ac�� +) + +1025 +size_t + +__�su� + = 0; + +1027 +__s +[ +__�su� +] =� +__ac�� +) + +1028 ++ +__�su� +; + +1029 +__�su� +; + +1030 + } +} + +1032 +__STRING_INLINE + +size_t + +__�r�n_c2 + (cڡ * +__s +, +__ac��1 +, + +1033 +__ac��2 +); + +1034 +__STRING_INLINE + +size_t + + +1035 + $__�r�n_c2 + (cڡ * +__s +, +__ac��1 +, +__ac��2 +) + +1037 +size_t + +__�su� + = 0; + +1039 +__s +[ +__�su� +] =� +__ac��1 + || __s[__�su�] =� +__ac��2 +) + +1040 ++ +__�su� +; + +1041 +__�su� +; + +1042 + } +} + +1044 +__STRING_INLINE + +size_t + +__�r�n_c3 + (cڡ * +__s +, +__ac��1 +, + +1045 +__ac��2 +, +__ac��3 +); + +1046 +__STRING_INLINE + +size_t + + +1047 + $__�r�n_c3 + (cڡ * +__s +, +__ac��1 +, +__ac��2 +, +__ac��3 +) + +1049 +size_t + +__�su� + = 0; + +1051 +__s +[ +__�su� +] =� +__ac��1 + || __s[__�su�] =� +__ac��2 + + +1052 || +__s +[ +__�su� +] =� +__ac��3 +) + +1053 ++ +__�su� +; + +1054 +__�su� +; + +1055 + } +} + +1060 #i�! +def�ed + +_HAVE_STRING_ARCH_��brk + || def�ed +_FORCE_INLINES + + +1061 #i�de� +_HAVE_STRING_ARCH_��brk + + +1062 #i� +__GNUC_PREREQ + (3, 2) + +1063 + #��brk +( +s +, +ac�� +) \ + +1064 +__ex�nsi�__ + \ + +1065 ({ +__a0 +, +__a1 +, +__a2 +; \ + +1066 ( + `__bu�t�_cڡ�t_p + ( +ac�� +�&& + `__�r�g2_1b�r_p + (accept) \ + +1067 ? (( + `__bu�t�_cڡ�t_p + ( +s +�&& + `__�r�g2_1b�r_p + (s)) \ + +1068 ? + `__bu�t�_��brk + ( +s +, +ac�� +) \ + +1069 : (( +__a0 + = ((cڡ *�( +ac�� +))[0], __a0 == '\0') \ + +1070 ? ((�( +s +), (*� +NULL +) \ + +1071 : (( +__a1 + = ((cڡ *�( +ac�� +))[1], __a1 == '\0') \ + +1072 ? + `__bu�t�_�rchr + ( +s +, +__a0 +) \ + +1073 : (( +__a2 + = ((cڡ *�( +ac�� +))[2], __a2 == '\0') \ + +1074 ? + `__��brk_c2 + ( +s +, +__a0 +, +__a1 +) \ + +1075 : (((cڡ *�( +ac�� +))[3] == '\0' \ + +1076 ? + `__��brk_c3 + ( +s +, +__a0 +, +__a1 +, +__a2 +) \ + +1077 : + `__bu�t�_��brk + ( +s +, +ac�� +)))))) \ + +1078 : + `__bu�t�_��brk + ( +s +, +ac�� +)); }) + + ) + +1080 + #��brk +( +s +, +ac�� +) \ + +1081 +__ex�nsi�__ + \ + +1082 ({ +__a0 +, +__a1 +, +__a2 +; \ + +1083 ( + `__bu�t�_cڡ�t_p + ( +ac�� +�&& + `__�r�g2_1b�r_p + (accept) \ + +1084 ? (( +__a0 + = ((cڡ *�( +ac�� +))[0], __a0 == '\0') \ + +1085 ? ((�( +s +), (*� +NULL +) \ + +1086 : (( +__a1 + = ((cڡ *�( +ac�� +))[1], __a1 == '\0') \ + +1087 ? + `�rchr + ( +s +, +__a0 +) \ + +1088 : (( +__a2 + = ((cڡ *�( +ac�� +))[2], __a2 == '\0') \ + +1089 ? + `__��brk_c2 + ( +s +, +__a0 +, +__a1 +) \ + +1090 : (((cڡ *�( +ac�� +))[3] == '\0' \ + +1091 ? + `__��brk_c3 + ( +s +, +__a0 +, +__a1 +, +__a2 +) \ + +1092 : + `��brk + ( +s +, +ac�� +))))) \ + +1093 : + `��brk + ( +s +, +ac�� +)); }) + + ) + +1097 +__STRING_INLINE + * +__��brk_c2 + (cڡ * +__s +, +__ac��1 +, + +1098 +__ac��2 +); + +1099 +__STRING_INLINE + * + +1100 + $__��brk_c2 + (cڡ * +__s +, +__ac��1 +, +__ac��2 +) + +1103 * +__s + !�'\0' && *__�!� +__ac��1 + && *__�!� +__ac��2 +) + +1104 ++ +__s +; + +1105 * +__s + =�'\0' ? +NULL + : (*�( +size_t +) __s; + +1106 + } +} + +1108 +__STRING_INLINE + * +__��brk_c3 + (cڡ * +__s +, +__ac��1 +, + +1109 +__ac��2 +, +__ac��3 +); + +1110 +__STRING_INLINE + * + +1111 + $__��brk_c3 + (cڡ * +__s +, +__ac��1 +, +__ac��2 +, +__ac��3 +) + +1114 * +__s + !�'\0' && *__�!� +__ac��1 + && *__�!� +__ac��2 + + +1115 && * +__s + !� +__ac��3 +) + +1116 ++ +__s +; + +1117 * +__s + =�'\0' ? +NULL + : (*�( +size_t +) __s; + +1118 + } +} + +1124 #i�! +def�ed + +_HAVE_STRING_ARCH_�r�r + && ! +__GNUC_PREREQ + (2, 97) + +1125 + #�r�r +( +hay�ack +, +�ed� +) \ + +1126 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�ed� +�&& + `__�r�g2_1b�r_p + (needle) \ + +1127 ? (((cڡ *�( +�ed� +))[0] == '\0' \ + +1128 ? (*�( +size_t +�( +hay�ack +) \ + +1129 : (((cڡ *�( +�ed� +))[1] == '\0' \ + +1130 ? + `�rchr + ( +hay�ack +, \ + +1131 ((cڡ *�( +�ed� +))[0]) \ + +1132 : + `�r�r + ( +hay�ack +, +�ed� +))) \ + +1133 : + `�r�r + ( +hay�ack +, +�ed� +))) + + ) + +1137 #i�! +def�ed + +_HAVE_STRING_ARCH_��ok_r + || def�ed +_FORCE_INLINES + + +1138 #i�de� +_HAVE_STRING_ARCH_��ok_r + + +1139 + #__��ok_r +( +s +, +�p +, +�x� +) \ + +1140 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�p +�&& + `__�r�g2_1b�r_p + (sep) \ + +1141 && ((cڡ *�( +�p +))[0] != '\0' \ + +1142 && ((cڡ *�( +�p +))[1] == '\0' \ + +1143 ? + `__��ok_r_1c + ( +s +, ((cڡ *�( +�p +))[0], +�x� +) \ + +1144 : + `__��ok_r + ( +s +, +�p +, +�x� +))) + + ) + +1147 +__STRING_INLINE + * +__��ok_r_1c + (* +__s +, +__�p +, ** +__�x� +); + +1148 +__STRING_INLINE + * + +1149 + $__��ok_r_1c + (* +__s +, +__�p +, ** +__�x� +) + +1151 * +__�su� +; + +1152 i�( +__s + =� +NULL +) + +1153 +__s + = * +__�x� +; + +1154 * +__s + =� +__�p +) + +1155 ++ +__s +; + +1156 +__�su� + = +NULL +; + +1157 i�(* +__s + != '\0') + +1159 +__�su� + = +__s +++; + +1160 * +__s + != '\0') + +1161 i�(* +__s +++ =� +__�p +) + +1163 +__s +[-1] = '\0'; + +1167 * +__�x� + = +__s +; + +1168 +__�su� +; + +1169 + } +} + +1170 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +1171 + #��ok_r +( +s +, +�p +, +�x� +� + `__��ok_r + (s, s�,�ex�) + + ) + +1176 #i�! +def�ed + +_HAVE_STRING_ARCH_�r�p + || def�ed +_FORCE_INLINES + + +1177 #i�de� +_HAVE_STRING_ARCH_�r�p + + +1179 * +__�r�p_g + (** +__�r�gp +, cڡ * +__d�im +); + +1180 + #__�r�p +( +s +, +�je� +) \ + +1181 +__ex�nsi�__ + \ + +1182 ({ +__r0 +, +__r1 +, +__r2 +; \ + +1183 ( + `__bu�t�_cڡ�t_p + ( +�je� +�&& + `__�r�g2_1b�r_p + (reject) \ + +1184 && ( +__r0 + = ((cڡ *�( +�je� +))[0], \ + +1185 ((cڡ *�( +�je� +))[0] != '\0') \ + +1186 ? (( +__r1 + = ((cڡ *�( +�je� +))[1], \ + +1187 ((cڡ *�( +�je� +))[1] == '\0') \ + +1188 ? + `__�r�p_1c + ( +s +, +__r0 +) \ + +1189 : (( +__r2 + = ((cڡ *�( +�je� +))[2], __r2 == '\0') \ + +1190 ? + `__�r�p_2c + ( +s +, +__r0 +, +__r1 +) \ + +1191 : (((cڡ *�( +�je� +))[3] == '\0' \ + +1192 ? + `__�r�p_3c + ( +s +, +__r0 +, +__r1 +, +__r2 +) \ + +1193 : + `__�r�p_g + ( +s +, +�je� +)))) \ + +1194 : + `__�r�p_g + ( +s +, +�je� +)); }) + + ) + +1197 +__STRING_INLINE + * +__�r�p_1c + (** +__s +, +__�je� +); + +1198 +__STRING_INLINE + * + +1199 + $__�r�p_1c + (** +__s +, +__�je� +) + +1201 * +__�tv� + = * +__s +; + +1202 i�( +__�tv� + !� +NULL + && (* +__s + = + `�rchr + (__�tv�, +__�je� +)) != NULL) + +1203 *(* +__s +)++ = '\0'; + +1204 +__�tv� +; + +1205 + } +} + +1207 +__STRING_INLINE + * +__�r�p_2c + (** +__s +, +__�je�1 +, +__�je�2 +); + +1208 +__STRING_INLINE + * + +1209 + $__�r�p_2c + (** +__s +, +__�je�1 +, +__�je�2 +) + +1211 * +__�tv� + = * +__s +; + +1212 i�( +__�tv� + !� +NULL +) + +1214 * +__� + = +__�tv� +; + +1217 i�(* +__� + == '\0') + +1219 +__� + = +NULL +; + +1222 i�(* +__� + =� +__�je�1 + || *__� =� +__�je�2 +) + +1224 * +__� +++ = '\0'; + +1227 ++ +__� +; + +1229 * +__s + = +__� +; + +1231 +__�tv� +; + +1232 + } +} + +1234 +__STRING_INLINE + * +__�r�p_3c + (** +__s +, +__�je�1 +, +__�je�2 +, + +1235 +__�je�3 +); + +1236 +__STRING_INLINE + * + +1237 + $__�r�p_3c + (** +__s +, +__�je�1 +, +__�je�2 +, +__�je�3 +) + +1239 * +__�tv� + = * +__s +; + +1240 i�( +__�tv� + !� +NULL +) + +1242 * +__� + = +__�tv� +; + +1245 i�(* +__� + == '\0') + +1247 +__� + = +NULL +; + +1250 i�(* +__� + =� +__�je�1 + || *__� =� +__�je�2 + || *__� =� +__�je�3 +) + +1252 * +__� +++ = '\0'; + +1255 ++ +__� +; + +1257 * +__s + = +__� +; + +1259 +__�tv� +; + +1260 + } +} + +1261 #ifde� +__USE_BSD + + +1262 + #�r�p +( +s +, +�je� +� + `__�r�p + (s,�eje�) + + ) + +1269 #ifde� +__USE_MISC + + +1271 #i�! +def�ed + +_HAVE_STRING_ARCH_�rdup + || !def�ed +_HAVE_STRING_ARCH_��dup + + +1272 + #__�ed_m�loc_�d_��oc + + + ) + +1273 + ~<�dlib.h +> + +1276 #i�de� +_HAVE_STRING_ARCH_�rdup + + +1278 * + $__�rdup + (cڡ * +__�r�g +� +__THROW + +__��ibu�_m�loc__ +; + +1279 + #__�rdup +( +s +) \ + +1280 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +s +�&& + `__�r�g2_1b�r_p + (s) \ + +1281 ? (((cڡ *�( +s +))[0] == '\0' \ + +1282 ? (*� + `��oc + (( +size_t +) 1, (size_t) 1) \ + +1283 : ({ +size_t + +__�n + = + `��� + ( +s +) + 1; \ + +1284 * +__�tv� + = (*� + `m�loc + ( +__�n +); \ + +1285 i�( +__�tv� + !� +NULL +) \ + +1286 +__�tv� + = (*� + `mem�y + (__�tv�, +s +, +__�n +); \ + +1287 +__�tv� +; + } +})) \ + +1288 : + `__�rdup + ( +s +))) + + ) + +1290 #i� +def�ed + +__USE_SVID + || def�ed +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +1291 + #�rdup +( +s +� + `__�rdup + (s) + + ) + +1295 #i�de� +_HAVE_STRING_ARCH_��dup + + +1297 * + $__��dup + (cڡ * +__�r�g +, +size_t + +__n +) + +1298 +__THROW + +__��ibu�_m�loc__ +; + +1299 + #__��dup +( +s +, +n +) \ + +1300 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +s +�&& + `__�r�g2_1b�r_p + (s) \ + +1301 ? (((cڡ *�( +s +))[0] == '\0' \ + +1302 ? (*� + `��oc + (( +size_t +) 1, (size_t) 1) \ + +1303 : ({ +size_t + +__�n + = + `��� + ( +s +) + 1; \ + +1304 +size_t + +__n + = ( +n +); \ + +1305 * +__�tv� +; \ + +1306 i�( +__n + < +__�n +) \ + +1307 +__�n + = +__n + + 1; \ + +1308 +__�tv� + = (*� + `m�loc + ( +__�n +); \ + +1309 i�( +__�tv� + !� +NULL +) \ + +1311 +__�tv� +[ +__�n + - 1] = '\0'; \ + +1312 +__�tv� + = (*� + `mem�y + (__�tv�, +s +, \ + +1313 +__�n + - 1); \ + +1315 +__�tv� +; + } +})) \ + +1316 : + `__��dup + ( +s +, +n +))) + + ) + +1318 #ifde� +__USE_GNU + + +1319 + #��dup +( +s +, +n +� + `__��dup + (s,�) + + ) + +1325 #i�de� +_FORCE_INLINES + + +1326 #unde� +__STRING_INLINE + + + @/usr/include/bits/string3.h + +18 #i�de� +_STRING_H + + +22 +__w�nde� + ( +__w�n_mem�t_z�o_�n +, + +25 #i�de� +__�lu�lus + + +29 #unde� +mem�y + + +30 #unde� +memmove + + +31 #unde� +mem�t + + +32 #unde� +�r�t + + +33 #unde� +�r�y + + +34 #unde� +���t + + +35 #unde� +���y + + +36 #ifde� +__USE_GNU + + +37 #unde� +memp�y + + +38 #unde� +�p�y + + +40 #ifde� +__USE_BSD + + +41 #unde� +bc�y + + +42 #unde� +bz�o + + +47 +__f�tify_fun�i� + * + +48 +__NTH + ( + $mem�y + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +, + +49 +size_t + +__�n +)) + +51 + `__bu�t�___mem�y_chk + ( +__de� +, +__�c +, +__�n +, + `__bos0 + (__dest)); + +52 + } +} + +54 +__f�tify_fun�i� + * + +55 +__NTH + ( + $memmove + (* +__de� +, cڡ * +__�c +, +size_t + +__�n +)) + +57 + `__bu�t�___memmove_chk + ( +__de� +, +__�c +, +__�n +, + `__bos0 + (__dest)); + +58 + } +} + +60 #ifde� +__USE_GNU + + +61 +__f�tify_fun�i� + * + +62 +__NTH + ( + $memp�y + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +, + +63 +size_t + +__�n +)) + +65 + `__bu�t�___memp�y_chk + ( +__de� +, +__�c +, +__�n +, + `__bos0 + (__dest)); + +66 + } +} + +75 +__f�tify_fun�i� + * + +76 +__NTH + ( + $mem�t + (* +__de� +, +__ch +, +size_t + +__�n +)) + +78 i�( + `__bu�t�_cڡ�t_p + ( +__�n +) && __len == 0 + +79 && (! + `__bu�t�_cڡ�t_p + ( +__ch +) || __ch != 0)) + +81 + `__w�n_mem�t_z�o_�n + (); + +82 +__de� +; + +84 + `__bu�t�___mem�t_chk + ( +__de� +, +__ch +, +__�n +, + `__bos0 + (__dest)); + +85 + } +} + +87 #ifde� +__USE_BSD + + +88 +__f�tify_fun�i� + + +89 +__NTH + ( + $bc�y + (cڡ * +__�c +, * +__de� +, +size_t + +__�n +)) + +91 (� + `__bu�t�___memmove_chk + ( +__de� +, +__�c +, +__�n +, + `__bos0 + (__dest)); + +92 + } +} + +94 +__f�tify_fun�i� + + +95 +__NTH + ( + $bz�o + (* +__de� +, +size_t + +__�n +)) + +97 (� + `__bu�t�___mem�t_chk + ( +__de� +, '\0', +__�n +, + `__bos0 + (__dest)); + +98 + } +} + +101 +__f�tify_fun�i� + * + +102 +__NTH + ( + $�r�y + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +)) + +104 + `__bu�t�___�r�y_chk + ( +__de� +, +__�c +, + `__bos + (__dest)); + +105 + } +} + +107 #ifde� +__USE_GNU + + +108 +__f�tify_fun�i� + * + +109 +__NTH + ( + $�p�y + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +)) + +111 + `__bu�t�___�p�y_chk + ( +__de� +, +__�c +, + `__bos + (__dest)); + +112 + } +} + +116 +__f�tify_fun�i� + * + +117 +__NTH + ( + $���y + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +, + +118 +size_t + +__�n +)) + +120 + `__bu�t�___���y_chk + ( +__de� +, +__�c +, +__�n +, + `__bos + (__dest)); + +121 + } +} + +124 * + $__���y_chk + (* +__de� +, cڡ * +__�c +, +size_t + +__n +, + +125 +size_t + +__de��n +� +__THROW +; + +126 * + `__REDIRECT_NTH + ( +__���y_��s +, (* +__de� +, cڡ * +__�c +, + +127 +size_t + +__n +), +���y +); + +129 +__f�tify_fun�i� + * + +130 + `__NTH + ( + $���y + (* +__de� +, cڡ * +__�c +, +size_t + +__n +)) + +132 i�( + `__bos + ( +__de� +�!�( +size_t +) -1 + +133 && (! + `__bu�t�_cڡ�t_p + ( +__n +�|| __�<� + `__bos + ( +__de� +))) + +134 + `__���y_chk + ( +__de� +, +__�c +, +__n +, + `__bos + (__dest)); + +135 + `__���y_��s + ( +__de� +, +__�c +, +__n +); + +136 + } +} + +139 +__f�tify_fun�i� + * + +140 +__NTH + ( + $�r�t + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +)) + +142 + `__bu�t�___�r�t_chk + ( +__de� +, +__�c +, + `__bos + (__dest)); + +143 + } +} + +146 +__f�tify_fun�i� + * + +147 +__NTH + ( + $���t + (* +__��ri� + +__de� +, cڡ *__��ri� +__�c +, + +148 +size_t + +__�n +)) + +150 + `__bu�t�___���t_chk + ( +__de� +, +__�c +, +__�n +, + `__bos + (__dest)); + +151 + } +} + + @/usr/include/bits/sys_errlist.h + +19 #i�de� +_STDIO_H + + +25 #ifde� +__USE_BSD + + +26 +sys_ü +; + +27 cڡ *cڡ +sys_��i� +[]; + +29 #ifde� +__USE_GNU + + +30 +_sys_ü +; + +31 cڡ *cڡ +_sys_��i� +[]; + + @/usr/include/bits/termios.h + +19 #i�de� +_TERMIOS_H + + +23 + tcc_t +; + +24 + t��d_t +; + +25 + ttc�ag_t +; + +27 + #NCCS + 32 + + ) + +28 + s�rmios + + +30 +tc�ag_t + + mc_i�ag +; + +31 +tc�ag_t + + mc_o�ag +; + +32 +tc�ag_t + + mc_c�ag +; + +33 +tc�ag_t + + mc_l�ag +; + +34 +cc_t + + mc_l�e +; + +35 +cc_t + + mc_cc +[ +NCCS +]; + +36 +��d_t + + mc_i��d +; + +37 +��d_t + + mc_o��d +; + +38 + #_HAVE_STRUCT_TERMIOS_C_ISPEED + 1 + + ) + +39 + #_HAVE_STRUCT_TERMIOS_C_OSPEED + 1 + + ) + +43 + #VINTR + 0 + + ) + +44 + #VQUIT + 1 + + ) + +45 + #VERASE + 2 + + ) + +46 + #VKILL + 3 + + ) + +47 + #VEOF + 4 + + ) + +48 + #VTIME + 5 + + ) + +49 + #VMIN + 6 + + ) + +50 + #VSWTC + 7 + + ) + +51 + #VSTART + 8 + + ) + +52 + #VSTOP + 9 + + ) + +53 + #VSUSP + 10 + + ) + +54 + #VEOL + 11 + + ) + +55 + #VREPRINT + 12 + + ) + +56 + #VDISCARD + 13 + + ) + +57 + #VWERASE + 14 + + ) + +58 + #VLNEXT + 15 + + ) + +59 + #VEOL2 + 16 + + ) + +62 + #IGNBRK + 0000001 + + ) + +63 + #BRKINT + 0000002 + + ) + +64 + #IGNPAR + 0000004 + + ) + +65 + #PARMRK + 0000010 + + ) + +66 + #INPCK + 0000020 + + ) + +67 + #ISTRIP + 0000040 + + ) + +68 + #INLCR + 0000100 + + ) + +69 + #IGNCR + 0000200 + + ) + +70 + #ICRNL + 0000400 + + ) + +71 + #IUCLC + 0001000 + + ) + +72 + #IXON + 0002000 + + ) + +73 + #IXANY + 0004000 + + ) + +74 + #IXOFF + 0010000 + + ) + +75 + #IMAXBEL + 0020000 + + ) + +76 + #IUTF8 + 0040000 + + ) + +79 + #OPOST + 0000001 + + ) + +80 + #OLCUC + 0000002 + + ) + +81 + #ONLCR + 0000004 + + ) + +82 + #OCRNL + 0000010 + + ) + +83 + #ONOCR + 0000020 + + ) + +84 + #ONLRET + 0000040 + + ) + +85 + #OFILL + 0000100 + + ) + +86 + #OFDEL + 0000200 + + ) + +87 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN + + +88 + #NLDLY + 0000400 + + ) + +89 + #NL0 + 0000000 + + ) + +90 + #NL1 + 0000400 + + ) + +91 + #CRDLY + 0003000 + + ) + +92 + #CR0 + 0000000 + + ) + +93 + #CR1 + 0001000 + + ) + +94 + #CR2 + 0002000 + + ) + +95 + #CR3 + 0003000 + + ) + +96 + #TABDLY + 0014000 + + ) + +97 + #TAB0 + 0000000 + + ) + +98 + #TAB1 + 0004000 + + ) + +99 + #TAB2 + 0010000 + + ) + +100 + #TAB3 + 0014000 + + ) + +101 + #BSDLY + 0020000 + + ) + +102 + #BS0 + 0000000 + + ) + +103 + #BS1 + 0020000 + + ) + +104 + #FFDLY + 0100000 + + ) + +105 + #FF0 + 0000000 + + ) + +106 + #FF1 + 0100000 + + ) + +109 + #VTDLY + 0040000 + + ) + +110 + #VT0 + 0000000 + + ) + +111 + #VT1 + 0040000 + + ) + +113 #ifde� +__USE_MISC + + +114 + #XTABS + 0014000 + + ) + +118 #ifde� +__USE_MISC + + +119 + #CBAUD + 0010017 + + ) + +121 + #B0 + 0000000 + + ) + +122 + #B50 + 0000001 + + ) + +123 + #B75 + 0000002 + + ) + +124 + #B110 + 0000003 + + ) + +125 + #B134 + 0000004 + + ) + +126 + #B150 + 0000005 + + ) + +127 + #B200 + 0000006 + + ) + +128 + #B300 + 0000007 + + ) + +129 + #B600 + 0000010 + + ) + +130 + #B1200 + 0000011 + + ) + +131 + #B1800 + 0000012 + + ) + +132 + #B2400 + 0000013 + + ) + +133 + #B4800 + 0000014 + + ) + +134 + #B9600 + 0000015 + + ) + +135 + #B19200 + 0000016 + + ) + +136 + #B38400 + 0000017 + + ) + +137 #ifde� +__USE_MISC + + +138 + #EXTA + +B19200 + + + ) + +139 + #EXTB + +B38400 + + + ) + +141 + #CSIZE + 0000060 + + ) + +142 + #CS5 + 0000000 + + ) + +143 + #CS6 + 0000020 + + ) + +144 + #CS7 + 0000040 + + ) + +145 + #CS8 + 0000060 + + ) + +146 + #CSTOPB + 0000100 + + ) + +147 + #CREAD + 0000200 + + ) + +148 + #PARENB + 0000400 + + ) + +149 + #PARODD + 0001000 + + ) + +150 + #HUPCL + 0002000 + + ) + +151 + #CLOCAL + 0004000 + + ) + +152 #ifde� +__USE_MISC + + +153 + #CBAUDEX + 0010000 + + ) + +155 + #B57600 + 0010001 + + ) + +156 + #B115200 + 0010002 + + ) + +157 + #B230400 + 0010003 + + ) + +158 + #B460800 + 0010004 + + ) + +159 + #B500000 + 0010005 + + ) + +160 + #B576000 + 0010006 + + ) + +161 + #B921600 + 0010007 + + ) + +162 + #B1000000 + 0010010 + + ) + +163 + #B1152000 + 0010011 + + ) + +164 + #B1500000 + 0010012 + + ) + +165 + #B2000000 + 0010013 + + ) + +166 + #B2500000 + 0010014 + + ) + +167 + #B3000000 + 0010015 + + ) + +168 + #B3500000 + 0010016 + + ) + +169 + #B4000000 + 0010017 + + ) + +170 + #__MAX_BAUD + +B4000000 + + + ) + +171 #ifde� +__USE_MISC + + +172 + #CIBAUD + 002003600000 + + ) + +173 + #CMSPAR + 010000000000 + + ) + +174 + #CRTSCTS + 020000000000 + + ) + +178 + #ISIG + 0000001 + + ) + +179 + #ICANON + 0000002 + + ) + +180 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN + + +181 + #XCASE + 0000004 + + ) + +183 + #ECHO + 0000010 + + ) + +184 + #ECHOE + 0000020 + + ) + +185 + #ECHOK + 0000040 + + ) + +186 + #ECHONL + 0000100 + + ) + +187 + #NOFLSH + 0000200 + + ) + +188 + #TOSTOP + 0000400 + + ) + +189 #ifde� +__USE_MISC + + +190 + #ECHOCTL + 0001000 + + ) + +191 + #ECHOPRT + 0002000 + + ) + +192 + #ECHOKE + 0004000 + + ) + +193 + #FLUSHO + 0010000 + + ) + +194 + #PENDIN + 0040000 + + ) + +196 + #IEXTEN + 0100000 + + ) + +197 #ifde� +__USE_BSD + + +198 + #EXTPROC + 0200000 + + ) + +202 + #TCOOFF + 0 + + ) + +203 + #TCOON + 1 + + ) + +204 + #TCIOFF + 2 + + ) + +205 + #TCION + 3 + + ) + +208 + #TCIFLUSH + 0 + + ) + +209 + #TCOFLUSH + 1 + + ) + +210 + #TCIOFLUSH + 2 + + ) + +213 + #TCSANOW + 0 + + ) + +214 + #TCSADRAIN + 1 + + ) + +215 + #TCSAFLUSH + 2 + + ) + +218 + #_IOT_�rmios + \ + +219 + `_IOT + ( + `_IOTS + ( +c�ag_t +), 4, _IOTS ( +cc_t +), +NCCS +, _IOTS ( +��d_t +), 2) + + ) + + @/usr/include/bits/time.h + +23 #i� +def�ed + +__�ed_timev� + || def�ed +__USE_GNU + + +24 #i�de� +_STRUCT_TIMEVAL + + +25 + #_STRUCT_TIMEVAL + 1 + + ) + +26 + ~<b�s/ty�s.h +> + +30 + stimev� + + +32 +__time_t + + mtv_�c +; + +33 +__su�c�ds_t + + mtv_u�c +; + +38 #i�de� +__�ed_timev� + + +39 #i�de� +_BITS_TIME_H + + +40 + #_BITS_TIME_H + 1 + + ) + +48 + #CLOCKS_PER_SEC + 1000000l + + ) + +50 #i�(! +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_POSIX +) \ + +51 && ! +def�ed + + g__USE_XOPEN2K + + +54 + ~<b�s/ty�s.h +> + +55 +__sysc�f + (); + +56 + #CLK_TCK + (( +__�ock_t +� + `__sysc�f + (2)� + + ) + +59 #ifde� +__USE_POSIX199309 + + +61 + #CLOCK_REALTIME + 0 + + ) + +63 + #CLOCK_MONOTONIC + 1 + + ) + +65 + #CLOCK_PROCESS_CPUTIME_ID + 2 + + ) + +67 + #CLOCK_THREAD_CPUTIME_ID + 3 + + ) + +69 + #CLOCK_MONOTONIC_RAW + 4 + + ) + +71 + #CLOCK_REALTIME_COARSE + 5 + + ) + +73 + #CLOCK_MONOTONIC_COARSE + 6 + + ) + +75 + #CLOCK_BOOTTIME + 7 + + ) + +77 + #CLOCK_REALTIME_ALARM + 8 + + ) + +79 + #CLOCK_BOOTTIME_ALARM + 9 + + ) + +82 + #TIMER_ABSTIME + 1 + + ) + +85 #ifde� +__USE_GNU + + +86 + ~<b�s/timex.h +> + +88 +__BEGIN_DECLS + + +91 + $�ock_adjtime + ( +__�ockid_t + +__�ock_id +, +timex + * +__utx +� +__THROW +; + +93 +__END_DECLS + + +99 #unde� +__�ed_timev� + + + @/usr/include/bits/types.h + +23 #i�def +_BITS_TYPES_H + + +24 + #_BITS_TYPES_H + 1 + + ) + +26 + ~<�u�s.h +> + +27 + ~<b�s/w�dsize.h +> + +30 + t__u_ch� +; + +31 + t__u_sh�t +; + +32 + t__u_�t +; + +33 + t__u_l�g +; + +36 sig�d + t__�t8_t +; + +37 + t__u�t8_t +; + +38 sig�d + t__�t16_t +; + +39 + t__u�t16_t +; + +40 sig�d + t__�t32_t +; + +41 + t__u�t32_t +; + +42 #i� +__WORDSIZE + == 64 + +43 sig�d + t__�t64_t +; + +44 + t__u�t64_t +; + +46 +__ex�nsi�__ + sig�d + t__�t64_t +; + +47 +__ex�nsi�__ + + t__u�t64_t +; + +51 #i� +__WORDSIZE + == 64 + +52 + t__quad_t +; + +53 + t__u_quad_t +; + +55 +__ex�nsi�__ + + t__quad_t +; + +56 +__ex�nsi�__ + + t__u_quad_t +; + +89 + #__S16_TYPE + + + ) + +90 + #__U16_TYPE + + + ) + +91 + #__S32_TYPE + + + ) + +92 + #__U32_TYPE + + + ) + +93 + #__SLONGWORD_TYPE + + + ) + +94 + #__ULONGWORD_TYPE + + + ) + +95 #i� +__WORDSIZE + == 32 + +96 + #__SQUAD_TYPE + +__quad_t + + + ) + +97 + #__UQUAD_TYPE + +__u_quad_t + + + ) + +98 + #__SWORD_TYPE + + + ) + +99 + #__UWORD_TYPE + + + ) + +100 + #__SLONG32_TYPE + + + ) + +101 + #__ULONG32_TYPE + + + ) + +102 + #__S64_TYPE + +__quad_t + + + ) + +103 + #__U64_TYPE + +__u_quad_t + + + ) + +106 + #__STD_TYPE + +__ex�nsi�__ + + + ) + +107 #�i� +__WORDSIZE + == 64 + +108 + t__SQUAD_TYPE + + + ) + +109 + t__UQUAD_TYPE + + + ) + +110 + t__SWORD_TYPE + + + ) + +111 + t__UWORD_TYPE + + + ) + +112 + t__SLONG32_TYPE + + + ) + +113 + t__ULONG32_TYPE + + + ) + +114 + t__S64_TYPE + + + ) + +115 + t__U64_TYPE + + + ) + +117 + t__STD_TYPE + + + ) + +121 + ~<b�s/ty�sizes.h +> + +124 +__STD_TYPE + + t__DEV_T_TYPE + + t__dev_t +; + +125 +__STD_TYPE + +__UID_T_TYPE + + g__uid_t +; + +126 +__STD_TYPE + +__GID_T_TYPE + + g__gid_t +; + +127 +__STD_TYPE + +__INO_T_TYPE + + g__�o_t +; + +128 +__STD_TYPE + +__INO64_T_TYPE + + g__�o64_t +; + +129 +__STD_TYPE + +__MODE_T_TYPE + + g__mode_t +; + +130 +__STD_TYPE + +__NLINK_T_TYPE + + g__ƚk_t +; + +131 +__STD_TYPE + +__OFF_T_TYPE + + g__off_t +; + +132 +__STD_TYPE + +__OFF64_T_TYPE + + g__off64_t +; + +133 +__STD_TYPE + +__PID_T_TYPE + + g__pid_t +; + +134 +__STD_TYPE + +__FSID_T_TYPE + + g__fsid_t +; + +135 +__STD_TYPE + +__CLOCK_T_TYPE + + g__�ock_t +; + +136 +__STD_TYPE + +__RLIM_T_TYPE + + g__�im_t +; + +137 +__STD_TYPE + +__RLIM64_T_TYPE + + g__�im64_t +; + +138 +__STD_TYPE + +__ID_T_TYPE + + g__id_t +; + +139 +__STD_TYPE + +__TIME_T_TYPE + + g__time_t +; + +140 +__STD_TYPE + +__USECONDS_T_TYPE + + g__u�c�ds_t +; + +141 +__STD_TYPE + +__SUSECONDS_T_TYPE + + g__su�c�ds_t +; + +143 +__STD_TYPE + +__DADDR_T_TYPE + + g__daddr_t +; + +144 +__STD_TYPE + +__KEY_T_TYPE + + g__key_t +; + +147 +__STD_TYPE + +__CLOCKID_T_TYPE + + g__�ockid_t +; + +150 +__STD_TYPE + +__TIMER_T_TYPE + + g__tim�_t +; + +153 +__STD_TYPE + +__BLKSIZE_T_TYPE + + g__blksize_t +; + +158 +__STD_TYPE + +__BLKCNT_T_TYPE + + g__blk�t_t +; + +159 +__STD_TYPE + +__BLKCNT64_T_TYPE + + g__blk�t64_t +; + +162 +__STD_TYPE + +__FSBLKCNT_T_TYPE + + g__fsblk�t_t +; + +163 +__STD_TYPE + +__FSBLKCNT64_T_TYPE + + g__fsblk�t64_t +; + +166 +__STD_TYPE + +__FSFILCNT_T_TYPE + + g__fsf��t_t +; + +167 +__STD_TYPE + +__FSFILCNT64_T_TYPE + + g__fsf��t64_t +; + +170 +__STD_TYPE + +__FSWORD_T_TYPE + + g__fsw�d_t +; + +172 +__STD_TYPE + +__SSIZE_T_TYPE + + g__ssize_t +; + +175 +__STD_TYPE + +__SYSCALL_SLONG_TYPE + + g__sys��_��g_t +; + +177 +__STD_TYPE + +__SYSCALL_ULONG_TYPE + + g__sys��_ul�g_t +; + +181 +__off64_t + + t__loff_t +; + +182 +__quad_t + * + t__qaddr_t +; + +183 * + t__�ddr_t +; + +186 +__STD_TYPE + +__SWORD_TYPE + + g__���_t +; + +189 +__STD_TYPE + +__U32_TYPE + + g__sock�n_t +; + +192 #unde� +__STD_TYPE + + + @/usr/include/bits/unistd.h + +19 #i�de� +_UNISTD_H + + +23 +ssize_t + + $__�ad_chk + ( +__fd +, * +__buf +, +size_t + +__nby�s +, + +24 +size_t + +__bu� +� +__wur +; + +25 +ssize_t + + `__REDIRECT + ( +__�ad_��s +, ( +__fd +, * +__buf +, + +26 +size_t + +__nby�s +), +�ad +� +__wur +; + +27 +ssize_t + + `__REDIRECT + ( +__�ad_chk_w�n +, + +28 ( +__fd +, * +__buf +, +size_t + +__nby�s +, + +29 +size_t + +__bu� +), +__�ad_chk +) + +30 +__wur + + `__w�ljr + ("read called with bigger�ength�han size of " + +33 +__f�tify_fun�i� + +__wur + +ssize_t + + +34 + $�ad + ( +__fd +, * +__buf +, +size_t + +__nby�s +) + +36 i�( + `__bos0 + ( +__buf +�!�( +size_t +) -1) + +38 i�(! + `__bu�t�_cڡ�t_p + ( +__nby�s +)) + +39 + `__�ad_chk + ( +__fd +, +__buf +, +__nby�s +, + `__bos0 + (__buf)); + +41 i�( +__nby�s + > + `__bos0 + ( +__buf +)) + +42 + `__�ad_chk_w�n + ( +__fd +, +__buf +, +__nby�s +, + `__bos0 + (__buf)); + +44 + `__�ad_��s + ( +__fd +, +__buf +, +__nby�s +); + +45 + } +} + +47 #ifde� +__USE_UNIX98 + + +48 +ssize_t + + $__��d_chk + ( +__fd +, * +__buf +, +size_t + +__nby�s +, + +49 +__off_t + +__off�t +, +size_t + +__bufsize +� +__wur +; + +50 +ssize_t + + $__��d64_chk + ( +__fd +, * +__buf +, +size_t + +__nby�s +, + +51 +__off64_t + +__off�t +, +size_t + +__bufsize +� +__wur +; + +52 +ssize_t + + `__REDIRECT + ( +__��d_��s +, + +53 ( +__fd +, * +__buf +, +size_t + +__nby�s +, + +54 +__off_t + +__off�t +), +��d +� +__wur +; + +55 +ssize_t + + `__REDIRECT + ( +__��d64_��s +, + +56 ( +__fd +, * +__buf +, +size_t + +__nby�s +, + +57 +__off64_t + +__off�t +), +��d64 +� +__wur +; + +58 +ssize_t + + `__REDIRECT + ( +__��d_chk_w�n +, + +59 ( +__fd +, * +__buf +, +size_t + +__nby�s +, + +60 +__off_t + +__off�t +, +size_t + +__bufsize +), +__��d_chk +) + +61 +__wur + + `__w�ljr + ("pread called with bigger�ength�han size of " + +63 +ssize_t + + `__REDIRECT + ( +__��d64_chk_w�n +, + +64 ( +__fd +, * +__buf +, +size_t + +__nby�s +, + +65 +__off64_t + +__off�t +, +size_t + +__bufsize +), + +66 +__��d64_chk +) + +67 +__wur + + `__w�ljr + ("pread64 called with bigger�ength�han size of " + +70 #i�de� +__USE_FILE_OFFSET64 + + +71 +__f�tify_fun�i� + +__wur + +ssize_t + + +72 + $��d + ( +__fd +, * +__buf +, +size_t + +__nby�s +, +__off_t + +__off�t +) + +74 i�( + `__bos0 + ( +__buf +�!�( +size_t +) -1) + +76 i�(! + `__bu�t�_cڡ�t_p + ( +__nby�s +)) + +77 + `__��d_chk + ( +__fd +, +__buf +, +__nby�s +, +__off�t +, + `__bos0 + (__buf)); + +79 i�� +__nby�s + > + `__bos0 + ( +__buf +)) + +80 + `__��d_chk_w�n + ( +__fd +, +__buf +, +__nby�s +, +__off�t +, + +81 + `__bos0 + ( +__buf +)); + +83 + `__��d_��s + ( +__fd +, +__buf +, +__nby�s +, +__off�t +); + +84 + } +} + +86 +__f�tify_fun�i� + +__wur + +ssize_t + + +87 + $��d + ( +__fd +, * +__buf +, +size_t + +__nby�s +, +__off64_t + +__off�t +) + +89 i�( + `__bos0 + ( +__buf +�!�( +size_t +) -1) + +91 i�(! + `__bu�t�_cڡ�t_p + ( +__nby�s +)) + +92 + `__��d64_chk + ( +__fd +, +__buf +, +__nby�s +, +__off�t +, + `__bos0 + (__buf)); + +94 i�� +__nby�s + > + `__bos0 + ( +__buf +)) + +95 + `__��d64_chk_w�n + ( +__fd +, +__buf +, +__nby�s +, +__off�t +, + +96 + `__bos0 + ( +__buf +)); + +99 + `__��d64_��s + ( +__fd +, +__buf +, +__nby�s +, +__off�t +); + +100 + } +} + +103 #ifde� +__USE_LARGEFILE64 + + +104 +__f�tify_fun�i� + +__wur + +ssize_t + + +105 + $��d64 + ( +__fd +, * +__buf +, +size_t + +__nby�s +, +__off64_t + +__off�t +) + +107 i�( + `__bos0 + ( +__buf +�!�( +size_t +) -1) + +109 i�(! + `__bu�t�_cڡ�t_p + ( +__nby�s +)) + +110 + `__��d64_chk + ( +__fd +, +__buf +, +__nby�s +, +__off�t +, + `__bos0 + (__buf)); + +112 i�� +__nby�s + > + `__bos0 + ( +__buf +)) + +113 + `__��d64_chk_w�n + ( +__fd +, +__buf +, +__nby�s +, +__off�t +, + +114 + `__bos0 + ( +__buf +)); + +117 + `__��d64_��s + ( +__fd +, +__buf +, +__nby�s +, +__off�t +); + +118 + } +} + +122 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_XOPEN2K + + +123 +ssize_t + + $__�adl�k_chk + (cڡ * +__��ri� + +__�th +, + +124 * +__��ri� + +__buf +, +size_t + +__�n +, + +125 +size_t + +__bu� +) + +126 +__THROW + + `__n�nu� + ((1, 2)� +__wur +; + +127 +ssize_t + + `__REDIRECT_NTH + ( +__�adl�k_��s +, + +128 (cڡ * +__��ri� + +__�th +, + +129 * +__��ri� + +__buf +, +size_t + +__�n +), +�adl�k +) + +130 + `__n�nu� + ((1, 2)� +__wur +; + +131 +ssize_t + + `__REDIRECT_NTH + ( +__�adl�k_chk_w�n +, + +132 (cڡ * +__��ri� + +__�th +, + +133 * +__��ri� + +__buf +, +size_t + +__�n +, + +134 +size_t + +__bu� +), +__�adl�k_chk +) + +135 + `__n�nu� + ((1, 2)� +__wur + + `__w�ljr + ("readlink called with bigger�ength " + +138 +__f�tify_fun�i� + + `__n�nu� + ((1, 2)� +__wur + +ssize_t + + +139 + `__NTH + ( + $�adl�k + (cڡ * +__��ri� + +__�th +, *__��ri� +__buf +, + +140 +size_t + +__�n +)) + +142 i�( + `__bos + ( +__buf +�!�( +size_t +) -1) + +144 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +145 + `__�adl�k_chk + ( +__�th +, +__buf +, +__�n +, + `__bos + (__buf)); + +147 i�� +__�n + > + `__bos + ( +__buf +)) + +148 + `__�adl�k_chk_w�n + ( +__�th +, +__buf +, +__�n +, + `__bos + (__buf)); + +150 + `__�adl�k_��s + ( +__�th +, +__buf +, +__�n +); + +151 + } +} + +154 #ifde� +__USE_ATFILE + + +155 +ssize_t + + $__�adl�k�_chk + ( +__fd +, cڡ * +__��ri� + +__�th +, + +156 * +__��ri� + +__buf +, +size_t + +__�n +, + +157 +size_t + +__bu� +) + +158 +__THROW + + `__n�nu� + ((2, 3)� +__wur +; + +159 +ssize_t + + `__REDIRECT_NTH + ( +__�adl�k�_��s +, + +160 ( +__fd +, cڡ * +__��ri� + +__�th +, + +161 * +__��ri� + +__buf +, +size_t + +__�n +), + +162 +�adl�k� +) + +163 + `__n�nu� + ((2, 3)� +__wur +; + +164 +ssize_t + + `__REDIRECT_NTH + ( +__�adl�k�_chk_w�n +, + +165 ( +__fd +, cڡ * +__��ri� + +__�th +, + +166 * +__��ri� + +__buf +, +size_t + +__�n +, + +167 +size_t + +__bu� +), +__�adl�k�_chk +) + +168 + `__n�nu� + ((2, 3)� +__wur + + `__w�ljr + ("readlinkat called with bigger " + +172 +__f�tify_fun�i� + + `__n�nu� + ((2, 3)� +__wur + +ssize_t + + +173 + `__NTH + ( + $�adl�k� + ( +__fd +, cڡ * +__��ri� + +__�th +, + +174 * +__��ri� + +__buf +, +size_t + +__�n +)) + +176 i�( + `__bos + ( +__buf +�!�( +size_t +) -1) + +178 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +179 + `__�adl�k�_chk + ( +__fd +, +__�th +, +__buf +, +__�n +, + `__bos + (__buf)); + +181 i�( +__�n + > + `__bos + ( +__buf +)) + +182 + `__�adl�k�_chk_w�n + ( +__fd +, +__�th +, +__buf +, +__�n +, + +183 + `__bos + ( +__buf +)); + +185 + `__�adl�k�_��s + ( +__fd +, +__�th +, +__buf +, +__�n +); + +186 + } +} + +189 * + $__g�cwd_chk + (* +__buf +, +size_t + +__size +, size_� +__bu� +) + +190 +__THROW + +__wur +; + +191 * + `__REDIRECT_NTH + ( +__g�cwd_��s +, + +192 (* +__buf +, +size_t + +__size +), +g�cwd +� +__wur +; + +193 * + `__REDIRECT_NTH + ( +__g�cwd_chk_w�n +, + +194 (* +__buf +, +size_t + +__size +, size_� +__bu� +), + +195 +__g�cwd_chk +) + +196 +__wur + + `__w�ljr + ("getcwd caller with bigger�ength�han size of " + +199 +__f�tify_fun�i� + +__wur + * + +200 + `__NTH + ( + $g�cwd + (* +__buf +, +size_t + +__size +)) + +202 i�( + `__bos + ( +__buf +�!�( +size_t +) -1) + +204 i�(! + `__bu�t�_cڡ�t_p + ( +__size +)) + +205 + `__g�cwd_chk + ( +__buf +, +__size +, + `__bos + (__buf)); + +207 i�( +__size + > + `__bos + ( +__buf +)) + +208 + `__g�cwd_chk_w�n + ( +__buf +, +__size +, + `__bos + (__buf)); + +210 + `__g�cwd_��s + ( +__buf +, +__size +); + +211 + } +} + +213 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +214 * + $__g�wd_chk + (* +__buf +, +size_t + +bu� +) + +215 +__THROW + + `__n�nu� + ((1)� +__wur +; + +216 * + `__REDIRECT_NTH + ( +__g�wd_w�n +, (* +__buf +), +g�wd +) + +217 + `__n�nu� + ((1)� +__wur + + `__w�ljr + ("please use getcwd instead,�s getwd " + +220 +__f�tify_fun�i� + + `__n�nu� + ((1)� +__��ibu�_d����d__ + +__wur + * + +221 + `__NTH + ( + $g�wd + (* +__buf +)) + +223 i�( + `__bos + ( +__buf +�!�( +size_t +) -1) + +224 + `__g�wd_chk + ( +__buf +, + `__bos + (__buf)); + +225 + `__g�wd_w�n + ( +__buf +); + +226 + } +} + +229 +size_t + + $__c�f�r_chk + ( +__�me +, * +__buf +, +size_t + +__�n +, + +230 +size_t + +__bu� +� +__THROW +; + +231 +size_t + + `__REDIRECT_NTH + ( +__c�f�r_��s +, ( +__�me +, * +__buf +, + +232 +size_t + +__�n +), +c�f�r +); + +233 +size_t + + `__REDIRECT_NTH + ( +__c�f�r_chk_w�n +, + +234 ( +__�me +, * +__buf +, +size_t + +__�n +, + +235 +size_t + +__bu� +), +__c�f�r_chk +) + +236 + `__w�ljr + ("confstr called with bigger�ength�han size of destination " + +239 +__f�tify_fun�i� + +size_t + + +240 + `__NTH + ( + $c�f�r + ( +__�me +, * +__buf +, +size_t + +__�n +)) + +242 i�( + `__bos + ( +__buf +�!�( +size_t +) -1) + +244 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +245 + `__c�f�r_chk + ( +__�me +, +__buf +, +__�n +, + `__bos + (__buf)); + +247 i�( + `__bos + ( +__buf +�< +__�n +) + +248 + `__c�f�r_chk_w�n + ( +__�me +, +__buf +, +__�n +, + `__bos + (__buf)); + +250 + `__c�f�r_��s + ( +__�me +, +__buf +, +__�n +); + +251 + } +} + +254 + $__g�groups_chk + ( +__size +, +__gid_t + +__li� +[], +size_t + +__li��n +) + +255 +__THROW + +__wur +; + +256 + `__REDIRECT_NTH + ( +__g�groups_��s +, ( +__size +, +__gid_t + +__li� +[]), + +257 +g�groups +� +__wur +; + +258 + `__REDIRECT_NTH + ( +__g�groups_chk_w�n +, + +259 ( +__size +, +__gid_t + +__li� +[], +size_t + +__li��n +), + +260 +__g�groups_chk +) + +261 +__wur + + `__w�ljr + ("getgroups called with bigger group count�han what " + +264 +__f�tify_fun�i� + + +265 + `__NTH + ( + $g�groups + ( +__size +, +__gid_t + +__li� +[])) + +267 i�( + `__bos + ( +__li� +�!�( +size_t +) -1) + +269 i�(! + `__bu�t�_cڡ�t_p + ( +__size +) || __size < 0) + +270 + `__g�groups_chk + ( +__size +, +__li� +, + `__bos + (__list)); + +272 i�( +__size + * ( +__gid_t +�> + `__bos + ( +__li� +)) + +273 + `__g�groups_chk_w�n + ( +__size +, +__li� +, + `__bos + (__list)); + +275 + `__g�groups_��s + ( +__size +, +__li� +); + +276 + } +} + +279 + $__�y�me_r_chk + ( +__fd +, * +__buf +, +size_t + +__bu� +, + +280 +size_t + +__ėl +� +__THROW + + `__n�nu� + ((2)); + +281 + `__REDIRECT_NTH + ( +__�y�me_r_��s +, ( +__fd +, * +__buf +, + +282 +size_t + +__bu� +), +�y�me_r +) + +283 + `__n�nu� + ((2)); + +284 + `__REDIRECT_NTH + ( +__�y�me_r_chk_w�n +, + +285 ( +__fd +, * +__buf +, +size_t + +__bu� +, + +286 +size_t + +__ėl +), +__�y�me_r_chk +) + +287 + `__n�nu� + ((2)� + `__w�ljr + ("ttyname_r called with bigger buflen�han " + +290 +__f�tify_fun�i� + + +291 + `__NTH + ( + $�y�me_r + ( +__fd +, * +__buf +, +size_t + +__bu� +)) + +293 i�( + `__bos + ( +__buf +�!�( +size_t +) -1) + +295 i�(! + `__bu�t�_cڡ�t_p + ( +__bu� +)) + +296 + `__�y�me_r_chk + ( +__fd +, +__buf +, +__bu� +, + `__bos + (__buf)); + +298 i�( +__bu� + > + `__bos + ( +__buf +)) + +299 + `__�y�me_r_chk_w�n + ( +__fd +, +__buf +, +__bu� +, + `__bos + (__buf)); + +301 + `__�y�me_r_��s + ( +__fd +, +__buf +, +__bu� +); + +302 + } +} + +305 #i� +def�ed + +__USE_REENTRANT + || def�ed +__USE_POSIX199506 + + +306 + $__g�log�_r_chk + (* +__buf +, +size_t + +__bu� +, size_� +__ėl +) + +307 + `__n�nu� + ((1)); + +308 + `__REDIRECT + ( +__g�log�_r_��s +, (* +__buf +, +size_t + +__bu� +), + +309 +g�log�_r +� + `__n�nu� + ((1)); + +310 + `__REDIRECT + ( +__g�log�_r_chk_w�n +, + +311 (* +__buf +, +size_t + +__bu� +, size_� +__ėl +), + +312 +__g�log�_r_chk +) + +313 + `__n�nu� + ((1)� + `__w�ljr + ("getlogin_r called with bigger buflen�han " + +316 +__f�tify_fun�i� + + +317 + $g�log�_r + (* +__buf +, +size_t + +__bu� +) + +319 i�( + `__bos + ( +__buf +�!�( +size_t +) -1) + +321 i�(! + `__bu�t�_cڡ�t_p + ( +__bu� +)) + +322 + `__g�log�_r_chk + ( +__buf +, +__bu� +, + `__bos + (__buf)); + +324 i�( +__bu� + > + `__bos + ( +__buf +)) + +325 + `__g�log�_r_chk_w�n + ( +__buf +, +__bu� +, + `__bos + (__buf)); + +327 + `__g�log�_r_��s + ( +__buf +, +__bu� +); + +328 + } +} + +332 #i� +def�ed + +__USE_BSD + || def�ed +__USE_UNIX98 + + +333 + $__g�ho��me_chk + (* +__buf +, +size_t + +__bu� +, size_� +__ėl +) + +334 +__THROW + + `__n�nu� + ((1)); + +335 + `__REDIRECT_NTH + ( +__g�ho��me_��s +, (* +__buf +, +size_t + +__bu� +), + +336 +g�ho��me +� + `__n�nu� + ((1)); + +337 + `__REDIRECT_NTH + ( +__g�ho��me_chk_w�n +, + +338 (* +__buf +, +size_t + +__bu� +, size_� +__ėl +), + +339 +__g�ho��me_chk +) + +340 + `__n�nu� + ((1)� + `__w�ljr + ("gethostname called with bigger buflen�han " + +343 +__f�tify_fun�i� + + +344 + `__NTH + ( + $g�ho��me + (* +__buf +, +size_t + +__bu� +)) + +346 i�( + `__bos + ( +__buf +�!�( +size_t +) -1) + +348 i�(! + `__bu�t�_cڡ�t_p + ( +__bu� +)) + +349 + `__g�ho��me_chk + ( +__buf +, +__bu� +, + `__bos + (__buf)); + +351 i�( +__bu� + > + `__bos + ( +__buf +)) + +352 + `__g�ho��me_chk_w�n + ( +__buf +, +__bu� +, + `__bos + (__buf)); + +354 + `__g�ho��me_��s + ( +__buf +, +__bu� +); + +355 + } +} + +359 #i� +def�ed + +__USE_BSD + || (def�ed +__USE_XOPEN + && !def�ed +__USE_UNIX98 +) + +360 + $__g�doma��me_chk + (* +__buf +, +size_t + +__bu� +, size_� +__ėl +) + +361 +__THROW + + `__n�nu� + ((1)� +__wur +; + +362 + `__REDIRECT_NTH + ( +__g�doma��me_��s +, (* +__buf +, + +363 +size_t + +__bu� +), + +364 +g�doma��me +� + `__n�nu� + ((1)� +__wur +; + +365 + `__REDIRECT_NTH + ( +__g�doma��me_chk_w�n +, + +366 (* +__buf +, +size_t + +__bu� +, size_� +__ėl +), + +367 +__g�doma��me_chk +) + +368 + `__n�nu� + ((1)� +__wur + + `__w�ljr + ("getdomainname called with bigger " + +372 +__f�tify_fun�i� + + +373 + `__NTH + ( + $g�doma��me + (* +__buf +, +size_t + +__bu� +)) + +375 i�( + `__bos + ( +__buf +�!�( +size_t +) -1) + +377 i�(! + `__bu�t�_cڡ�t_p + ( +__bu� +)) + +378 + `__g�doma��me_chk + ( +__buf +, +__bu� +, + `__bos + (__buf)); + +380 i�( +__bu� + > + `__bos + ( +__buf +)) + +381 + `__g�doma��me_chk_w�n + ( +__buf +, +__bu� +, + `__bos + (__buf)); + +383 + `__g�doma��me_��s + ( +__buf +, +__bu� +); + +384 + } +} + + @/usr/include/bits/waitflags.h + +19 #i�! +def�ed + +_SYS_WAIT_H + && !def�ed +_STDLIB_H + + +25 + #WNOHANG + 1 + + ) + +26 + #WUNTRACED + 2 + + ) + +29 + #WSTOPPED + 2 + + ) + +30 + #WEXITED + 4 + + ) + +31 + #WCONTINUED + 8 + + ) + +32 + #WNOWAIT + 0x01000000 + + ) + +34 + #__WNOTHREAD + 0x20000000 + + ) + +36 + #__WALL + 0x40000000 + + ) + +37 + #__WCLONE + 0x80000000 + + ) + +40 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN + || def�ed +__USE_XOPEN2K8 + + +41 #i�de� +__ENUM_IDTYPE_T + + +42 + #__ENUM_IDTYPE_T + 1 + + ) + +46 #unde� +P_ALL + + +47 #unde� +P_PID + + +48 #unde� +P_PGID + + +52 + mP_ALL +, + +53 + mP_PID +, + +54 + mP_PGID + + +55 } + tidty�_t +; + + @/usr/include/bits/waitstatus.h + +19 #i�! +def�ed + +_SYS_WAIT_H + && !def�ed +_STDLIB_H + + +28 + #__WEXITSTATUS +( +��us +�(((��us�& 0xff00�>> 8) + + ) + +31 + #__WTERMSIG +( +��us +�((��us�& 0x7f) + + ) + +34 + #__WSTOPSIG +( +��us +� + `__WEXITSTATUS +(��us) + + ) + +37 + #__WIFEXITED +( +��us +�( + `__WTERMSIG +(��us�=�0) + + ) + +40 + #__WIFSIGNALED +( +��us +) \ + +41 (((sig�d �((( +��us +�& 0x7f�+ 1�>> 1�> 0) + + ) + +44 + #__WIFSTOPPED +( +��us +�(((��us�& 0xff�=�0x7f) + + ) + +48 #ifde� +WCONTINUED + + +49 + #__WIFCONTINUED +( +��us +�((��us�=� +__W_CONTINUED +) + + ) + +53 + #__WCOREDUMP +( +��us +�((��us�& +__WCOREFLAG +) + + ) + +56 + #__W_EXITCODE +( +�t +, +sig +�(ԑ�<< 8 | (sig)) + + ) + +57 + #__W_STOPCODE +( +sig +�((sig�<< 8 | 0x7f) + + ) + +58 + #__W_CONTINUED + 0xffff + + ) + +59 + #__WCOREFLAG + 0x80 + + ) + +62 #ifdef +__USE_BSD + + +64 + ~<�d�n.h +> + +66 + uwa� + + +68 + mw_��us +; + +71 #if +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +72 + m__w_�rmsig +:7; + +73 + m__w_c�edump +:1; + +74 + m__w_�tcode +:8; + +77 #if +__BYTE_ORDER + =� +__BIG_ENDIAN + + +79 + m__w_�tcode +:8; + +80 + m__w_c�edump +:1; + +81 + m__w_�rmsig +:7; + +83 } + m__wa�_�rm��ed +; + +86 #if +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +87 + m__w_��v� +:8; + +88 + m__w_��sig +:8; + +91 #if +__BYTE_ORDER + =� +__BIG_ENDIAN + + +93 + m__w_��sig +:8; + +94 + m__w_��v� +:8; + +96 } + m__wa�_�ݳd +; + +99 + #w_�rmsig + +__wa�_�rm��ed +. +__w_�rmsig + + + ) + +100 + #w_c�edump + +__wa�_�rm��ed +. +__w_c�edump + + + ) + +101 + #w_�tcode + +__wa�_�rm��ed +. +__w_�tcode + + + ) + +102 + #w_��sig + +__wa�_�ݳd +. +__w_��sig + + + ) + +103 + #w_��v� + +__wa�_�ݳd +. +__w_��v� + + + ) + + @/usr/include/bits/wordsize.h + +3 #i� +def�ed + +__x86_64__ + && !def�ed +__ILP32__ + + +4 + #__WORDSIZE + 64 + + ) + +6 + #__WORDSIZE + 32 + + ) + +9 #ifde� +__x86_64__ + + +10 + #__WORDSIZE_TIME64_COMPAT32 + 1 + + ) + +12 + #__SYSCALL_WORDSIZE + 64 + + ) + + @/usr/include/endian.h + +18 #i�def +_ENDIAN_H + + +19 + #_ENDIAN_H + 1 + + ) + +21 + ~<�u�s.h +> + +31 + #__LITTLE_ENDIAN + 1234 + + ) + +32 + #__BIG_ENDIAN + 4321 + + ) + +33 + #__PDP_ENDIAN + 3412 + + ) + +36 + ~<b�s/�d�n.h +> + +40 #i�de� +__FLOAT_WORD_ORDER + + +41 + #__FLOAT_WORD_ORDER + +__BYTE_ORDER + + + ) + +44 #ifdef +__USE_BSD + + +45 + #LITTLE_ENDIAN + +__LITTLE_ENDIAN + + + ) + +46 + #BIG_ENDIAN + +__BIG_ENDIAN + + + ) + +47 + #PDP_ENDIAN + +__PDP_ENDIAN + + + ) + +48 + #BYTE_ORDER + +__BYTE_ORDER + + + ) + +51 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +52 + #__LONG_LONG_PAIR +( +HI +, +LO +�LO, + ) +HI + +53 #�i� +__BYTE_ORDER + =� +__BIG_ENDIAN + + +54 + #__LONG_LONG_PAIR +( +HI +, +LO +�HI, + ) +LO + +58 #i� +def�ed + +__USE_BSD + && !def�ed +__ASSEMBLER__ + + +60 + ~<b�s/by�sw�.h +> + +62 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +63 + #htobe16 +( +x +� + `__bsw�_16 + (x) + + ) + +64 + #ht�e16 +( +x +�(x) + + ) + +65 + #be16toh +( +x +� + `__bsw�_16 + (x) + + ) + +66 + #�16toh +( +x +�(x) + + ) + +68 + #htobe32 +( +x +� + `__bsw�_32 + (x) + + ) + +69 + #ht�e32 +( +x +�(x) + + ) + +70 + #be32toh +( +x +� + `__bsw�_32 + (x) + + ) + +71 + #�32toh +( +x +�(x) + + ) + +73 + #htobe64 +( +x +� + `__bsw�_64 + (x) + + ) + +74 + #ht�e64 +( +x +�(x) + + ) + +75 + #be64toh +( +x +� + `__bsw�_64 + (x) + + ) + +76 + #�64toh +( +x +�(x) + + ) + +79 + #htobe16 +( +x +�(x) + + ) + +80 + #ht�e16 +( +x +� + `__bsw�_16 + (x) + + ) + +81 + #be16toh +( +x +�(x) + + ) + +82 + #�16toh +( +x +� + `__bsw�_16 + (x) + + ) + +84 + #htobe32 +( +x +�(x) + + ) + +85 + #ht�e32 +( +x +� + `__bsw�_32 + (x) + + ) + +86 + #be32toh +( +x +�(x) + + ) + +87 + #�32toh +( +x +� + `__bsw�_32 + (x) + + ) + +89 + #htobe64 +( +x +�(x) + + ) + +90 + #ht�e64 +( +x +� + `__bsw�_64 + (x) + + ) + +91 + #be64toh +( +x +�(x) + + ) + +92 + #�64toh +( +x +� + `__bsw�_64 + (x) + + ) + + @/usr/include/features.h + +18 #i�def +_FEATURES_H + + +19 + #_FEATURES_H + 1 + + ) + +101 #unde� +__USE_ISOC11 + + +102 #unde� +__USE_ISOC99 + + +103 #unde� +__USE_ISOC95 + + +104 #unde� +__USE_ISOCXX11 + + +105 #unde� +__USE_POSIX + + +106 #unde� +__USE_POSIX2 + + +107 #unde� +__USE_POSIX199309 + + +108 #unde� +__USE_POSIX199506 + + +109 #unde� +__USE_XOPEN + + +110 #unde� +__USE_XOPEN_EXTENDED + + +111 #unde� +__USE_UNIX98 + + +112 #unde� +__USE_XOPEN2K + + +113 #unde� +__USE_XOPEN2KXSI + + +114 #unde� +__USE_XOPEN2K8 + + +115 #unde� +__USE_XOPEN2K8XSI + + +116 #unde� +__USE_LARGEFILE + + +117 #unde� +__USE_LARGEFILE64 + + +118 #unde� +__USE_FILE_OFFSET64 + + +119 #unde� +__USE_BSD + + +120 #unde� +__USE_SVID + + +121 #unde� +__USE_MISC + + +122 #unde� +__USE_ATFILE + + +123 #unde� +__USE_GNU + + +124 #unde� +__USE_REENTRANT + + +125 #unde� +__USE_FORTIFY_LEVEL + + +126 #unde� +__KERNEL_STRICT_NAMES + + +130 #i�de� +_LOOSE_KERNEL_NAMES + + +131 + #__KERNEL_STRICT_NAMES + + + ) + +141 #i� +def�ed + +__GNUC__ + && def�ed +__GNUC_MINOR__ + + +142 + #__GNUC_PREREQ +( +maj +, +m� +) \ + +143 (( +__GNUC__ + << 16�+ +__GNUC_MINOR__ + >�(( +maj +�<< 16�+ ( +m� +)) + + ) + +145 + #__GNUC_PREREQ +( +maj +, +m� +�0 + + ) + +150 #ifde� +_GNU_SOURCE + + +151 #unde� +_ISOC95_SOURCE + + +152 + #_ISOC95_SOURCE + 1 + + ) + +153 #unde� +_ISOC99_SOURCE + + +154 + #_ISOC99_SOURCE + 1 + + ) + +155 #unde� +_ISOC11_SOURCE + + +156 + #_ISOC11_SOURCE + 1 + + ) + +157 #unde� +_POSIX_SOURCE + + +158 + #_POSIX_SOURCE + 1 + + ) + +159 #unde� +_POSIX_C_SOURCE + + +160 + #_POSIX_C_SOURCE + 200809L + + ) + +161 #unde� +_XOPEN_SOURCE + + +162 + #_XOPEN_SOURCE + 700 + + ) + +163 #unde� +_XOPEN_SOURCE_EXTENDED + + +164 + #_XOPEN_SOURCE_EXTENDED + 1 + + ) + +165 #unde� +_LARGEFILE64_SOURCE + + +166 + #_LARGEFILE64_SOURCE + 1 + + ) + +167 #unde� +_DEFAULT_SOURCE + + +168 + #_DEFAULT_SOURCE + 1 + + ) + +169 #unde� +_BSD_SOURCE + + +170 + #_BSD_SOURCE + 1 + + ) + +171 #unde� +_SVID_SOURCE + + +172 + #_SVID_SOURCE + 1 + + ) + +173 #unde� +_ATFILE_SOURCE + + +174 + #_ATFILE_SOURCE + 1 + + ) + +179 #i�( +def�ed + +_DEFAULT_SOURCE + \ + +180 || (! +def�ed + + g__STRICT_ANSI__ + \ + +181 && ! +def�ed + + g_ISOC99_SOURCE + \ + +182 && ! +def�ed + + g_POSIX_SOURCE + && !def�ed + g_POSIX_C_SOURCE + \ + +183 && ! +def�ed + + g_XOPEN_SOURCE + \ + +184 && ! +def�ed + + g_BSD_SOURCE + && !def�ed + g_SVID_SOURCE +)) + +185 #unde� +_DEFAULT_SOURCE + + +186 + #_DEFAULT_SOURCE + 1 + + ) + +187 #unde� +_BSD_SOURCE + + +188 + #_BSD_SOURCE + 1 + + ) + +189 #unde� +_SVID_SOURCE + + +190 + #_SVID_SOURCE + 1 + + ) + +194 #i�( +def�ed + +_ISOC11_SOURCE + \ + +195 || ( +def�ed + + g__STDC_VERSION__ + && __STDC_VERSION__ >= 201112L)) + +196 + #__USE_ISOC11 + 1 + + ) + +200 #i�( +def�ed + +_ISOC99_SOURCE + || def�ed +_ISOC11_SOURCE + \ + +201 || ( +def�ed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L)) + +202 + #__USE_ISOC99 + 1 + + ) + +206 #i�( +def�ed + +_ISOC99_SOURCE + || def�ed +_ISOC11_SOURCE + \ + +207 || ( +def�ed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199409L)) + +208 + #__USE_ISOC95 + 1 + + ) + +215 #i�(( +def�ed + +__�lu�lus + && __cplusplus >= 201103L) \ + +216 || +def�ed + +__GXX_EXPERIMENTAL_CXX0X__ +) + +217 + #__USE_ISOCXX11 + 1 + + ) + +223 #ifde� +_DEFAULT_SOURCE + + +224 #i�! +def�ed + +_POSIX_SOURCE + && !def�ed +_POSIX_C_SOURCE + + +225 + #__USE_POSIX_IMPLICITLY + 1 + + ) + +227 #unde� +_POSIX_SOURCE + + +228 + #_POSIX_SOURCE + 1 + + ) + +229 #unde� +_POSIX_C_SOURCE + + +230 + #_POSIX_C_SOURCE + 200809L + + ) + +232 #i�((! +def�ed + +__STRICT_ANSI__ + || ( +_XOPEN_SOURCE + - 0) >= 500) && \ + +233 ! +def�ed + +_POSIX_SOURCE + && !def�ed +_POSIX_C_SOURCE +) + +234 + #_POSIX_SOURCE + 1 + + ) + +235 #i� +def�ed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 500 + +236 + #_POSIX_C_SOURCE + 2 + + ) + +237 #�i� +def�ed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 600 + +238 + #_POSIX_C_SOURCE + 199506L + + ) + +239 #�i� +def�ed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 700 + +240 + #_POSIX_C_SOURCE + 200112L + + ) + +242 + #_POSIX_C_SOURCE + 200809L + + ) + +244 + #__USE_POSIX_IMPLICITLY + 1 + + ) + +247 #i� +def�ed + +_POSIX_SOURCE + || +_POSIX_C_SOURCE + >�1 || def�ed +_XOPEN_SOURCE + + +248 + #__USE_POSIX + 1 + + ) + +251 #i� +def�ed + +_POSIX_C_SOURCE + && _POSIX_C_SOURCE >�2 || def�ed +_XOPEN_SOURCE + + +252 + #__USE_POSIX2 + 1 + + ) + +255 #i�( +_POSIX_C_SOURCE + - 0) >= 199309L + +256 + #__USE_POSIX199309 + 1 + + ) + +259 #i�( +_POSIX_C_SOURCE + - 0) >= 199506L + +260 + #__USE_POSIX199506 + 1 + + ) + +263 #i�( +_POSIX_C_SOURCE + - 0) >= 200112L + +264 + #__USE_XOPEN2K + 1 + + ) + +265 #unde� +__USE_ISOC95 + + +266 + #__USE_ISOC95 + 1 + + ) + +267 #unde� +__USE_ISOC99 + + +268 + #__USE_ISOC99 + 1 + + ) + +271 #i�( +_POSIX_C_SOURCE + - 0) >= 200809L + +272 + #__USE_XOPEN2K8 + 1 + + ) + +273 #unde� +_ATFILE_SOURCE + + +274 + #_ATFILE_SOURCE + 1 + + ) + +277 #ifdef +_XOPEN_SOURCE + + +278 + #__USE_XOPEN + 1 + + ) + +279 #i�( +_XOPEN_SOURCE + - 0) >= 500 + +280 + #__USE_XOPEN_EXTENDED + 1 + + ) + +281 + #__USE_UNIX98 + 1 + + ) + +282 #unde� +_LARGEFILE_SOURCE + + +283 + #_LARGEFILE_SOURCE + 1 + + ) + +284 #i�( +_XOPEN_SOURCE + - 0) >= 600 + +285 #i�( +_XOPEN_SOURCE + - 0) >= 700 + +286 + #__USE_XOPEN2K8 + 1 + + ) + +287 + #__USE_XOPEN2K8XSI + 1 + + ) + +289 + #__USE_XOPEN2K + 1 + + ) + +290 + #__USE_XOPEN2KXSI + 1 + + ) + +291 #unde� +__USE_ISOC95 + + +292 + #__USE_ISOC95 + 1 + + ) + +293 #unde� +__USE_ISOC99 + + +294 + #__USE_ISOC99 + 1 + + ) + +297 #ifde� +_XOPEN_SOURCE_EXTENDED + + +298 + #__USE_XOPEN_EXTENDED + 1 + + ) + +303 #ifde� +_LARGEFILE_SOURCE + + +304 + #__USE_LARGEFILE + 1 + + ) + +307 #ifde� +_LARGEFILE64_SOURCE + + +308 + #__USE_LARGEFILE64 + 1 + + ) + +311 #i� +def�ed + +_FILE_OFFSET_BITS + && _FILE_OFFSET_BITS == 64 + +312 + #__USE_FILE_OFFSET64 + 1 + + ) + +315 #i� +def�ed + +_BSD_SOURCE + || def�ed +_SVID_SOURCE + + +316 + #__USE_MISC + 1 + + ) + +319 #ifdef +_BSD_SOURCE + + +320 + #__USE_BSD + 1 + + ) + +323 #ifdef +_SVID_SOURCE + + +324 + #__USE_SVID + 1 + + ) + +327 #ifdef +_ATFILE_SOURCE + + +328 + #__USE_ATFILE + 1 + + ) + +331 #ifdef +_GNU_SOURCE + + +332 + #__USE_GNU + 1 + + ) + +335 #i� +def�ed + +_REENTRANT + || def�ed +_THREAD_SAFE + + +336 + #__USE_REENTRANT + 1 + + ) + +339 #i� +def�ed + +_FORTIFY_SOURCE + && _FORTIFY_SOURCE > 0 \ + +340 && +__GNUC_PREREQ + (4, 1�&& +def�ed + + g__OPTIMIZE__ + && __OPTIMIZE__ > 0 + +341 #i� +_FORTIFY_SOURCE + > 1 + +342 + #__USE_FORTIFY_LEVEL + 2 + + ) + +344 + #__USE_FORTIFY_LEVEL + 1 + + ) + +347 + #__USE_FORTIFY_LEVEL + 0 + + ) + +352 + ~<�dc-�edef.h +> + +360 #unde� +__GNU_LIBRARY__ + + +361 + #__GNU_LIBRARY__ + 6 + + ) + +365 + #__GLIBC__ + 2 + + ) + +366 + #__GLIBC_MINOR__ + 19 + + ) + +368 + #__GLIBC_PREREQ +( +maj +, +m� +) \ + +369 (( +__GLIBC__ + << 16�+ +__GLIBC_MINOR__ + >�(( +maj +�<< 16�+ ( +m� +)) + + ) + +372 #i�de� +__ASSEMBLER__ + + +373 #i�de� +_SYS_CDEFS_H + + +374 + ~<sys/cdefs.h +> + +379 #i� +def�ed + +__USE_FILE_OFFSET64 + && !def�ed +__REDIRECT + + +380 + #__USE_LARGEFILE + 1 + + ) + +381 + #__USE_LARGEFILE64 + 1 + + ) + +387 #i� +__GNUC_PREREQ + (2, 7�&& +def�ed + +__OPTIMIZE__ + \ + +388 && ! +def�ed + + g__OPTIMIZE_SIZE__ + && !def�ed + g__NO_INLINE__ + \ + +389 && +def�ed + + g__ex��_�l�e + + +390 + #__USE_EXTERN_INLINES + 1 + + ) + +398 + ~<gnu/�ubs.h +> + + @/usr/include/libio.h + +28 #i�de� +_IO_STDIO_H + + +29 + #_IO_STDIO_H + + + ) + +31 + ~<_G_c�fig.h +> + +33 + #_IO_�os_t + +_G_�os_t + + + ) + +34 + #_IO_�os64_t + +_G_�os64_t + + + ) + +35 + #_IO_size_t + +size_t + + + ) + +36 + #_IO_ssize_t + +__ssize_t + + + ) + +37 + #_IO_off_t + +__off_t + + + ) + +38 + #_IO_off64_t + +__off64_t + + + ) + +39 + #_IO_pid_t + +__pid_t + + + ) + +40 + #_IO_uid_t + +__uid_t + + + ) + +41 + #_IO_ic�v_t + +_G_ic�v_t + + + ) + +42 + #_IO_HAVE_ST_BLKSIZE + +_G_HAVE_ST_BLKSIZE + + + ) + +43 + #_IO_BUFSIZ + +_G_BUFSIZ + + + ) + +44 + #_IO_va_li� + +_G_va_li� + + + ) + +45 + #_IO_w�t_t + +w�t_t + + + ) + +48 + #__�ed___va_li� + + + ) + +49 + ~<�d�g.h +> + +50 #ifde� +__GNUC_VA_LIST + + +51 #unde� +_IO_va_li� + + +52 + #_IO_va_li� + +__gnuc_va_li� + + + ) + +55 #i�de� +__P + + +56 + ~<sys/cdefs.h +> + +59 + #_IO_UNIFIED_JUMPTABLES + 1 + + ) + +61 #i�de� +EOF + + +62 + #EOF + (-1) + + ) + +64 #i�de� +NULL + + +65 #i� +def�ed + +__GNUG__ + && \ + +66 ( + g__GNUC__ + > 2 || (__GNUC__ =�2 && +__GNUC_MINOR__ + >= 8)) + +67 + #NULL + ( +__nu� +) + + ) + +69 #i�! +def�ed +( +__�lu�lus +) + +70 + #NULL + ((*)0) + + ) + +72 + #NULL + (0) + + ) + +77 + #_IOS_INPUT + 1 + + ) + +78 + #_IOS_OUTPUT + 2 + + ) + +79 + #_IOS_ATEND + 4 + + ) + +80 + #_IOS_APPEND + 8 + + ) + +81 + #_IOS_TRUNC + 16 + + ) + +82 + #_IOS_NOCREATE + 32 + + ) + +83 + #_IOS_NOREPLACE + 64 + + ) + +84 + #_IOS_BIN + 128 + + ) + +92 + #_IO_MAGIC + 0xFBAD0000 + + ) + +93 + #_OLD_STDIO_MAGIC + 0xFABC0000 + + ) + +94 + #_IO_MAGIC_MASK + 0xFFFF0000 + + ) + +95 + #_IO_USER_BUF + 1 + + ) + +96 + #_IO_UNBUFFERED + 2 + + ) + +97 + #_IO_NO_READS + 4 + + ) + +98 + #_IO_NO_WRITES + 8 + + ) + +99 + #_IO_EOF_SEEN + 0x10 + + ) + +100 + #_IO_ERR_SEEN + 0x20 + + ) + +101 + #_IO_DELETE_DONT_CLOSE + 0x40 + + ) + +102 + #_IO_LINKED + 0x80 + + ) + +103 + #_IO_IN_BACKUP + 0x100 + + ) + +104 + #_IO_LINE_BUF + 0x200 + + ) + +105 + #_IO_TIED_PUT_GET + 0x400 + + ) + +106 + #_IO_CURRENTLY_PUTTING + 0x800 + + ) + +107 + #_IO_IS_APPENDING + 0x1000 + + ) + +108 + #_IO_IS_FILEBUF + 0x2000 + + ) + +109 + #_IO_BAD_SEEN + 0x4000 + + ) + +110 + #_IO_USER_LOCK + 0x8000 + + ) + +112 + #_IO_FLAGS2_MMAP + 1 + + ) + +113 + #_IO_FLAGS2_NOTCANCEL + 2 + + ) + +114 #ifde� +_LIBC + + +115 + #_IO_FLAGS2_FORTIFY + 4 + + ) + +117 + #_IO_FLAGS2_USER_WBUF + 8 + + ) + +118 #ifde� +_LIBC + + +119 + #_IO_FLAGS2_SCANF_STD + 16 + + ) + +120 + #_IO_FLAGS2_NOCLOSE + 32 + + ) + +121 + #_IO_FLAGS2_CLOEXEC + 64 + + ) + +125 + #_IO_SKIPWS + 01 + + ) + +126 + #_IO_LEFT + 02 + + ) + +127 + #_IO_RIGHT + 04 + + ) + +128 + #_IO_INTERNAL + 010 + + ) + +129 + #_IO_DEC + 020 + + ) + +130 + #_IO_OCT + 040 + + ) + +131 + #_IO_HEX + 0100 + + ) + +132 + #_IO_SHOWBASE + 0200 + + ) + +133 + #_IO_SHOWPOINT + 0400 + + ) + +134 + #_IO_UPPERCASE + 01000 + + ) + +135 + #_IO_SHOWPOS + 02000 + + ) + +136 + #_IO_SCIENTIFIC + 04000 + + ) + +137 + #_IO_FIXED + 010000 + + ) + +138 + #_IO_UNITBUF + 020000 + + ) + +139 + #_IO_STDIO + 040000 + + ) + +140 + #_IO_DONT_CLOSE + 0100000 + + ) + +141 + #_IO_BOOLALPHA + 0200000 + + ) + +144 +_IO_jump_t +; + g_IO_FILE +; + +147 #ifde� +_IO_MTSAFE_IO + + +148 #i� +def�ed + +__GLIBC__ + && __GLIBC__ >= 2 + +149 + ~<b�s/�dio-lock.h +> + +154 + t_IO_lock_t +; + +160 + s_IO_m�k� + { + +161 +_IO_m�k� + * + m_�xt +; + +162 +_IO_FILE + * + m_sbuf +; + +166 + m_pos +; + +168 +�t_��ampos +( +��ampos + +� +�{ + m_�os + = sp; } + +169 +�t_off�t +( +off�t +�{ + m_pos + = off�t; + m_�os + = ( +��ampos +)(-2); } + +170 + mpublic +: + +171 +��amm�k� +( +��ambuf + * +sb +); + +172 ~ +��amm�k� +(); + +173 +�v�g +(�{ + m_�os + == -2; } + +174 +d�� +( +��amm�k� +&); + +175 +d�� +(); + +180 + e__codecvt_�su� + + +182 + m__codecvt_ok +, + +183 + m__codecvt_���l +, + +184 + m__codecvt_�r� +, + +185 + m__codecvt_noc�v + + +188 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +191 + s_IO_codecvt + + +193 (* + m__codecvt_de�r +�( + m_IO_codecvt + *); + +194 +__codecvt_�su� + (* +__codecvt_do_out +�( + m_IO_codecvt + *, + +195 + m__mb��e_t + *, + +196 cڡ + mwch�_t + *, + +197 cڡ + mwch�_t + *, + +198 cڡ + mwch�_t + **, *, + +200 +__codecvt_�su� + (* +__codecvt_do_unshi� +�( + m_IO_codecvt + *, + +201 + m__mb��e_t + *, *, + +203 +__codecvt_�su� + (* +__codecvt_do_� +�( + m_IO_codecvt + *, + +204 + m__mb��e_t + *, + +206 cڡ **, + mwch�_t + *, + +207 + mwch�_t + *, wchar_t **); + +208 (* + m__codecvt_do_�cod�g +�( + m_IO_codecvt + *); + +209 (* + m__codecvt_do_�ways_noc�v +�( + m_IO_codecvt + *); + +210 (* + m__codecvt_do_�ngth +�( + m_IO_codecvt + *, + m__mb��e_t + *, + +211 cڡ *, cڡ *, + m_IO_size_t +); + +212 (* + m__codecvt_do_max_�ngth +�( + m_IO_codecvt + *); + +214 +_IO_ic�v_t + + m__cd_� +; + +215 +_IO_ic�v_t + + m__cd_out +; + +219 + s_IO_wide_d�a + + +221 +wch�_t + * + m_IO_�ad_�r +; + +222 +wch�_t + * + m_IO_�ad_�d +; + +223 +wch�_t + * + m_IO_�ad_ba� +; + +224 +wch�_t + * + m_IO_wr�e_ba� +; + +225 +wch�_t + * + m_IO_wr�e_�r +; + +226 +wch�_t + * + m_IO_wr�e_�d +; + +227 +wch�_t + * + m_IO_buf_ba� +; + +228 +wch�_t + * + m_IO_buf_�d +; + +230 +wch�_t + * + m_IO_�ve_ba� +; + +231 +wch�_t + * + m_IO_backup_ba� +; + +233 +wch�_t + * + m_IO_�ve_�d +; + +235 +__mb��e_t + + m_IO_��e +; + +236 +__mb��e_t + + m_IO_ϡ_��e +; + +237 +_IO_codecvt + + m_codecvt +; + +239 +wch�_t + + m_sh�tbuf +[1]; + +241 cڡ +_IO_jump_t + * + m_wide_v�b� +; + +245 + s_IO_FILE + { + +246 + m_�ags +; + +247 + #_IO_f�e_�ags + +_�ags + + + ) + +251 * + m_IO_�ad_�r +; + +252 * + m_IO_�ad_�d +; + +253 * + m_IO_�ad_ba� +; + +254 * + m_IO_wr�e_ba� +; + +255 * + m_IO_wr�e_�r +; + +256 * + m_IO_wr�e_�d +; + +257 * + m_IO_buf_ba� +; + +258 * + m_IO_buf_�d +; + +260 * + m_IO_�ve_ba� +; + +261 * + m_IO_backup_ba� +; + +262 * + m_IO_�ve_�d +; + +264 +_IO_m�k� + * + m_m�k�s +; + +266 +_IO_FILE + * + m_cha� +; + +268 + m_f��o +; + +270 + m_blksize +; + +272 + m_�ags2 +; + +274 +_IO_off_t + + m_�d_off�t +; + +276 + #__HAVE_COLUMN + + + ) + +278 + m_cur_c�umn +; + +279 sig�d + m_v�b�_off�t +; + +280 + m_sh�tbuf +[1]; + +284 +_IO_lock_t + * + m_lock +; + +285 #ifde� +_IO_USE_OLD_IO_FILE + + +288 + s_IO_FILE_com��e + + +290 +_IO_FILE + + m_f�e +; + +292 #i� +def�ed + +_G_IO_IO_FILE_VERSION + && _G_IO_IO_FILE_VERSION == 0x20001 + +293 +_IO_off64_t + + m_off�t +; + +294 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +296 +_IO_codecvt + * + m_codecvt +; + +297 +_IO_wide_d�a + * + m_wide_d�a +; + +298 +_IO_FILE + * + m_䓻s_li� +; + +299 * + m_䓻s_buf +; + +300 +size_t + + m_䓻s_size +; + +302 * + m__�d1 +; + +303 * + m__�d2 +; + +304 * + m__�d3 +; + +305 * + m__�d4 +; + +306 +size_t + + m__�d5 +; + +308 + m_mode +; + +310 + m_unu�d2 +[15 * (�- 4 * (*�- ( +size_t +)]; + +314 #i�de� +__�lu�lus + + +315 +_IO_FILE + + t_IO_FILE +; + +318 + g_IO_FILE_�us +; + +320 +_IO_FILE_�us + +_IO_2_1_�d�_ +; + +321 +_IO_FILE_�us + +_IO_2_1_�dout_ +; + +322 +_IO_FILE_�us + +_IO_2_1_�d�r_ +; + +323 #i�de� +_LIBC + + +324 + #_IO_�d� + (( +_IO_FILE +*)(& +_IO_2_1_�d�_ +)) + + ) + +325 + #_IO_�dout + (( +_IO_FILE +*)(& +_IO_2_1_�dout_ +)) + + ) + +326 + #_IO_�d�r + (( +_IO_FILE +*)(& +_IO_2_1_�d�r_ +)) + + ) + +328 +_IO_FILE + * +_IO_�d� + +��ibu�_hidd� +; + +329 +_IO_FILE + * +_IO_�dout + +��ibu�_hidd� +; + +330 +_IO_FILE + * +_IO_�d�r + +��ibu�_hidd� +; + +338 +__ssize_t + + t__io_�ad_� + (* + t__cook� +, * + t__buf +, + tsize_t + + t__nby�s +); + +346 +__ssize_t + + t__io_wr�e_� + (* + t__cook� +, cڡ * + t__buf +, + +347 + tsize_t + + t__n +); + +355 + t__io_�ek_� + (* + t__cook� +, + t_IO_off64_t + * + t__pos +, + t__w +); + +358 + t__io_�o�_� + (* + t__cook� +); + +361 #ifde� +_GNU_SOURCE + + +363 +__io_�ad_� + + tcook�_�ad_fun�i�_t +; + +364 +__io_wr�e_� + + tcook�_wr�e_fun�i�_t +; + +365 +__io_�ek_� + + tcook�_�ek_fun�i�_t +; + +366 +__io_�o�_� + + tcook�_�o�_fun�i�_t +; + +371 +__io_�ad_� + * + m�ad +; + +372 +__io_wr�e_� + * + mwr�e +; + +373 +__io_�ek_� + * + m�ek +; + +374 +__io_�o�_� + * + m�o� +; + +375 } + t_IO_cook�_io_fun�i�s_t +; + +376 +_IO_cook�_io_fun�i�s_t + + tcook�_io_fun�i�s_t +; + +378 + g_IO_cook�_f�e +; + +381 +_IO_cook�_�� + ( +_IO_cook�_f�e + * +__cf�e +, +__�ad_wr�e +, + +382 * +__cook� +, +_IO_cook�_io_fun�i�s_t + +__�s +); + +386 #ifde� +__�lu�lus + + +390 +__und��ow + ( +_IO_FILE + *); + +391 +__u�ow + ( +_IO_FILE + *); + +392 +__ov��ow + ( +_IO_FILE + *, ); + +393 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +394 +_IO_w�t_t + +__wund��ow + ( +_IO_FILE + *); + +395 +_IO_w�t_t + +__wu�ow + ( +_IO_FILE + *); + +396 +_IO_w�t_t + +__wov��ow + ( +_IO_FILE + *, _IO_wint_t); + +399 #i� +__GNUC__ + >= 3 + +400 + #_IO_BE +( +ex� +, +�s +� + `__bu�t�_ex�� + (�x�),�es) + + ) + +402 + #_IO_BE +( +ex� +, +�s +��x�) + + ) + +405 + #_IO_g�c_u�ocked +( +_� +) \ + +406 ( + `_IO_BE + (( +_� +)-> +_IO_�ad_�r + >�(_�)-> +_IO_�ad_�d +, 0) \ + +407 ? + `__u�ow + ( +_� +�: *(*�(_�)-> +_IO_�ad_�r +++) + + ) + +408 + #_IO_�ekc_u�ocked +( +_� +) \ + +409 ( + `_IO_BE + (( +_� +)-> +_IO_�ad_�r + >�(_�)-> +_IO_�ad_�d +, 0) \ + +410 && + `__und��ow + ( +_� +�=� +EOF + ? EOF \ + +411 : *(*�( +_� +)-> +_IO_�ad_�r +) + + ) + +412 + #_IO_putc_u�ocked +( +_ch +, +_� +) \ + +413 ( + `_IO_BE + (( +_� +)-> +_IO_wr�e_�r + >�(_�)-> +_IO_wr�e_�d +, 0) \ + +414 ? + `__ov��ow + ( +_� +, (�( +_ch +)) \ + +415 : (�(*( +_� +)-> +_IO_wr�e_�r +++ = ( +_ch +))) + + ) + +417 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +418 + #_IO_g�wc_u�ocked +( +_� +) \ + +419 ( + `_IO_BE + (( +_� +)-> +_wide_d�a + =� +NULL + \ + +420 || (( +_� +)-> +_wide_d�a +-> +_IO_�ad_�r + \ + +421 >�( +_� +)-> +_wide_d�a +-> +_IO_�ad_�d +), 0) \ + +422 ? + `__wu�ow + ( +_� +�: ( +_IO_w�t_t +�*(_�)-> +_wide_d�a +-> +_IO_�ad_�r +++) + + ) + +423 + #_IO_putwc_u�ocked +( +_wch +, +_� +) \ + +424 ( + `_IO_BE + (( +_� +)-> +_wide_d�a + =� +NULL + \ + +425 || (( +_� +)-> +_wide_d�a +-> +_IO_wr�e_�r + \ + +426 >�( +_� +)-> +_wide_d�a +-> +_IO_wr�e_�d +), 0) \ + +427 ? + `__wov��ow + ( +_� +, +_wch +) \ + +428 : ( +_IO_w�t_t +�(*( +_� +)-> +_wide_d�a +-> +_IO_wr�e_�r +++ = ( +_wch +))) + + ) + +431 + #_IO_�of_u�ocked +( +__� +�(((__�)-> +_�ags + & +_IO_EOF_SEEN +�!�0) + + ) + +432 + #_IO_��_u�ocked +( +__� +�(((__�)-> +_�ags + & +_IO_ERR_SEEN +�!�0) + + ) + +434 +_IO_g�c + ( +_IO_FILE + * +__� +); + +435 +_IO_putc + ( +__c +, +_IO_FILE + * +__� +); + +436 +_IO_�of + ( +_IO_FILE + * +__� +� +__THROW +; + +437 +_IO_�� + ( +_IO_FILE + * +__� +� +__THROW +; + +439 +_IO_�ekc_locked + ( +_IO_FILE + * +__� +); + +442 + #_IO_PENDING_OUTPUT_COUNT +( +_� +) \ + +443 (( +_� +)-> +_IO_wr�e_�r + - (_�)-> +_IO_wr�e_ba� +) + + ) + +445 +_IO_�ockf�e + ( +_IO_FILE + *� +__THROW +; + +446 +_IO_fu�ockf�e + ( +_IO_FILE + *� +__THROW +; + +447 +_IO_�rylockf�e + ( +_IO_FILE + *� +__THROW +; + +449 #ifde� +_IO_MTSAFE_IO + + +450 + #_IO_�ekc +( +_� +� + `_IO_�ekc_locked + (_�) + + ) + +451 + #_IO_�ockf�e +( +_� +) \ + +452 i�((( +_� +)-> +_�ags + & +_IO_USER_LOCK +�=�0� + `_IO_�ockf�e + (_�) + + ) + +453 + #_IO_fu�ockf�e +( +_� +) \ + +454 i�((( +_� +)-> +_�ags + & +_IO_USER_LOCK +�=�0� + `_IO_fu�ockf�e + (_�) + + ) + +456 + #_IO_�ekc +( +_� +� + `_IO_�ekc_u�ocked + (_�) + + ) + +457 + #_IO_�ockf�e +( +_� +� + + ) + +458 + #_IO_fu�ockf�e +( +_� +� + + ) + +459 + #_IO_�rylockf�e +( +_� +� + + ) + +460 + #_IO_��nup_�gi�_��t +( +_f� +, +_� +� + + ) + +461 + #_IO_��nup_�gi�_�d +( +_Do� +� + + ) + +464 +_IO_vfs�nf + ( +_IO_FILE + * +__��ri� +, const * __restrict, + +465 +_IO_va_li� +, * +__��ri� +); + +466 +_IO_v�r�tf + ( +_IO_FILE + * +__��ri� +, const *__restrict, + +467 +_IO_va_li� +); + +468 +_IO_ssize_t + +_IO_�dn + ( +_IO_FILE + *, , _IO_ssize_t); + +469 +_IO_size_t + +_IO_sg�n + ( +_IO_FILE + *, *, _IO_size_t); + +471 +_IO_off64_t + +_IO_�ekoff + ( +_IO_FILE + *, _IO_off64_t, , ); + +472 +_IO_off64_t + +_IO_�ekpos + ( +_IO_FILE + *, _IO_off64_t, ); + +474 +_IO_�_backup_�� + ( +_IO_FILE + *� +__THROW +; + +476 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +477 +_IO_w�t_t + +_IO_g�wc + ( +_IO_FILE + * +__� +); + +478 +_IO_w�t_t + +_IO_putwc + ( +wch�_t + +__wc +, +_IO_FILE + * +__� +); + +479 +_IO_fwide + ( +_IO_FILE + * +__� +, +__mode +� +__THROW +; + +480 #i� +__GNUC__ + >= 2 + +483 #i� +def�ed + +_LIBC + && def�ed +SHARED + + +484 + ~<shlib-com�t.h +> + +485 #i� +SHLIB_COMPAT + ( +libc +, +GLIBC_2_0 +, +GLIBC_2_1 +) + +486 + #_IO_fwide_maybe_�com�tib� + \ + +487 ( + `__bu�t�_ex�� + (& +_IO_�d�_u�d + =� +NULL +, 0)) + + ) + +488 cڡ +_IO_�d�_u�d +; + +489 +w�k_ex�� + ( +_IO_�d�_u�d +); + +492 #i�de� +_IO_fwide_maybe_�com�tib� + + +493 + #_IO_fwide_maybe_�com�tib� + (0) + + ) + +497 + #_IO_fwide +( +__� +, +__mode +) \ + +498 ({ +__�su� + = ( +__mode +); \ + +499 i�( +__�su� + < 0 && ! +_IO_fwide_maybe_�com�tib� +) \ + +501 i�(( +__� +)-> +_mode + == 0) \ + +503 ( +__� +)-> +_mode + = -1; \ + +504 +__�su� + = ( +__� +)-> +_mode +; \ + +506 i�( + `__bu�t�_cڡ�t_p + ( +__mode +) && (__mode) == 0) \ + +507 +__�su� + = +_IO_fwide_maybe_�com�tib� + ? -1 : ( +__� +)-> +_mode +; \ + +509 +__�su� + = + `_IO_fwide + ( +__� +, __result); \ + +510 +__�su� +; }) + + ) + +513 +_IO_vfws�nf + ( +_IO_FILE + * +__��ri� +, cڡ +wch�_t + * __restrict, + +514 +_IO_va_li� +, * +__��ri� +); + +515 +_IO_vfw��tf + ( +_IO_FILE + * +__��ri� +, cڡ +wch�_t + *__restrict, + +516 +_IO_va_li� +); + +517 +_IO_ssize_t + +_IO_w�dn + ( +_IO_FILE + *, +w�t_t +, _IO_ssize_t); + +518 +_IO_�_wbackup_�� + ( +_IO_FILE + *� +__THROW +; + +521 #ifde� +__LDBL_COMPAT + + +522 + ~<b�s/libio-ldbl.h +> + +525 #ifde� +__�lu�lus + + + @/usr/include/rpc/netdb.h + +36 #i�de� +_RPC_NETDB_H + + +37 + #_RPC_NETDB_H + 1 + + ) + +39 + ~<�u�s.h +> + +41 + #__�ed_size_t + + + ) + +42 + ~<�ddef.h +> + +44 +__BEGIN_DECLS + + +46 + s��� + + +48 * + mr_�me +; + +49 ** + mr_���s +; + +50 + mr_numb� +; + +53 + $��p�� + ( +__�ayݒ +� +__THROW +; + +54 + $�d��� + (� +__THROW +; + +55 +��� + * + $g��cby�me + (cڡ * +__�me +� +__THROW +; + +56 +��� + * + $g��cbynumb� + ( +__numb� +� +__THROW +; + +57 +��� + * + $g���� + (� +__THROW +; + +59 #ifde� +__USE_MISC + + +60 + $g��cby�me_r + (cڡ * +__�me +, +��� + * +__�su�_buf +, + +61 * +__buf�r +, +size_t + +__bu� +, + +62 +��� + ** +__�su� +� +__THROW +; + +64 + $g��cbynumb�_r + ( +__numb� +, +��� + * +__�su�_buf +, + +65 * +__buf�r +, +size_t + +__bu� +, + +66 +��� + ** +__�su� +� +__THROW +; + +68 + $g����_r + ( +��� + * +__�su�_buf +, * +__buf�r +, + +69 +size_t + +__bu� +, +��� + ** +__�su� +� +__THROW +; + +72 +__END_DECLS + + + @/usr/include/sched.h + +19 #i�def +_SCHED_H + + +20 + #_SCHED_H + 1 + + ) + +22 + ~<�u�s.h +> + +25 + ~<b�s/ty�s.h +> + +27 + #__�ed_size_t + + + ) + +28 + ~<�ddef.h +> + +30 + #__�ed_time_t + + + ) + +31 + #__�ed_time�ec + + + ) + +32 + ~<time.h +> + +34 #i�de� +__pid_t_def�ed + + +35 +__pid_t + + tpid_t +; + +36 + #__pid_t_def�ed + + + ) + +41 + ~<b�s/sched.h +> + +43 + #sched_�iܙy + +__sched_�iܙy + + + ) + +46 +__BEGIN_DECLS + + +49 + $sched_���am + ( +__pid_t + +__pid +, cڡ +sched_��m + * +__��m +) + +50 +__THROW +; + +53 + $sched_g���m + ( +__pid_t + +__pid +, +sched_��m + * +__��m +� +__THROW +; + +56 + $sched_�tschedu�r + ( +__pid_t + +__pid +, +__p�icy +, + +57 cڡ +sched_��m + * +__��m +� +__THROW +; + +60 + $sched_g�schedu�r + ( +__pid_t + +__pid +� +__THROW +; + +63 + $sched_y�ld + (� +__THROW +; + +66 + $sched_g�_�iܙy_max + ( +__�gܙhm +� +__THROW +; + +69 + $sched_g�_�iܙy_m� + ( +__�gܙhm +� +__THROW +; + +72 + $sched_�_g�_��rv� + ( +__pid_t + +__pid +, +time�ec + * +__t +� +__THROW +; + +75 #ifde� +__USE_GNU + + +77 + #CPU_SETSIZE + +__CPU_SETSIZE + + + ) + +78 + #CPU_SET +( +�u +, +�u�� +� + `__CPU_SET_S + (�u, ( +�u_�t_t +), cpu��) + + ) + +79 + #CPU_CLR +( +�u +, +�u�� +� + `__CPU_CLR_S + (�u, ( +�u_�t_t +), cpu��) + + ) + +80 + #CPU_ISSET +( +�u +, +�u�� +� + `__CPU_ISSET_S + (�u, ( +�u_�t_t +), \ + +81 +�u�� +) + + ) + +82 + #CPU_ZERO +( +�u�� +� + `__CPU_ZERO_S + ( ( +�u_�t_t +), cpu��) + + ) + +83 + #CPU_COUNT +( +�u�� +� + `__CPU_COUNT_S + ( ( +�u_�t_t +), cpu��) + + ) + +85 + #CPU_SET_S +( +�u +, +�tsize +, +�u�� +� + `__CPU_SET_S + (�u, s�size, cpu��) + + ) + +86 + #CPU_CLR_S +( +�u +, +�tsize +, +�u�� +� + `__CPU_CLR_S + (�u, s�size, cpu��) + + ) + +87 + #CPU_ISSET_S +( +�u +, +�tsize +, +�u�� +� + `__CPU_ISSET_S + (cpu, setsize, \ + +88 +�u�� +) + + ) + +89 + #CPU_ZERO_S +( +�tsize +, +�u�� +� + `__CPU_ZERO_S + (�tsize, cpu��) + + ) + +90 + #CPU_COUNT_S +( +�tsize +, +�u�� +� + `__CPU_COUNT_S + (�tsize, cpu��) + + ) + +92 + #CPU_EQUAL +( +�u��1 +, +�u��2 +) \ + +93 + `__CPU_EQUAL_S + ( ( +�u_�t_t +), +�u��1 +, +�u��2 +) + + ) + +94 + #CPU_EQUAL_S +( +�tsize +, +�u��1 +, +�u��2 +) \ + +95 + `__CPU_EQUAL_S + ( +�tsize +, +�u��1 +, +�u��2 +) + + ) + +97 + #CPU_AND +( +de��t +, +�c�t1 +, +�c�t2 +) \ + +98 + `__CPU_OP_S + ( ( +�u_�t_t +), +de��t +, +�c�t1 +, +�c�t2 +, &) + + ) + +99 + #CPU_OR +( +de��t +, +�c�t1 +, +�c�t2 +) \ + +100 + `__CPU_OP_S + ( ( +�u_�t_t +), +de��t +, +�c�t1 +, +�c�t2 +, |) + + ) + +101 + #CPU_XOR +( +de��t +, +�c�t1 +, +�c�t2 +) \ + +102 + `__CPU_OP_S + ( ( +�u_�t_t +), +de��t +, +�c�t1 +, +�c�t2 +, ^) + + ) + +103 + #CPU_AND_S +( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +) \ + +104 + `__CPU_OP_S + ( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +, &) + + ) + +105 + #CPU_OR_S +( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +) \ + +106 + `__CPU_OP_S + ( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +, |) + + ) + +107 + #CPU_XOR_S +( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +) \ + +108 + `__CPU_OP_S + ( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +, ^) + + ) + +110 + #CPU_ALLOC_SIZE +( +cou� +� + `__CPU_ALLOC_SIZE + (cou�) + + ) + +111 + #CPU_ALLOC +( +cou� +� + `__CPU_ALLOC + (cou�) + + ) + +112 + #CPU_FREE +( +�u�t +� + `__CPU_FREE + (�u�t) + + ) + +116 + $sched_��ff��y + ( +__pid_t + +__pid +, +size_t + +__�u�tsize +, + +117 cڡ +�u_�t_t + * +__�u�t +� +__THROW +; + +120 + $sched_g�aff��y + ( +__pid_t + +__pid +, +size_t + +__�u�tsize +, + +121 +�u_�t_t + * +__�u�t +� +__THROW +; + +124 +__END_DECLS + + + @/usr/include/stdint.h + +22 #i�de� +_STDINT_H + + +23 + #_STDINT_H + 1 + + ) + +25 + ~<�u�s.h +> + +26 + ~<b�s/wch�.h +> + +27 + ~<b�s/w�dsize.h +> + +34 #i�de� +__�t8_t_def�ed + + +35 + #__�t8_t_def�ed + + + ) + +36 sig�d + t�t8_t +; + +37 + t�t16_t +; + +38 + t�t32_t +; + +39 #i� +__WORDSIZE + == 64 + +40 + t�t64_t +; + +42 +__ex�nsi�__ + + +43 + t�t64_t +; + +48 + tu�t8_t +; + +49 + tu�t16_t +; + +50 #i�de� +__u�t32_t_def�ed + + +51 + tu�t32_t +; + +52 + #__u�t32_t_def�ed + + + ) + +54 #i� +__WORDSIZE + == 64 + +55 + tu�t64_t +; + +57 +__ex�nsi�__ + + +58 + tu�t64_t +; + +65 sig�d + t�t_�a�8_t +; + +66 + t�t_�a�16_t +; + +67 + t�t_�a�32_t +; + +68 #i� +__WORDSIZE + == 64 + +69 + t�t_�a�64_t +; + +71 +__ex�nsi�__ + + +72 + t�t_�a�64_t +; + +76 + tu�t_�a�8_t +; + +77 + tu�t_�a�16_t +; + +78 + tu�t_�a�32_t +; + +79 #i� +__WORDSIZE + == 64 + +80 + tu�t_�a�64_t +; + +82 +__ex�nsi�__ + + +83 + tu�t_�a�64_t +; + +90 sig�d + t�t_�8_t +; + +91 #i� +__WORDSIZE + == 64 + +92 + t�t_�16_t +; + +93 + t�t_�32_t +; + +94 + t�t_�64_t +; + +96 + t�t_�16_t +; + +97 + t�t_�32_t +; + +98 +__ex�nsi�__ + + +99 + t�t_�64_t +; + +103 + tu�t_�8_t +; + +104 #i� +__WORDSIZE + == 64 + +105 + tu�t_�16_t +; + +106 + tu�t_�32_t +; + +107 + tu�t_�64_t +; + +109 + tu�t_�16_t +; + +110 + tu�t_�32_t +; + +111 +__ex�nsi�__ + + +112 + tu�t_�64_t +; + +117 #i� +__WORDSIZE + == 64 + +118 #i�de� +__���_t_def�ed + + +119 + t���_t +; + +120 + #__���_t_def�ed + + + ) + +122 + tu���_t +; + +124 #i�de� +__���_t_def�ed + + +125 + t���_t +; + +126 + #__���_t_def�ed + + + ) + +128 + tu���_t +; + +133 #i� +__WORDSIZE + == 64 + +134 + t�tmax_t +; + +135 + tu�tmax_t +; + +137 +__ex�nsi�__ + + +138 + t�tmax_t +; + +139 +__ex�nsi�__ + + +140 + tu�tmax_t +; + +144 #i� +__WORDSIZE + == 64 + +145 + #__INT64_C +( +c +��## +L + + + ) + +146 + #__UINT64_C +( +c +��## +UL + + + ) + +148 + #__INT64_C +( +c +��## +LL + + + ) + +149 + #__UINT64_C +( +c +��## +ULL + + + ) + +155 + #INT8_MIN + (-128) + + ) + +156 + #INT16_MIN + (-32767-1) + + ) + +157 + #INT32_MIN + (-2147483647-1) + + ) + +158 + #INT64_MIN + (- + `__INT64_C +(9223372036854775807)-1) + + ) + +160 + #INT8_MAX + (127) + + ) + +161 + #INT16_MAX + (32767) + + ) + +162 + #INT32_MAX + (2147483647) + + ) + +163 + #INT64_MAX + ( + `__INT64_C +(9223372036854775807)) + + ) + +166 + #UINT8_MAX + (255) + + ) + +167 + #UINT16_MAX + (65535) + + ) + +168 + #UINT32_MAX + (4294967295U) + + ) + +169 + #UINT64_MAX + ( + `__UINT64_C +(18446744073709551615)) + + ) + +173 + #INT_LEAST8_MIN + (-128) + + ) + +174 + #INT_LEAST16_MIN + (-32767-1) + + ) + +175 + #INT_LEAST32_MIN + (-2147483647-1) + + ) + +176 + #INT_LEAST64_MIN + (- + `__INT64_C +(9223372036854775807)-1) + + ) + +178 + #INT_LEAST8_MAX + (127) + + ) + +179 + #INT_LEAST16_MAX + (32767) + + ) + +180 + #INT_LEAST32_MAX + (2147483647) + + ) + +181 + #INT_LEAST64_MAX + ( + `__INT64_C +(9223372036854775807)) + + ) + +184 + #UINT_LEAST8_MAX + (255) + + ) + +185 + #UINT_LEAST16_MAX + (65535) + + ) + +186 + #UINT_LEAST32_MAX + (4294967295U) + + ) + +187 + #UINT_LEAST64_MAX + ( + `__UINT64_C +(18446744073709551615)) + + ) + +191 + #INT_FAST8_MIN + (-128) + + ) + +192 #i� +__WORDSIZE + == 64 + +193 + #INT_FAST16_MIN + (-9223372036854775807L-1) + + ) + +194 + #INT_FAST32_MIN + (-9223372036854775807L-1) + + ) + +196 + #INT_FAST16_MIN + (-2147483647-1) + + ) + +197 + #INT_FAST32_MIN + (-2147483647-1) + + ) + +199 + #INT_FAST64_MIN + (- + `__INT64_C +(9223372036854775807)-1) + + ) + +201 + #INT_FAST8_MAX + (127) + + ) + +202 #i� +__WORDSIZE + == 64 + +203 + #INT_FAST16_MAX + (9223372036854775807L) + + ) + +204 + #INT_FAST32_MAX + (9223372036854775807L) + + ) + +206 + #INT_FAST16_MAX + (2147483647) + + ) + +207 + #INT_FAST32_MAX + (2147483647) + + ) + +209 + #INT_FAST64_MAX + ( + `__INT64_C +(9223372036854775807)) + + ) + +212 + #UINT_FAST8_MAX + (255) + + ) + +213 #i� +__WORDSIZE + == 64 + +214 + #UINT_FAST16_MAX + (18446744073709551615UL) + + ) + +215 + #UINT_FAST32_MAX + (18446744073709551615UL) + + ) + +217 + #UINT_FAST16_MAX + (4294967295U) + + ) + +218 + #UINT_FAST32_MAX + (4294967295U) + + ) + +220 + #UINT_FAST64_MAX + ( + `__UINT64_C +(18446744073709551615)) + + ) + +224 #i� +__WORDSIZE + == 64 + +225 + #INTPTR_MIN + (-9223372036854775807L-1) + + ) + +226 + #INTPTR_MAX + (9223372036854775807L) + + ) + +227 + #UINTPTR_MAX + (18446744073709551615UL) + + ) + +229 + #INTPTR_MIN + (-2147483647-1) + + ) + +230 + #INTPTR_MAX + (2147483647) + + ) + +231 + #UINTPTR_MAX + (4294967295U) + + ) + +236 + #INTMAX_MIN + (- + `__INT64_C +(9223372036854775807)-1) + + ) + +238 + #INTMAX_MAX + ( + `__INT64_C +(9223372036854775807)) + + ) + +241 + #UINTMAX_MAX + ( + `__UINT64_C +(18446744073709551615)) + + ) + +247 #i� +__WORDSIZE + == 64 + +248 + #PTRDIFF_MIN + (-9223372036854775807L-1) + + ) + +249 + #PTRDIFF_MAX + (9223372036854775807L) + + ) + +251 + #PTRDIFF_MIN + (-2147483647-1) + + ) + +252 + #PTRDIFF_MAX + (2147483647) + + ) + +256 + #SIG_ATOMIC_MIN + (-2147483647-1) + + ) + +257 + #SIG_ATOMIC_MAX + (2147483647) + + ) + +260 #i� +__WORDSIZE + == 64 + +261 + #SIZE_MAX + (18446744073709551615UL) + + ) + +263 + #SIZE_MAX + (4294967295U) + + ) + +267 #i�de� +WCHAR_MIN + + +269 + #WCHAR_MIN + +__WCHAR_MIN + + + ) + +270 + #WCHAR_MAX + +__WCHAR_MAX + + + ) + +274 + #WINT_MIN + (0u) + + ) + +275 + #WINT_MAX + (4294967295u) + + ) + +278 + #INT8_C +( +c +� + ) +c + +279 + #INT16_C +( +c +� + ) +c + +280 + #INT32_C +( +c +� + ) +c + +281 #i� +__WORDSIZE + == 64 + +282 + #INT64_C +( +c +��## +L + + + ) + +284 + #INT64_C +( +c +��## +LL + + + ) + +288 + #UINT8_C +( +c +� + ) +c + +289 + #UINT16_C +( +c +� + ) +c + +290 + #UINT32_C +( +c +��## +U + + + ) + +291 #i� +__WORDSIZE + == 64 + +292 + #UINT64_C +( +c +��## +UL + + + ) + +294 + #UINT64_C +( +c +��## +ULL + + + ) + +298 #i� +__WORDSIZE + == 64 + +299 + #INTMAX_C +( +c +��## +L + + + ) + +300 + #UINTMAX_C +( +c +��## +UL + + + ) + +302 + #INTMAX_C +( +c +��## +LL + + + ) + +303 + #UINTMAX_C +( +c +��## +ULL + + + ) + + @/usr/include/sys/cdefs.h + +18 #i�def +_SYS_CDEFS_H + + +19 + #_SYS_CDEFS_H + 1 + + ) + +22 #i�de� +_FEATURES_H + + +23 + ~<�u�s.h +> + +29 #i� +def�ed + +__GNUC__ + && !def�ed +__STDC__ + + +34 #unde� +__P + + +35 #unde� +__PMT + + +37 #ifde� +__GNUC__ + + +41 #i� +__GNUC_PREREQ + (4, 6�&& ! +def�ed + +_LIBC + + +42 + #__LEAF + , +__�af__ + + + ) + +43 + #__LEAF_ATTR + + `__��ibu�__ + (( +__�af__ +)) + + ) + +45 + #__LEAF + + + ) + +46 + #__LEAF_ATTR + + + ) + +54 #i�! +def�ed + +__�lu�lus + && +__GNUC_PREREQ + (3, 3) + +55 + #__THROW + + `__��ibu�__ + (( +__n�hrow__ + +__LEAF +)) + + ) + +56 + #__THROWNL + + `__��ibu�__ + (( +__n�hrow__ +)) + + ) + +57 + #__NTH +( +f� +� + `__��ibu�__ + (( +__n�hrow__ + +__LEAF +)� + ) +fct + +59 #i� +def�ed + +__�lu�lus + && +__GNUC_PREREQ + (2,8) + +60 + #__THROW + + `throw + () + + ) + +61 + #__THROWNL + + `throw + () + + ) + +62 + #__NTH +( +f� +� +__LEAF_ATTR + f� + `throw + () + + ) + +64 + #__THROW + + + ) + +65 + #__THROWNL + + + ) + +66 + #__NTH +( +f� +� + ) +fct + +72 + #__�l�e + + + ) + +74 + #__THROW + + + ) + +75 + #__THROWNL + + + ) + +76 + #__NTH +( +f� +� + ) +fct + +82 + #__P +( +�gs +� + ) +args + +83 + #__PMT +( +�gs +� + ) +args + +88 + #__CONCAT +( +x +, +y +�x ## + ) +y + +89 + #__STRING +( +x +�#x + + ) + +92 + #__�r_t + * + + ) + +93 + #__l�g_doub�_t + + + ) + +97 #ifdef +__�lu�lus + + +98 + #__BEGIN_DECLS + "C" { + + ) + +99 + #__END_DECLS + } + + ) + +101 + #__BEGIN_DECLS + + + ) + +102 + #__END_DECLS + + + ) + +111 #i� +def�ed + +__�lu�lus + && def�ed +_GLIBCPP_USE_NAMESPACES + + +112 + #__BEGIN_NAMESPACE_STD + +�me�a� + +�d + { + + ) + +113 + #__END_NAMESPACE_STD + } + + ) + +114 + #__USING_NAMESPACE_STD +( +�me +� +us�g + +�d +::�me; + + ) + +115 + #__BEGIN_NAMESPACE_C99 + +�me�a� + +__c99 + { + + ) + +116 + #__END_NAMESPACE_C99 + } + + ) + +117 + #__USING_NAMESPACE_C99 +( +�me +� +us�g + +__c99 +::�me; + + ) + +122 + #__BEGIN_NAMESPACE_STD + + + ) + +123 + #__END_NAMESPACE_STD + + + ) + +124 + #__USING_NAMESPACE_STD +( +�me +) + + ) + +125 + #__BEGIN_NAMESPACE_C99 + + + ) + +126 + #__END_NAMESPACE_C99 + + + ) + +127 + #__USING_NAMESPACE_C99 +( +�me +) + + ) + +132 + #__bos +( +�r +� + `__bu�t�_obje�_size + (�r, +__USE_FORTIFY_LEVEL + > 1) + + ) + +133 + #__bos0 +( +�r +� + `__bu�t�_obje�_size + (�r, 0) + + ) + +134 + #__f�tify_fun�i� + +__ex��_�ways_�l�e + +__��ibu�_�tific�l__ + + + ) + +136 #i� +__GNUC_PREREQ + (4,3) + +137 + #__w�nde� +( +�me +, +msg +) \ + +138 + `�me + (� + `__��ibu�__ +(( + `__w�n�g__ + ( +msg +))) + + ) + +139 + #__w�ljr +( +msg +� + `__��ibu�__ +(( + `__w�n�g__ + (msg))) + + ) + +140 + #__�r�de� +( +�me +, +msg +) \ + +141 + `�me + (� + `__��ibu�__ +(( + `__�r�__ + ( +msg +))) + + ) + +143 + #__w�nde� +( +�me +, +msg +� + `�me + () + + ) + +144 + #__w�ljr +( +msg +) + + ) + +145 + #__�r�de� +( +�me +, +msg +� + `�me + () + + ) + +149 #i� +__GNUC_PREREQ + (2,97) + +151 + #__�ex�r + [] + + ) + +153 #ifde� +__GNUC__ + + +154 + #__�ex�r + [0] + + ) + +156 #i� +def�ed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L + +157 + #__�ex�r + [] + + ) + +160 + #__�ex�r + [1] + + ) + +176 #i� +def�ed + +__GNUC__ + && __GNUC__ >= 2 + +178 + #__REDIRECT +( +�me +, +��o +, +��s +��m���� + `__asm__ + ( + `__ASMNAME + (#��s)) + + ) + +179 #ifde� +__�lu�lus + + +180 + #__REDIRECT_NTH +( +�me +, +��o +, +��s +) \ + +181 +�me + +��o + +__THROW + + `__asm__ + ( + `__ASMNAME + (#��s)) + + ) + +182 + #__REDIRECT_NTHNL +( +�me +, +��o +, +��s +) \ + +183 +�me + +��o + +__THROWNL + + `__asm__ + ( + `__ASMNAME + (#��s)) + + ) + +185 + #__REDIRECT_NTH +( +�me +, +��o +, +��s +) \ + +186 +�me + +��o + + `__asm__ + ( + `__ASMNAME + (#��s)� +__THROW + + + ) + +187 + #__REDIRECT_NTHNL +( +�me +, +��o +, +��s +) \ + +188 +�me + +��o + + `__asm__ + ( + `__ASMNAME + (#��s)� +__THROWNL + + + ) + +190 + #__ASMNAME +( +�ame +� + `__ASMNAME2 + ( +__USER_LABEL_PREFIX__ +, c�me) + + ) + +191 + #__ASMNAME2 +( +�efix +, +�ame +� + `__STRING + (�efix� + ) +cname + +204 #i�! +def�ed + +__GNUC__ + || __GNUC__ < 2 + +205 + #__��ibu�__ +( +xyz +� + + ) + +211 #i� +__GNUC_PREREQ + (2,96) + +212 + #__��ibu�_m�loc__ + + `__��ibu�__ + (( +__m�loc__ +)) + + ) + +214 + #__��ibu�_m�loc__ + + + ) + +219 #i� +__GNUC_PREREQ + (4, 3) + +220 + #__��ibu�_�loc_size__ +( +��ms +) \ + +221 + `__��ibu�__ + (( +__�loc_size__ + +��ms +)) + + ) + +223 + #__��ibu�_�loc_size__ +( +��ms +� + + ) + +229 #i� +__GNUC_PREREQ + (2,96) + +230 + #__��ibu�_pu�__ + + `__��ibu�__ + (( +__pu�__ +)) + + ) + +232 + #__��ibu�_pu�__ + + + ) + +236 #i� +__GNUC_PREREQ + (2,5) + +237 + #__��ibu�_cڡ__ + + `__��ibu�__ + (( +__cڡ__ +)) + + ) + +239 + #__��ibu�_cڡ__ + + + ) + +245 #i� +__GNUC_PREREQ + (3,1) + +246 + #__��ibu�_u�d__ + + `__��ibu�__ + (( +__u�d__ +)) + + ) + +247 + #__��ibu�_no�l�e__ + + `__��ibu�__ + (( +__no�l�e__ +)) + + ) + +249 + #__��ibu�_u�d__ + + `__��ibu�__ + (( +__unu�d__ +)) + + ) + +250 + #__��ibu�_no�l�e__ + + + ) + +254 #i� +__GNUC_PREREQ + (3,2) + +255 + #__��ibu�_d����d__ + + `__��ibu�__ + (( +__d����d__ +)) + + ) + +257 + #__��ibu�_d����d__ + + + ) + +266 #i� +__GNUC_PREREQ + (2,8) + +267 + #__��ibu�_f�m�_�g__ +( +x +� + `__��ibu�__ + (( + `__f�m�_�g__ + (x))) + + ) + +269 + #__��ibu�_f�m�_�g__ +( +x +� + + ) + +276 #i� +__GNUC_PREREQ + (2,97) + +277 + #__��ibu�_f�m�_�rfm�__ +( +a +, +b +) \ + +278 + `__��ibu�__ + (( + `__f�m�__ + ( +__�rfm�__ +, +a +, +b +))) + + ) + +280 + #__��ibu�_f�m�_�rfm�__ +( +a +, +b +� + + ) + +285 #i� +__GNUC_PREREQ + (3,3) + +286 + #__n�nu� +( +��ms +� + `__��ibu�__ + (( +__n�nu�__ +��ams)) + + ) + +288 + #__n�nu� +( +��ms +) + + ) + +293 #i� +__GNUC_PREREQ + (3,4) + +294 + #__��ibu�_w�n_unu�d_�su�__ + \ + +295 + `__��ibu�__ + (( +__w�n_unu�d_�su�__ +)) + + ) + +296 #i� +__USE_FORTIFY_LEVEL + > 0 + +297 + #__wur + +__��ibu�_w�n_unu�d_�su�__ + + + ) + +300 + #__��ibu�_w�n_unu�d_�su�__ + + + ) + +302 #i�de� +__wur + + +303 + #__wur + + + ) + +307 #i� +__GNUC_PREREQ + (3,2) + +308 + #__�ways_�l�e + +__�l�e + + `__��ibu�__ + (( +__�ways_�l�e__ +)) + + ) + +310 + #__�ways_�l�e + +__�l�e + + + ) + +315 #i� +__GNUC_PREREQ + (4,3) + +316 + #__��ibu�_�tific�l__ + + `__��ibu�__ + (( +__�tific�l__ +)) + + ) + +318 + #__��ibu�_�tific�l__ + + + ) + +321 #ifde� +__GNUC__ + + +326 #i� +def�ed + +__GNUC_STDC_INLINE__ + || def�ed +__GNUC_GNU_INLINE__ + + +327 + #__ex��_�l�e + +__�l�e + + `__��ibu�__ + (( +__gnu_�l�e__ +)) + + ) + +328 + #__ex��_�ways_�l�e + \ + +329 +__�ways_�l�e + + `__��ibu�__ + (( +__gnu_�l�e__ +)) + + ) + +331 + #__ex��_�l�e + +__�l�e + + + ) + +332 + #__ex��_�ways_�l�e + +__�ways_�l�e + + + ) + +335 + #__ex��_�l�e + + + ) + +336 + #__ex��_�ways_�l�e + + + ) + +341 #i� +__GNUC_PREREQ + (4,3) + +342 + #__va_�g_�ck +(� + `__bu�t�_va_�g_�ck + () + + ) + +343 + #__va_�g_�ck_�n +(� + `__bu�t�_va_�g_�ck_�n + () + + ) + +350 #i�! +__GNUC_PREREQ + (2,8) + +351 + #__ex�nsi�__ + + + ) + +355 #i�! +__GNUC_PREREQ + (2,92) + +356 + #__��ri� + + + ) + +362 #i� +__GNUC_PREREQ + (3,1�&& ! +def�ed + +__GNUG__ + + +363 + #__��ri�_�r + +__��ri� + + + ) + +365 #ifde� +__GNUC__ + + +366 + #__��ri�_�r + + + ) + +368 #i� +def�ed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L + +369 + #__��ri�_�r + +��ri� + + + ) + +372 + #__��ri�_�r + + + ) + +377 #i� +__GNUC__ + >= 3 + +378 + #__glibc_u�ik�y +( +c�d +� + `__bu�t�_ex�� + ((c�d), 0) + + ) + +379 + #__glibc_lik�y +( +c�d +� + `__bu�t�_ex�� + ((c�d), 1) + + ) + +381 + #__glibc_u�ik�y +( +c�d +�(c�d) + + ) + +382 + #__glibc_lik�y +( +c�d +�(c�d) + + ) + +385 + ~<b�s/w�dsize.h +> + +387 #i� +def�ed + +__LONG_DOUBLE_MATH_OPTIONAL + && def�ed +__NO_LONG_DOUBLE_MATH + + +388 + #__LDBL_COMPAT + 1 + + ) + +389 #ifde� +__REDIRECT + + +390 + #__LDBL_REDIR1 +( +�me +, +��o +, +��s +� + `__REDIRECT + (�me,�r�o,�l�s) + + ) + +391 + #__LDBL_REDIR +( +�me +, +��o +) \ + +392 + `__LDBL_REDIR1 + ( +�me +, +��o +, +__�dbl_ +##�me) + + ) + +393 + #__LDBL_REDIR1_NTH +( +�me +, +��o +, +��s +� + `__REDIRECT_NTH + (�me,�r�o,�l�s) + + ) + +394 + #__LDBL_REDIR_NTH +( +�me +, +��o +) \ + +395 + `__LDBL_REDIR1_NTH + ( +�me +, +��o +, +__�dbl_ +##�me) + + ) + +396 + #__LDBL_REDIR1_DECL +( +�me +, +��s +) \ + +397 + `__ty�of + ( +�me +��m� + `__asm + ( + `__ASMNAME + (#��s)); + + ) + +398 + #__LDBL_REDIR_DECL +( +�me +) \ + +399 + `__ty�of + ( +�me +��m� + `__asm + ( + `__ASMNAME + ("__�dbl_" #�me)); + + ) + +400 + #__REDIRECT_LDBL +( +�me +, +��o +, +��s +) \ + +401 + `__LDBL_REDIR1 + ( +�me +, +��o +, +__�dbl_ +## +��s +) + + ) + +402 + #__REDIRECT_NTH_LDBL +( +�me +, +��o +, +��s +) \ + +403 + `__LDBL_REDIR1_NTH + ( +�me +, +��o +, +__�dbl_ +## +��s +) + + ) + +406 #i�! +def�ed + +__LDBL_COMPAT + || !def�ed +__REDIRECT + + +407 + #__LDBL_REDIR1 +( +�me +, +��o +, +��s +��m� + ) +proto + +408 + #__LDBL_REDIR +( +�me +, +��o +��m� + ) +proto + +409 + #__LDBL_REDIR1_NTH +( +�me +, +��o +, +��s +��m���� +__THROW + + + ) + +410 + #__LDBL_REDIR_NTH +( +�me +, +��o +��m���� +__THROW + + + ) + +411 + #__LDBL_REDIR_DECL +( +�me +) + + ) + +412 #ifde� +__REDIRECT + + +413 + #__REDIRECT_LDBL +( +�me +, +��o +, +��s +� + `__REDIRECT + (�me,�r�o,�l�s) + + ) + +414 + #__REDIRECT_NTH_LDBL +( +�me +, +��o +, +��s +) \ + +415 + `__REDIRECT_NTH + ( +�me +, +��o +, +��s +) + + ) + + @/usr/include/sys/poll.h + +19 #i�def +_SYS_POLL_H + + +20 + #_SYS_POLL_H + 1 + + ) + +22 + ~<�u�s.h +> + +25 + ~<b�s/p�l.h +> + +26 #ifde� +__USE_GNU + + +28 + ~<b�s/sig�t.h +> + +30 + #__�ed_time�ec + + + ) + +31 + ~<time.h +> + +36 + tnfds_t +; + +39 + sp�lfd + + +41 + mfd +; + +42 + mev�ts +; + +43 + m�v�ts +; + +47 +__BEGIN_DECLS + + +57 +p�l + ( +p�lfd + * +__fds +, +nfds_t + +__nfds +, +__timeout +); + +59 #ifde� +__USE_GNU + + +66 +��l + ( +p�lfd + * +__fds +, +nfds_t + +__nfds +, + +67 cڡ +time�ec + * +__timeout +, + +68 cڡ +__sig�t_t + * +__ss +); + +71 + g__END_DECLS + + +75 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__f�tify_fun�i� + + +76 + ~<b�s/p�l2.h +> + + @/usr/include/sys/sysmacros.h + +19 #i�de� +_SYS_SYSMACROS_H + + +20 + #_SYS_SYSMACROS_H + 1 + + ) + +22 + ~<�u�s.h +> + +24 +__BEGIN_DECLS + + +26 +__ex�nsi�__ + + +27 + $gnu_dev_maj� + ( +__dev +) + +28 +__THROW + +__��ibu�_cڡ__ +; + +29 +__ex�nsi�__ + + +30 + $gnu_dev_m�� + ( +__dev +) + +31 +__THROW + +__��ibu�_cڡ__ +; + +32 +__ex�nsi�__ + + +33 + $gnu_dev_makedev + ( +__maj� +, + +34 +__m�� +) + +35 +__THROW + +__��ibu�_cڡ__ +; + +37 #ifde� +__USE_EXTERN_INLINES + + +38 +__ex�nsi�__ + +__ex��_�l�e + +__��ibu�_cڡ__ + + +39 + `__NTH + ( + $gnu_dev_maj� + ( +__dev +)) + +41 (( +__dev + >> 8) & 0xfff) | (() (__dev >> 32) & ~0xfff); + +42 + } +} + +44 +__ex�nsi�__ + +__ex��_�l�e + +__��ibu�_cڡ__ + + +45 +__NTH + ( + $gnu_dev_m�� + ( +__dev +)) + +47 ( +__dev + & 0xff) | (() (__dev >> 12) & ~0xff); + +48 + } +} + +50 +__ex�nsi�__ + +__ex��_�l�e + +__��ibu�_cڡ__ + + +51 +__NTH + ( + $gnu_dev_makedev + ( +__maj� +, +__m�� +)) + +53 (( +__m�� + & 0xff�| (( +__maj� + & 0xfff) << 8) + +54 | (((�( +__m�� + & ~0xff)) << 12) + +55 | (((�( +__maj� + & ~0xfff)) << 32)); + +56 + } +} + +58 + g__END_DECLS + + +61 + #maj� +( +dev +� + `gnu_dev_maj� + (dev) + + ) + +62 + #m�� +( +dev +� + `gnu_dev_m�� + (dev) + + ) + +63 + #makedev +( +maj +, +m� +� + `gnu_dev_makedev + (maj, m�) + + ) + + @/usr/include/sys/ttydefaults.h + +40 #i�de� +_SYS_TTYDEFAULTS_H_ + + +41 + #_SYS_TTYDEFAULTS_H_ + + + ) + +46 + #TTYDEF_IFLAG + ( +BRKINT + | +ISTRIP + | +ICRNL + | +IMAXBEL + | +IXON + | +IXANY +) + + ) + +47 + #TTYDEF_OFLAG + ( +OPOST + | +ONLCR + | +XTABS +) + + ) + +48 + #TTYDEF_LFLAG + ( +ECHO + | +ICANON + | +ISIG + | +IEXTEN + | +ECHOE +| +ECHOKE +| +ECHOCTL +) + + ) + +49 + #TTYDEF_CFLAG + ( +CREAD + | +CS7 + | +PARENB + | +HUPCL +) + + ) + +50 + #TTYDEF_SPEED + ( +B9600 +) + + ) + +55 + #CTRL +( +x +�(x&037) + + ) + +56 + #CEOF + + `CTRL +('d') + + ) + +57 #ifde� +_POSIX_VDISABLE + + +58 + #CEOL + +_POSIX_VDISABLE + + + ) + +60 + #CEOL + '\0' + + ) + +62 + #CERASE + 0177 + + ) + +63 + #CINTR + + `CTRL +('c') + + ) + +64 #ifde� +_POSIX_VDISABLE + + +65 + #CSTATUS + +_POSIX_VDISABLE + + + ) + +67 + #CSTATUS + '\0' + + ) + +69 + #CKILL + + `CTRL +('u') + + ) + +70 + #CMIN + 1 + + ) + +71 + #CQUIT + 034 + + ) + +72 + #CSUSP + + `CTRL +('z') + + ) + +73 + #CTIME + 0 + + ) + +74 + #CDSUSP + + `CTRL +('y') + + ) + +75 + #CSTART + + `CTRL +('q') + + ) + +76 + #CSTOP + + `CTRL +('s') + + ) + +77 + #CLNEXT + + `CTRL +('v') + + ) + +78 + #CDISCARD + + `CTRL +('o') + + ) + +79 + #CWERASE + + `CTRL +('w') + + ) + +80 + #CREPRINT + + `CTRL +('r') + + ) + +81 + #CEOT + +CEOF + + + ) + +83 + #CBRK + +CEOL + + + ) + +84 + #CRPRNT + +CREPRINT + + + ) + +85 + #CFLUSH + +CDISCARD + + + ) + +93 #ifde� +TTYDEFCHARS + + +94 +cc_t + + g�ydefch�s +[ +NCCS +] = { + +95 +CEOF +, +CEOL +, CEOL, +CERASE +, +CWERASE +, +CKILL +, +CREPRINT +, + +96 +_POSIX_VDISABLE +, +CINTR +, +CQUIT +, +CSUSP +, +CDSUSP +, +CSTART +, +CSTOP +, +CLNEXT +, + +97 +CDISCARD +, +CMIN +, +CTIME +, +CSTATUS +, +_POSIX_VDISABLE + + +99 #unde� +TTYDEFCHARS + + + @/usr/include/sys/ucontext.h + +18 #i�de� +_SYS_UCONTEXT_H + + +19 + #_SYS_UCONTEXT_H + 1 + + ) + +21 + ~<�u�s.h +> + +22 + ~<sig�l.h +> + +26 + ~<b�s/sigcڋxt.h +> + +28 #ifde� +__x86_64__ + + +31 +__ex�nsi�__ + + tg�g_t +; + +34 + #NGREG + 23 + + ) + +37 +g�g_t + + tg�g�t_t +[ +NGREG +]; + +39 #ifde� +__USE_GNU + + +43 + mREG_R8 + = 0, + +44 + #REG_R8 + +REG_R8 + + + ) + +45 + mREG_R9 +, + +46 + #REG_R9 + +REG_R9 + + + ) + +47 + mREG_R10 +, + +48 + #REG_R10 + +REG_R10 + + + ) + +49 + mREG_R11 +, + +50 + #REG_R11 + +REG_R11 + + + ) + +51 + mREG_R12 +, + +52 + #REG_R12 + +REG_R12 + + + ) + +53 + mREG_R13 +, + +54 + #REG_R13 + +REG_R13 + + + ) + +55 + mREG_R14 +, + +56 + #REG_R14 + +REG_R14 + + + ) + +57 + mREG_R15 +, + +58 + #REG_R15 + +REG_R15 + + + ) + +59 + mREG_RDI +, + +60 + #REG_RDI + +REG_RDI + + + ) + +61 + mREG_RSI +, + +62 + #REG_RSI + +REG_RSI + + + ) + +63 + mREG_RBP +, + +64 + #REG_RBP + +REG_RBP + + + ) + +65 + mREG_RBX +, + +66 + #REG_RBX + +REG_RBX + + + ) + +67 + mREG_RDX +, + +68 + #REG_RDX + +REG_RDX + + + ) + +69 + mREG_RAX +, + +70 + #REG_RAX + +REG_RAX + + + ) + +71 + mREG_RCX +, + +72 + #REG_RCX + +REG_RCX + + + ) + +73 + mREG_RSP +, + +74 + #REG_RSP + +REG_RSP + + + ) + +75 + mREG_RIP +, + +76 + #REG_RIP + +REG_RIP + + + ) + +77 + mREG_EFL +, + +78 + #REG_EFL + +REG_EFL + + + ) + +79 + mREG_CSGSFS +, + +80 + #REG_CSGSFS + +REG_CSGSFS + + + ) + +81 + mREG_ERR +, + +82 + #REG_ERR + +REG_ERR + + + ) + +83 + mREG_TRAPNO +, + +84 + #REG_TRAPNO + +REG_TRAPNO + + + ) + +85 + mREG_OLDMASK +, + +86 + #REG_OLDMASK + +REG_OLDMASK + + + ) + +87 + mREG_CR2 + + +88 + #REG_CR2 + +REG_CR2 + + + ) + +92 + s_libc_�x�g + + +94 + msignifi�nd +[4]; + +95 + mexpڒt +; + +96 + m�dd�g +[3]; + +99 + s_libc_xmm�g + + +101 +__u�t32_t + + m�em�t +[4]; + +104 + s_libc_塩e + + +107 +__u�t16_t + + mcwd +; + +108 +__u�t16_t + + mswd +; + +109 +__u�t16_t + + m�w +; + +110 +__u�t16_t + + mf� +; + +111 +__u�t64_t + + mr� +; + +112 +__u�t64_t + + mrdp +; + +113 +__u�t32_t + + mmxc� +; + +114 +__u�t32_t + + mmx�_mask +; + +115 +_libc_�x�g + + m_� +[8]; + +116 +_libc_xmm�g + + m_xmm +[16]; + +117 +__u�t32_t + + m�dd�g +[24]; + +121 +_libc_塩e + * + t�g�t_t +; + +126 +g�g�t_t + + mg�gs +; + +128 +�g�t_t + + m�gs +; + +129 +__ex�nsi�__ + + m__��rved1 + [8]; + +130 } + tmcڋxt_t +; + +133 + sucڋxt + + +135 + muc_�ags +; + +136 +ucڋxt + * + muc_l�k +; + +137 +�ack_t + + muc_�ack +; + +138 +mcڋxt_t + + muc_mcڋxt +; + +139 +__sig�t_t + + muc_sigmask +; + +140 +_libc_塩e + + m__�gs_mem +; + +141 } + tucڋxt_t +; + +146 + tg�g_t +; + +149 + #NGREG + 19 + + ) + +152 +g�g_t + + tg�g�t_t +[ +NGREG +]; + +154 #ifde� +__USE_GNU + + +158 + mREG_GS + = 0, + +159 + #REG_GS + +REG_GS + + + ) + +160 + mREG_FS +, + +161 + #REG_FS + +REG_FS + + + ) + +162 + mREG_ES +, + +163 + #REG_ES + +REG_ES + + + ) + +164 + mREG_DS +, + +165 + #REG_DS + +REG_DS + + + ) + +166 + mREG_EDI +, + +167 + #REG_EDI + +REG_EDI + + + ) + +168 + mREG_ESI +, + +169 + #REG_ESI + +REG_ESI + + + ) + +170 + mREG_EBP +, + +171 + #REG_EBP + +REG_EBP + + + ) + +172 + mREG_ESP +, + +173 + #REG_ESP + +REG_ESP + + + ) + +174 + mREG_EBX +, + +175 + #REG_EBX + +REG_EBX + + + ) + +176 + mREG_EDX +, + +177 + #REG_EDX + +REG_EDX + + + ) + +178 + mREG_ECX +, + +179 + #REG_ECX + +REG_ECX + + + ) + +180 + mREG_EAX +, + +181 + #REG_EAX + +REG_EAX + + + ) + +182 + mREG_TRAPNO +, + +183 + #REG_TRAPNO + +REG_TRAPNO + + + ) + +184 + mREG_ERR +, + +185 + #REG_ERR + +REG_ERR + + + ) + +186 + mREG_EIP +, + +187 + #REG_EIP + +REG_EIP + + + ) + +188 + mREG_CS +, + +189 + #REG_CS + +REG_CS + + + ) + +190 + mREG_EFL +, + +191 + #REG_EFL + +REG_EFL + + + ) + +192 + mREG_UESP +, + +193 + #REG_UESP + +REG_UESP + + + ) + +194 + mREG_SS + + +195 + #REG_SS + +REG_SS + + + ) + +200 + s_libc_�g + + +202 + msignifi�nd +[4]; + +203 + mexpڒt +; + +206 + s_libc_塩e + + +208 + mcw +; + +209 + msw +; + +210 + m�g +; + +211 + m�off +; + +212 + mcs�l +; + +213 + md�aoff +; + +214 + md�a�l +; + +215 +_libc_�g + + m_� +[8]; + +216 + m��us +; + +220 +_libc_塩e + * + t�g�t_t +; + +225 +g�g�t_t + + mg�gs +; + +228 +�g�t_t + + m�gs +; + +229 + m�dmask +; + +230 + m�2 +; + +231 } + tmcڋxt_t +; + +234 + sucڋxt + + +236 + muc_�ags +; + +237 +ucڋxt + * + muc_l�k +; + +238 +�ack_t + + muc_�ack +; + +239 +mcڋxt_t + + muc_mcڋxt +; + +240 +__sig�t_t + + muc_sigmask +; + +241 +_libc_塩e + + m__�gs_mem +; + +242 } + tucڋxt_t +; + + @/usr/include/sys/uio.h + +18 #i�de� +_SYS_UIO_H + + +19 + #_SYS_UIO_H + 1 + + ) + +21 + ~<�u�s.h +> + +23 + ~<sys/ty�s.h +> + +25 + g__BEGIN_DECLS + + +28 + ~<b�s/uio.h +> + +39 +ssize_t + + $�adv + ( +__fd +, cڡ +iovec + * +__iovec +, +__cou� +) + +40 +__wur +; + +50 +ssize_t + + $wr�ev + ( +__fd +, cڡ +iovec + * +__iovec +, +__cou� +) + +51 +__wur +; + +54 #ifde� +__USE_BSD + + +55 #i�de� +__USE_FILE_OFFSET64 + + +65 +ssize_t + + $��dv + ( +__fd +, cڡ +iovec + * +__iovec +, +__cou� +, + +66 +__off_t + +__off�t +� +__wur +; + +77 +ssize_t + + $pwr�ev + ( +__fd +, cڡ +iovec + * +__iovec +, +__cou� +, + +78 +__off_t + +__off�t +� +__wur +; + +80 #ifde� +__REDIRECT + + +81 +ssize_t + + `__REDIRECT + ( +��dv +, ( +__fd +, cڡ +iovec + * +__iovec +, + +82 +__cou� +, +__off64_t + +__off�t +), + +83 +��dv64 +� +__wur +; + +84 +ssize_t + + `__REDIRECT + ( +pwr�ev +, ( +__fd +, cڡ +iovec + * +__iovec +, + +85 +__cou� +, +__off64_t + +__off�t +), + +86 +pwr�ev64 +� +__wur +; + +88 + #��dv + +��dv64 + + + ) + +89 + #pwr�ev + +pwr�ev64 + + + ) + +93 #ifde� +__USE_LARGEFILE64 + + +103 +ssize_t + + $��dv64 + ( +__fd +, cڡ +iovec + * +__iovec +, +__cou� +, + +104 +__off64_t + +__off�t +� +__wur +; + +115 +ssize_t + + $pwr�ev64 + ( +__fd +, cڡ +iovec + * +__iovec +, +__cou� +, + +116 +__off64_t + +__off�t +� +__wur +; + +120 +__END_DECLS + + + @/usr/include/xlocale.h + +20 #i�de� +_XLOCALE_H + + +21 + #_XLOCALE_H + 1 + + ) + +27 + s__lo��_�ru� + + +30 +__lo��_d�a + * + m__lo��s +[13]; + +33 cڡ * + m__�y�_b +; + +34 cڡ * + m__�y�_t�ow� +; + +35 cڡ * + m__�y�_tou�� +; + +38 cڡ * + m__�mes +[13]; + +39 } * + t__lo��_t +; + +42 +__lo��_t + + tlo��_t +; + + @/usr/include/_G_config.h + +4 #i�de� +_G_c�fig_h + + +5 + #_G_c�fig_h + 1 + + ) + +9 + ~<b�s/ty�s.h +> + +10 + #__�ed_size_t + + + ) + +11 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +12 + #__�ed_wch�_t + + + ) + +14 + #__�ed_NULL + + + ) + +15 + ~<�ddef.h +> + +16 + #__�ed_mb��e_t + + + ) + +17 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +18 + #__�ed_w�t_t + + + ) + +20 + ~<wch�.h +> + +23 +__off_t + + m__pos +; + +24 +__mb��e_t + + m__��e +; + +25 } + t_G_�os_t +; + +28 +__off64_t + + m__pos +; + +29 +__mb��e_t + + m__��e +; + +30 } + t_G_�os64_t +; + +31 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +32 + ~<gc�v.h +> + +35 +__gc�v_�fo + + m__cd +; + +38 +__gc�v_�fo + + m__cd +; + +39 +__gc�v_��_d�a + + m__d�a +; + +40 } + m__comb�ed +; + +41 } + t_G_ic�v_t +; + +46 + #_G_va_li� + +__gnuc_va_li� + + + ) + +48 + #_G_HAVE_MMAP + 1 + + ) + +49 + #_G_HAVE_MREMAP + 1 + + ) + +51 + #_G_IO_IO_FILE_VERSION + 0x20001 + + ) + +54 + #_G_HAVE_ST_BLKSIZE + + `def�ed + ( +_STATBUF_ST_BLKSIZE +) + + ) + +56 + #_G_BUFSIZ + 8192 + + ) + + @/usr/include/asm-generic/sockios.h + +1 #i�de� +__ASM_GENERIC_SOCKIOS_H + + +2 + #__ASM_GENERIC_SOCKIOS_H + + + ) + +5 + #FIOSETOWN + 0x8901 + + ) + +6 + #SIOCSPGRP + 0x8902 + + ) + +7 + #FIOGETOWN + 0x8903 + + ) + +8 + #SIOCGPGRP + 0x8904 + + ) + +9 + #SIOCATMARK + 0x8905 + + ) + +10 + #SIOCGSTAMP + 0x8906 + + ) + +11 + #SIOCGSTAMPNS + 0x8907 + + ) + + @/usr/include/asm/ioctls.h + +1 + ~<asm-g��ic/io�ls.h +> + + @/usr/include/asm/socket.h + +1 + ~<asm-g��ic/sock�.h +> + + @/usr/include/bits/byteswap-16.h + +19 #i�de� +_BITS_BYTESWAP_H + + +23 #ifde� +__GNUC__ + + +24 #i� +__GNUC__ + >= 2 + +25 + #__bsw�_16 +( +x +) \ + +26 ( +__ex�nsi�__ + \ + +27 ({ +__v +, +__x + = (�( +x +); \ + +28 i�( + `__bu�t�_cڡ�t_p + ( +__x +)) \ + +29 +__v + = + `__bsw�_cڡ�t_16 + ( +__x +); \ + +31 + `__asm__ + ("rorw $8, %w0" \ + +32 : "�" ( +__v +) \ + +33 : "0" ( +__x +) \ + +35 +__v +; })) + + ) + +38 + #__bsw�_16 +( +x +) \ + +39 ( +__ex�nsi�__ + \ + +40 ({ +__x + = (�( +x +); \ + +41 + `__bsw�_cڡ�t_16 + ( +__x +); })) + + ) + +44 +__�l�e + + +45 + $__bsw�_16 + ( +__bsx +) + +47 + `__bsw�_cڡ�t_16 + ( +__bsx +); + +48 + } +} + + @/usr/include/bits/endian.h + +3 #i�de� +_ENDIAN_H + + +7 + #__BYTE_ORDER + +__LITTLE_ENDIAN + + + ) + + @/usr/include/bits/fcntl-linux.h + +19 #i�def +_FCNTL_H + + +37 #ifde� +__USE_GNU + + +38 + ~<b�s/uio.h +> + +42 + #O_ACCMODE + 0003 + + ) + +43 + #O_RDONLY + 00 + + ) + +44 + #O_WRONLY + 01 + + ) + +45 + #O_RDWR + 02 + + ) + +46 #i�de� +O_CREAT + + +47 + #O_CREAT + 0100 + + ) + +49 #i�de� +O_EXCL + + +50 + #O_EXCL + 0200 + + ) + +52 #i�de� +O_NOCTTY + + +53 + #O_NOCTTY + 0400 + + ) + +55 #i�de� +O_TRUNC + + +56 + #O_TRUNC + 01000 + + ) + +58 #i�de� +O_APPEND + + +59 + #O_APPEND + 02000 + + ) + +61 #i�de� +O_NONBLOCK + + +62 + #O_NONBLOCK + 04000 + + ) + +64 #i�de� +O_NDELAY + + +65 + #O_NDELAY + +O_NONBLOCK + + + ) + +67 #i�de� +O_SYNC + + +68 + #O_SYNC + 04010000 + + ) + +70 + #O_FSYNC + +O_SYNC + + + ) + +71 #i�de� +O_ASYNC + + +72 + #O_ASYNC + 020000 + + ) + +74 #i�de� +__O_LARGEFILE + + +75 + #__O_LARGEFILE + 0100000 + + ) + +78 #i�de� +__O_DIRECTORY + + +79 + #__O_DIRECTORY + 0200000 + + ) + +81 #i�de� +__O_NOFOLLOW + + +82 + #__O_NOFOLLOW + 0400000 + + ) + +84 #i�de� +__O_CLOEXEC + + +85 + #__O_CLOEXEC + 02000000 + + ) + +87 #i�de� +__O_DIRECT + + +88 + #__O_DIRECT + 040000 + + ) + +90 #i�de� +__O_NOATIME + + +91 + #__O_NOATIME + 01000000 + + ) + +93 #i�de� +__O_PATH + + +94 + #__O_PATH + 010000000 + + ) + +96 #i�de� +__O_DSYNC + + +97 + #__O_DSYNC + 010000 + + ) + +99 #i�de� +__O_TMPFILE + + +100 + #__O_TMPFILE + 020200000 + + ) + +103 #i�de� +F_GETLK + + +104 #i�de� +__USE_FILE_OFFSET64 + + +105 + #F_GETLK + 5 + + ) + +106 + #F_SETLK + 6 + + ) + +107 + #F_SETLKW + 7 + + ) + +109 + #F_GETLK + +F_GETLK64 + + + ) + +110 + #F_SETLK + +F_SETLK64 + + + ) + +111 + #F_SETLKW + +F_SETLKW64 + + + ) + +114 #i�de� +F_GETLK64 + + +115 + #F_GETLK64 + 12 + + ) + +116 + #F_SETLK64 + 13 + + ) + +117 + #F_SETLKW64 + 14 + + ) + +120 #ifde� +__USE_LARGEFILE64 + + +121 + #O_LARGEFILE + +__O_LARGEFILE + + + ) + +124 #ifde� +__USE_XOPEN2K8 + + +125 + #O_DIRECTORY + +__O_DIRECTORY + + + ) + +126 + #O_NOFOLLOW + +__O_NOFOLLOW + + + ) + +127 + #O_CLOEXEC + +__O_CLOEXEC + + + ) + +130 #ifde� +__USE_GNU + + +131 + #O_DIRECT + +__O_DIRECT + + + ) + +132 + #O_NOATIME + +__O_NOATIME + + + ) + +133 + #O_PATH + +__O_PATH + + + ) + +134 + #O_TMPFILE + +__O_TMPFILE + + + ) + +140 #i� +def�ed + +__USE_POSIX199309 + || def�ed +__USE_UNIX98 + + +141 + #O_DSYNC + +__O_DSYNC + + + ) + +142 #i� +def�ed + +__O_RSYNC + + +143 + #O_RSYNC + +__O_RSYNC + + + ) + +145 + #O_RSYNC + +O_SYNC + + + ) + +150 + #F_DUPFD + 0 + + ) + +151 + #F_GETFD + 1 + + ) + +152 + #F_SETFD + 2 + + ) + +153 + #F_GETFL + 3 + + ) + +154 + #F_SETFL + 4 + + ) + +156 #i�de� +__F_SETOWN + + +157 + #__F_SETOWN + 8 + + ) + +158 + #__F_GETOWN + 9 + + ) + +161 #i� +def�ed + +__USE_BSD + || def�ed +__USE_UNIX98 + || def�ed +__USE_XOPEN2K8 + + +162 + #F_SETOWN + +__F_SETOWN + + + ) + +163 + #F_GETOWN + +__F_GETOWN + + + ) + +166 #i�de� +__F_SETSIG + + +167 + #__F_SETSIG + 10 + + ) + +168 + #__F_GETSIG + 11 + + ) + +170 #i�de� +__F_SETOWN_EX + + +171 + #__F_SETOWN_EX + 15 + + ) + +172 + #__F_GETOWN_EX + 16 + + ) + +175 #ifde� +__USE_GNU + + +176 + #F_SETSIG + +__F_SETSIG + + + ) + +177 + #F_GETSIG + +__F_GETSIG + + + ) + +178 + #F_SETOWN_EX + +__F_SETOWN_EX + + + ) + +179 + #F_GETOWN_EX + +__F_GETOWN_EX + + + ) + +182 #ifde� +__USE_GNU + + +183 + #F_SETLEASE + 1024 + + ) + +184 + #F_GETLEASE + 1025 + + ) + +185 + #F_NOTIFY + 1026 + + ) + +186 + #F_SETPIPE_SZ + 1031 + + ) + +187 + #F_GETPIPE_SZ + 1032 + + ) + +189 #ifde� +__USE_XOPEN2K8 + + +190 + #F_DUPFD_CLOEXEC + 1030 + + ) + +195 + #FD_CLOEXEC + 1 + + ) + +197 #i�de� +F_RDLCK + + +199 + #F_RDLCK + 0 + + ) + +200 + #F_WRLCK + 1 + + ) + +201 + #F_UNLCK + 2 + + ) + +206 #i�de� +F_EXLCK + + +207 + #F_EXLCK + 4 + + ) + +208 + #F_SHLCK + 8 + + ) + +211 #ifde� +__USE_BSD + + +213 + #LOCK_SH + 1 + + ) + +214 + #LOCK_EX + 2 + + ) + +215 + #LOCK_NB + 4 + + ) + +217 + #LOCK_UN + 8 + + ) + +220 #ifde� +__USE_GNU + + +221 + #LOCK_MAND + 32 + + ) + +222 + #LOCK_READ + 64 + + ) + +223 + #LOCK_WRITE + 128 + + ) + +224 + #LOCK_RW + 192 + + ) + +227 #ifde� +__USE_GNU + + +229 + #DN_ACCESS + 0x00000001 + + ) + +230 + #DN_MODIFY + 0x00000002 + + ) + +231 + #DN_CREATE + 0x00000004 + + ) + +232 + #DN_DELETE + 0x00000008 + + ) + +233 + #DN_RENAME + 0x00000010 + + ) + +234 + #DN_ATTRIB + 0x00000020 + + ) + +235 + #DN_MULTISHOT + 0x80000000 + + ) + +239 #ifde� +__USE_GNU + + +241 + e__pid_ty� + + +243 + mF_OWNER_TID + = 0, + +244 + mF_OWNER_PID +, + +245 + mF_OWNER_PGRP +, + +246 + mF_OWNER_GID + = +F_OWNER_PGRP + + +250 + sf_ow�r_ex + + +252 +__pid_ty� + + mty� +; + +253 +__pid_t + + mpid +; + +259 #ifdef +__USE_BSD + + +260 + #FAPPEND + +O_APPEND + + + ) + +261 + #FFSYNC + +O_FSYNC + + + ) + +262 + #FASYNC + +O_ASYNC + + + ) + +263 + #FNONBLOCK + +O_NONBLOCK + + + ) + +264 + #FNDELAY + +O_NDELAY + + + ) + +267 #i�de� +__POSIX_FADV_DONTNEED + + +268 + #__POSIX_FADV_DONTNEED + 4 + + ) + +269 + #__POSIX_FADV_NOREUSE + 5 + + ) + +272 #ifde� +__USE_XOPEN2K + + +273 + #POSIX_FADV_NORMAL + 0 + + ) + +274 + #POSIX_FADV_RANDOM + 1 + + ) + +275 + #POSIX_FADV_SEQUENTIAL + 2 + + ) + +276 + #POSIX_FADV_WILLNEED + 3 + + ) + +277 + #POSIX_FADV_DONTNEED + +__POSIX_FADV_DONTNEED + + + ) + +278 + #POSIX_FADV_NOREUSE + +__POSIX_FADV_NOREUSE + + + ) + +282 #ifde� +__USE_GNU + + +284 + #SYNC_FILE_RANGE_WAIT_BEFORE + 1 + + ) + +287 + #SYNC_FILE_RANGE_WRITE + 2 + + ) + +290 + #SYNC_FILE_RANGE_WAIT_AFTER + 4 + + ) + +295 + #SPLICE_F_MOVE + 1 + + ) + +296 + #SPLICE_F_NONBLOCK + 2 + + ) + +299 + #SPLICE_F_MORE + 4 + + ) + +300 + #SPLICE_F_GIFT + 8 + + ) + +304 + #FALLOC_FL_KEEP_SIZE + 1 + + ) + +307 + #FALLOC_FL_PUNCH_HOLE + 2 + + ) + +311 + sf�e_h�d� + + +313 + mh�d�_by�s +; + +314 + mh�d�_ty� +; + +316 + mf_h�d� +[0]; + +320 + #MAX_HANDLE_SZ + 128 + + ) + +324 #ifde� +__USE_ATFILE + + +325 + #AT_FDCWD + -100 + + ) + +328 + #AT_SYMLINK_NOFOLLOW + 0x100 + + ) + +329 + #AT_REMOVEDIR + 0x200 + + ) + +331 + #AT_SYMLINK_FOLLOW + 0x400 + + ) + +332 #ifde� +__USE_GNU + + +333 + #AT_NO_AUTOMOUNT + 0x800 + + ) + +335 + #AT_EMPTY_PATH + 0x1000 + + ) + +337 + #AT_EACCESS + 0x200 + + ) + +341 + g__BEGIN_DECLS + + +343 #ifde� +__USE_GNU + + +346 +ssize_t + + $�adah�d + ( +__fd +, +__off64_t + +__off�t +, +size_t + +__cou� +) + +347 +__THROW +; + +354 + `sync_f�e_�nge + ( +__fd +, +__off64_t + +__off�t +, __off64_� +__cou� +, + +355 +__�ags +); + +362 +ssize_t + + `vm�li� + ( +__fdout +, cڡ +iovec + * +__iov +, + +363 +size_t + +__cou� +, +__�ags +); + +369 +ssize_t + + `�li� + ( +__fd� +, +__off64_t + * +__off� +, +__fdout +, + +370 +__off64_t + * +__offout +, +size_t + +__�n +, + +371 +__�ags +); + +377 +ssize_t + + `�e + ( +__fd� +, +__fdout +, +size_t + +__�n +, + +378 +__�ags +); + +384 #i�de� +__USE_FILE_OFFSET64 + + +385 + `��o�� + ( +__fd +, +__mode +, +__off_t + +__off�t +, __off_� +__�n +); + +387 #ifde� +__REDIRECT + + +388 + `__REDIRECT + ( +��o�� +, ( +__fd +, +__mode +, +__off64_t + +__off�t +, + +389 +__off64_t + +__�n +), + +390 +��o��64 +); + +392 + #��o�� + +��o��64 + + + ) + +395 #ifde� +__USE_LARGEFILE64 + + +396 + `��o��64 + ( +__fd +, +__mode +, +__off64_t + +__off�t +, + +397 +__off64_t + +__�n +); + +402 + $�me_to_h�d�_� + ( +__dfd +, cڡ * +__�me +, + +403 +f�e_h�d� + * +__h�d� +, * +__m�_id +, + +404 +__�ags +� +__THROW +; + +410 + `ݒ_by_h�d�_� + ( +__mou�d�fd +, +f�e_h�d� + * +__h�d� +, + +411 +__�ags +); + +415 +__END_DECLS + + + @/usr/include/bits/libio-ldbl.h + +19 #i�de� +_IO_STDIO_H + + +23 + $__LDBL_REDIR_DECL + ( +_IO_vfs�nf +) + +24 + `__LDBL_REDIR_DECL + ( +_IO_v�r�tf +) + + @/usr/include/bits/poll.h + +18 #i�de� +_SYS_POLL_H + + +25 + #POLLIN + 0x001 + + ) + +26 + #POLLPRI + 0x002 + + ) + +27 + #POLLOUT + 0x004 + + ) + +29 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_XOPEN2K8 + + +31 + #POLLRDNORM + 0x040 + + ) + +32 + #POLLRDBAND + 0x080 + + ) + +33 + #POLLWRNORM + 0x100 + + ) + +34 + #POLLWRBAND + 0x200 + + ) + +37 #ifde� +__USE_GNU + + +39 + #POLLMSG + 0x400 + + ) + +40 + #POLLREMOVE + 0x1000 + + ) + +41 + #POLLRDHUP + 0x2000 + + ) + +47 + #POLLERR + 0x008 + + ) + +48 + #POLLHUP + 0x010 + + ) + +49 + #POLLNVAL + 0x020 + + ) + + @/usr/include/bits/poll2.h + +19 #i�de� +_SYS_POLL_H + + +24 +__BEGIN_DECLS + + +26 +__REDIRECT + ( +__p�l_��s +, ( +p�lfd + * +__fds +, +nfds_t + +__nfds +, + +27 +__timeout +), +p�l +); + +28 +__p�l_chk + ( +p�lfd + * +__fds +, +nfds_t + +__nfds +, +__timeout +, + +29 +__SIZE_TYPE__ + +__fd�� +); + +30 +__REDIRECT + ( +__p�l_chk_w�n +, ( +p�lfd + * +__fds +, +nfds_t + +__nfds +, + +31 +__timeout +, +__SIZE_TYPE__ + +__fd�� +), + +32 +__p�l_chk +) + +33 +__w�ljr + ("poll called with fds buffer�oo small file�fds�ntries"); + +35 +__f�tify_fun�i� + + +36 + $p�l + ( +p�lfd + * +__fds +, +nfds_t + +__nfds +, +__timeout +) + +38 i�( + `__bos + ( +__fds +�!�( +__SIZE_TYPE__ +) -1) + +40 i�(! + `__bu�t�_cڡ�t_p + ( +__nfds +)) + +41 + `__p�l_chk + ( +__fds +, +__nfds +, +__timeout +, + `__bos + (__fds)); + +42 i�( + `__bos + ( +__fds +�/ (*__fds�< +__nfds +) + +43 + `__p�l_chk_w�n + ( +__fds +, +__nfds +, +__timeout +, + `__bos + (__fds)); + +46 + `__p�l_��s + ( +__fds +, +__nfds +, +__timeout +); + +47 + } +} + +50 #ifde� +__USE_GNU + + +51 +__REDIRECT + ( +__��l_��s +, ( +p�lfd + * +__fds +, +nfds_t + +__nfds +, + +52 cڡ +time�ec + * +__timeout +, + +53 cڡ +__sig�t_t + * +__ss +), +��l +); + +54 +__��l_chk + ( +p�lfd + * +__fds +, +nfds_t + +__nfds +, + +55 cڡ +time�ec + * +__timeout +, + +56 cڡ +__sig�t_t + * +__ss +, +__SIZE_TYPE__ + +__fd�� +); + +57 +__REDIRECT + ( +__��l_chk_w�n +, ( +p�lfd + * +__fds +, +nfds_t + +__nfds +, + +58 cڡ +time�ec + * +__timeout +, + +59 cڡ +__sig�t_t + * +__ss +, + +60 +__SIZE_TYPE__ + +__fd�� +), + +61 +__��l_chk +) + +62 +__w�ljr + ("ppoll called with fds buffer�oo small file�fds�ntries"); + +64 +__f�tify_fun�i� + + +65 + $��l + ( +p�lfd + * +__fds +, +nfds_t + +__nfds +, cڡ +time�ec + * +__timeout +, + +66 cڡ +__sig�t_t + * +__ss +) + +68 i�( + `__bos + ( +__fds +�!�( +__SIZE_TYPE__ +) -1) + +70 i�(! + `__bu�t�_cڡ�t_p + ( +__nfds +)) + +71 + `__��l_chk + ( +__fds +, +__nfds +, +__timeout +, +__ss +, + `__bos + (__fds)); + +72 i�( + `__bos + ( +__fds +�/ (*__fds�< +__nfds +) + +73 + `__��l_chk_w�n + ( +__fds +, +__nfds +, +__timeout +, +__ss +, + +74 + `__bos + ( +__fds +)); + +77 + `__��l_��s + ( +__fds +, +__nfds +, +__timeout +, +__ss +); + +78 + } +} + +81 + g__END_DECLS + + + @/usr/include/bits/sched.h + +20 #i�de� +__�ed_sched��m + + +22 #i�de� +_SCHED_H + + +28 + #SCHED_OTHER + 0 + + ) + +29 + #SCHED_FIFO + 1 + + ) + +30 + #SCHED_RR + 2 + + ) + +31 #ifde� +__USE_GNU + + +32 + #SCHED_BATCH + 3 + + ) + +33 + #SCHED_IDLE + 5 + + ) + +35 + #SCHED_RESET_ON_FORK + 0x40000000 + + ) + +38 #ifde� +__USE_GNU + + +40 + #CSIGNAL + 0x000000f� + + ) + +41 + #CLONE_VM + 0x00000100 + + ) + +42 + #CLONE_FS + 0x00000200 + + ) + +43 + #CLONE_FILES + 0x00000400 + + ) + +44 + #CLONE_SIGHAND + 0x00000800 + + ) + +45 + #CLONE_PTRACE + 0x00002000 + + ) + +46 + #CLONE_VFORK + 0x00004000 + + ) + +48 + #CLONE_PARENT + 0x00008000 + + ) + +50 + #CLONE_THREAD + 0x00010000 + + ) + +51 + #CLONE_NEWNS + 0x00020000 + + ) + +52 + #CLONE_SYSVSEM + 0x00040000 + + ) + +53 + #CLONE_SETTLS + 0x00080000 + + ) + +54 + #CLONE_PARENT_SETTID + 0x00100000 + + ) + +56 + #CLONE_CHILD_CLEARTID + 0x00200000 + + ) + +58 + #CLONE_DETACHED + 0x00400000 + + ) + +59 + #CLONE_UNTRACED + 0x00800000 + + ) + +61 + #CLONE_CHILD_SETTID + 0x01000000 + + ) + +63 + #CLONE_NEWUTS + 0x04000000 + + ) + +64 + #CLONE_NEWIPC + 0x08000000 + + ) + +65 + #CLONE_NEWUSER + 0x10000000 + + ) + +66 + #CLONE_NEWPID + 0x20000000 + + ) + +67 + #CLONE_NEWNET + 0x40000000 + + ) + +68 + #CLONE_IO + 0x80000000 + + ) + +72 + ssched_��m + + +74 + m__sched_�iܙy +; + +77 + g__BEGIN_DECLS + + +79 #ifde� +__USE_GNU + + +81 +��e + ((* +__� +�(* +__�g +), * +__ch�d_�ack +, + +82 +__�ags +, * +__�g +, ...� +__THROW +; + +85 + $unsh�e + ( +__�ags +� +__THROW +; + +88 + $sched_g��u + (� +__THROW +; + +91 + $��s + ( +__fd +, +__n�y� +� +__THROW +; + +95 +__END_DECLS + + +99 #i�! +def�ed + +__def�ed_sched��m + \ + +100 && ( +def�ed + +__�ed_sched��m + || def�ed +_SCHED_H +) + +101 + #__def�ed_sched��m + 1 + + ) + +103 + s__sched_��m + + +105 +__sched_�iܙy +; + +107 #unde� +__�ed_sched��m + + +111 #i� +def�ed + +_SCHED_H + && !def�ed +__�u_�t_t_def�ed + + +112 + #__�u_�t_t_def�ed + + + ) + +114 + #__CPU_SETSIZE + 1024 + + ) + +115 + #__NCPUBITS + (8 * ( +__�u_mask +)) + + ) + +118 + t__�u_mask +; + +121 + #__CPUELT +( +�u +�((�u�/ +__NCPUBITS +) + + ) + +122 + #__CPUMASK +( +�u +�(( +__�u_mask +�1 << ((�u�% +__NCPUBITS +)) + + ) + +127 +__�u_mask + +__b�s +[ +__CPU_SETSIZE + / +__NCPUBITS +]; + +128 } + t�u_�t_t +; + +131 #i� + `__GNUC_PREREQ + (2, 91) + +132 + #__CPU_ZERO_S +( +�tsize +, +�u�� +) \ + +133 d� + `__bu�t�_mem�t + ( +�u�� +, '\0', +�tsize +); 0) + + ) + +135 + #__CPU_ZERO_S +( +�tsize +, +�u�� +) \ + +137 +size_t + +__i +; \ + +138 +size_t + +__imax + = ( +�tsize +�/ ( +__�u_mask +); \ + +139 +__�u_mask + * +__b�s + = ( +�u�� +)->__bits; \ + +140 +__i + = 0; __�< +__imax +; ++__i) \ + +141 +__b�s +[ +__i +] = 0; \ + +142 + } +} 0) + + ) + +144 + #__CPU_SET_S +( +�u +, +�tsize +, +�u�� +) \ + +145 ( +__ex�nsi�__ + \ + +146 ({ +size_t + +__�u + = ( +�u +); \ + +147 +__�u + / 8 < ( +�tsize +) \ + +148 ? ((( +__�u_mask + *�(( +�u�� +)-> +__b�s +))[ + `__CPUELT + ( +__�u +)] \ + +149 |� + `__CPUMASK + ( +__�u +)) \ + +150 : 0; })) + + ) + +151 + #__CPU_CLR_S +( +�u +, +�tsize +, +�u�� +) \ + +152 ( +__ex�nsi�__ + \ + +153 ({ +size_t + +__�u + = ( +�u +); \ + +154 +__�u + / 8 < ( +�tsize +) \ + +155 ? ((( +__�u_mask + *�(( +�u�� +)-> +__b�s +))[ + `__CPUELT + ( +__�u +)] \ + +156 &�~ + `__CPUMASK + ( +__�u +)) \ + +157 : 0; })) + + ) + +158 + #__CPU_ISSET_S +( +�u +, +�tsize +, +�u�� +) \ + +159 ( +__ex�nsi�__ + \ + +160 ({ +size_t + +__�u + = ( +�u +); \ + +161 +__�u + / 8 < ( +�tsize +) \ + +162 ? ((((cڡ +__�u_mask + *�(( +�u�� +)-> +__b�s +))[ + `__CPUELT + ( +__�u +)] \ + +163 & + `__CPUMASK + ( +__�u +))) != 0 \ + +164 : 0; })) + + ) + +166 + #__CPU_COUNT_S +( +�tsize +, +�u�� +) \ + +167 + `__sched_�ucou� + ( +�tsize +, +�u�� +) + + ) + +169 #i� +__GNUC_PREREQ + (2, 91) + +170 + #__CPU_EQUAL_S +( +�tsize +, +�u��1 +, +�u��2 +) \ + +171 ( + `__bu�t�_memcmp + ( +�u��1 +, +�u��2 +, +�tsize +�=�0) + + ) + +173 + #__CPU_EQUAL_S +( +�tsize +, +�u��1 +, +�u��2 +) \ + +174 ( +__ex�nsi�__ + \ + +175 ({ cڡ +__�u_mask + * +__�r1 + = ( +�u��1 +)-> +__b�s +; \ + +176 cڡ +__�u_mask + * +__�r2 + = ( +�u��2 +)-> +__b�s +; \ + +177 +size_t + +__imax + = ( +�tsize +�/ ( +__�u_mask +); \ + +178 +size_t + +__i +; \ + +179 +__i + = 0; __�< +__imax +; ++__i) \ + +180 i�( +__�r1 +[ +__i +] !� +__�r2 +[__i]) \ + +182 +__i + =� +__imax +; })) + + ) + +185 + #__CPU_OP_S +( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +, +� +) \ + +186 ( +__ex�nsi�__ + \ + +187 ({ +�u_�t_t + * +__de� + = ( +de��t +); \ + +188 cڡ +__�u_mask + * +__�r1 + = ( +�c�t1 +)-> +__b�s +; \ + +189 cڡ +__�u_mask + * +__�r2 + = ( +�c�t2 +)-> +__b�s +; \ + +190 +size_t + +__imax + = ( +�tsize +�/ ( +__�u_mask +); \ + +191 +size_t + +__i +; \ + +192 +__i + = 0; __�< +__imax +; ++__i) \ + +193 (( +__�u_mask + *� +__de� +-> +__b�s +)[ +__i +] = +__�r1 +[__i] +� + +__�r2 +[__i]; \ + +194 +__de� +; })) + + ) + +196 + #__CPU_ALLOC_SIZE +( +cou� +) \ + +197 (((( +cou� +�+ +__NCPUBITS + - 1�/ __NCPUBITS�* ( +__�u_mask +)) + + ) + +198 + #__CPU_ALLOC +( +cou� +� + `__sched_�u�loc + (cou�) + + ) + +199 + #__CPU_FREE +( +�u�t +� + `__sched_�u� + (�u�t) + + ) + +201 +__BEGIN_DECLS + + +203 + $__sched_�ucou� + ( +size_t + +__�tsize +, cڡ +�u_�t_t + * +__�� +) + +204 +__THROW +; + +205 +�u_�t_t + * + $__sched_�u�loc + ( +size_t + +__cou� +� +__THROW + +__wur +; + +206 + $__sched_�u� + ( +�u_�t_t + * +__�t +� +__THROW +; + +208 +__END_DECLS + + + @/usr/include/bits/socket_type.h + +19 #i�de� +_SYS_SOCKET_H + + +24 + e__sock�_ty� + + +26 + mSOCK_STREAM + = 1, + +28 + #SOCK_STREAM + +SOCK_STREAM + + + ) + +29 + mSOCK_DGRAM + = 2, + +31 + #SOCK_DGRAM + +SOCK_DGRAM + + + ) + +32 + mSOCK_RAW + = 3, + +33 + #SOCK_RAW + +SOCK_RAW + + + ) + +34 + mSOCK_RDM + = 4, + +35 + #SOCK_RDM + +SOCK_RDM + + + ) + +36 + mSOCK_SEQPACKET + = 5, + +38 + #SOCK_SEQPACKET + +SOCK_SEQPACKET + + + ) + +39 + mSOCK_DCCP + = 6, + +40 + #SOCK_DCCP + +SOCK_DCCP + + + ) + +41 + mSOCK_PACKET + = 10, + +44 + #SOCK_PACKET + +SOCK_PACKET + + + ) + +49 + mSOCK_CLOEXEC + = 02000000, + +51 + #SOCK_CLOEXEC + +SOCK_CLOEXEC + + + ) + +52 + mSOCK_NONBLOCK + = 00004000 + +54 + #SOCK_NONBLOCK + +SOCK_NONBLOCK + + + ) + + @/usr/include/bits/stdio-lock.h + +19 #i�de� +_BITS_STDIO_LOCK_H + + +20 + #_BITS_STDIO_LOCK_H + 1 + + ) + +22 + ~<b�s/libc-lock.h +> + +23 + ~<low�v�lock.h +> + +27 + #_IO_lock_�ex�nsive + 1 + + ) + +29 �ru� { + mlock +; + m�t +; * + mow�r +; } + t_IO_lock_t +; + +31 + #_IO_lock_���liz� + { +LLL_LOCK_INITIALIZER +, 0, +NULL + } + + ) + +33 + #_IO_lock_�� +( +_�me +) \ + +34 (( +_�me +��( +_IO_lock_t +� +_IO_lock_���liz� + , 0) + + ) + +36 + #_IO_lock_f�i +( +_�me +) \ + +37 ((�0) + + ) + +39 + #_IO_lock_lock +( +_�me +) \ + +41 * +__�lf + = +THREAD_SELF +; \ + +42 i�(( +_�me +). +ow�r + !� +__�lf +) \ + +44 + `�l_lock + (( +_�me +). +lock +, +LLL_PRIVATE +); \ + +45 ( +_�me +). +ow�r + = +__�lf +; \ + +47 ++( +_�me +). +�t +; \ + +48 } 0) + + ) + +50 + #_IO_lock_�ylock +( +_�me +) \ + +52 +__�su� + = 0; \ + +53 * +__�lf + = +THREAD_SELF +; \ + +54 i�(( +_�me +). +ow�r + !� +__�lf +) \ + +56 i�( + `�l_�ylock + (( +_�me +). +lock +) == 0) \ + +58 ( +_�me +). +ow�r + = +__�lf +; \ + +59 ( +_�me +). +�t + = 1; \ + +62 +__�su� + = +EBUSY +; \ + +65 ++( +_�me +). +�t +; \ + +66 +__�su� +; \ + +67 }) + + ) + +69 + #_IO_lock_u�ock +( +_�me +) \ + +71 i�(--( +_�me +). +�t + == 0) \ + +73 ( +_�me +). +ow�r + = +NULL +; \ + +74 + `�l_u�ock + (( +_�me +). +lock +, +LLL_PRIVATE +); \ + +76 } 0) + + ) + +80 + #_IO_��nup_�gi�_��t +( +_f� +, +_� +) \ + +81 + `__libc_��nup_�gi�_��t + ((( +_� +)-> +_�ags + & +_IO_USER_LOCK +�=�0, +_f� +, _�) + + ) + +82 + #_IO_��nup_�gi�_��t_n�rg +( +_f� +) \ + +83 + `__libc_��nup_�gi�_��t + (1, +_f� +, +NULL +) + + ) + +84 + #_IO_��nup_�gi�_�d +( +_do� +) \ + +85 + `__libc_��nup_�gi�_�d + ( +_do� +) + + ) + +87 #i� +def�ed + +_LIBC + && !def�ed +NOT_IN_libc + + +89 #ifde� +__EXCEPTIONS + + +90 + #_IO_acqu�e_lock +( +_� +) \ + +92 +_IO_FILE + * +_IO_acqu�e_lock_f�e + \ + +93 + `__��ibu�__ +(( + `��nup + ( +_IO_acqu�e_lock_f� +))) \ + +94 �( +_� +); \ + +95 + `_IO_�ockf�e + ( +_IO_acqu�e_lock_f�e +); + + ) + +96 + #_IO_acqu�e_lock_��r_�ags2 +( +_� +) \ + +98 +_IO_FILE + * +_IO_acqu�e_lock_f�e + \ + +99 + `__��ibu�__ +(( + `��nup + ( +_IO_acqu�e_lock_��r_�ags2_f� +))) \ + +100 �( +_� +); \ + +101 + `_IO_�ockf�e + ( +_IO_acqu�e_lock_f�e +); + + ) + +103 + #_IO_acqu�e_lock +( +_� +� +_IO_acqu�e_lock_�eds_ex��i�s_�ab�d + + + ) + +104 + #_IO_acqu�e_lock_��r_�ags2 +( +_� +� + `_IO_acqu�e_lock + (_�) + + ) + +106 + #_IO_��a�_lock +( +_� +�; } 0) + + ) + + @/usr/include/bits/timex.h + +18 #i�def +_BITS_TIMEX_H + + +19 + #_BITS_TIMEX_H + 1 + + ) + +21 + ~<b�s/ty�s.h +> + +25 + stimex + + +27 + mmodes +; + +28 +__sys��_��g_t + + moff�t +; + +29 +__sys��_��g_t + + m�eq +; + +30 +__sys��_��g_t + + mmax�r� +; + +31 +__sys��_��g_t + + me��r� +; + +32 + m��us +; + +33 +__sys��_��g_t + + mcڡ�t +; + +34 +__sys��_��g_t + + m�ecisi� +; + +35 +__sys��_��g_t + + mtޔ�� +; + +36 +timev� + + mtime +; + +37 +__sys��_��g_t + + mtick +; + +38 +__sys��_��g_t + + m�s�eq +; + +39 +__sys��_��g_t + + mj��r +; + +40 + mshi� +; + +41 +__sys��_��g_t + + m�ab� +; + +42 +__sys��_��g_t + + mj��t +; + +43 +__sys��_��g_t + + m�l�t +; + +44 +__sys��_��g_t + + m�r�t +; + +45 +__sys��_��g_t + + m�b�t +; + +47 + m�i +; + +56 + #ADJ_OFFSET + 0x0001 + + ) + +57 + #ADJ_FREQUENCY + 0x0002 + + ) + +58 + #ADJ_MAXERROR + 0x0004 + + ) + +59 + #ADJ_ESTERROR + 0x0008 + + ) + +60 + #ADJ_STATUS + 0x0010 + + ) + +61 + #ADJ_TIMECONST + 0x0020 + + ) + +62 + #ADJ_TAI + 0x0080 + + ) + +63 + #ADJ_MICRO + 0x1000 + + ) + +64 + #ADJ_NANO + 0x2000 + + ) + +65 + #ADJ_TICK + 0x4000 + + ) + +66 + #ADJ_OFFSET_SINGLESHOT + 0x8001 + + ) + +67 + #ADJ_OFFSET_SS_READ + 0xa001 + + ) + +70 + #MOD_OFFSET + +ADJ_OFFSET + + + ) + +71 + #MOD_FREQUENCY + +ADJ_FREQUENCY + + + ) + +72 + #MOD_MAXERROR + +ADJ_MAXERROR + + + ) + +73 + #MOD_ESTERROR + +ADJ_ESTERROR + + + ) + +74 + #MOD_STATUS + +ADJ_STATUS + + + ) + +75 + #MOD_TIMECONST + +ADJ_TIMECONST + + + ) + +76 + #MOD_CLKB + +ADJ_TICK + + + ) + +77 + #MOD_CLKA + +ADJ_OFFSET_SINGLESHOT + + + ) + +78 + #MOD_TAI + +ADJ_TAI + + + ) + +79 + #MOD_MICRO + +ADJ_MICRO + + + ) + +80 + #MOD_NANO + +ADJ_NANO + + + ) + +84 + #STA_PLL + 0x0001 + + ) + +85 + #STA_PPSFREQ + 0x0002 + + ) + +86 + #STA_PPSTIME + 0x0004 + + ) + +87 + #STA_FLL + 0x0008 + + ) + +89 + #STA_INS + 0x0010 + + ) + +90 + #STA_DEL + 0x0020 + + ) + +91 + #STA_UNSYNC + 0x0040 + + ) + +92 + #STA_FREQHOLD + 0x0080 + + ) + +94 + #STA_PPSSIGNAL + 0x0100 + + ) + +95 + #STA_PPSJITTER + 0x0200 + + ) + +96 + #STA_PPSWANDER + 0x0400 + + ) + +97 + #STA_PPSERROR + 0x0800 + + ) + +99 + #STA_CLOCKERR + 0x1000 + + ) + +100 + #STA_NANO + 0x2000 + + ) + +101 + #STA_MODE + 0x4000 + + ) + +102 + #STA_CLK + 0x8000 + + ) + +105 + #STA_RONLY + ( +STA_PPSSIGNAL + | +STA_PPSJITTER + | +STA_PPSWANDER + | \ + +106 +STA_PPSERROR + | +STA_CLOCKERR + | +STA_NANO + | +STA_MODE + | +STA_CLK +) + + ) + + @/usr/include/bits/typesizes.h + +19 #i�de� +_BITS_TYPES_H + + +23 #i�def +_BITS_TYPESIZES_H + + +24 + #_BITS_TYPESIZES_H + 1 + + ) + +30 #i� +def�ed + +__x86_64__ + && def�ed +__ILP32__ + + +31 + #__SYSCALL_SLONG_TYPE + +__SQUAD_TYPE + + + ) + +32 + #__SYSCALL_ULONG_TYPE + +__UQUAD_TYPE + + + ) + +34 + #__SYSCALL_SLONG_TYPE + +__SLONGWORD_TYPE + + + ) + +35 + #__SYSCALL_ULONG_TYPE + +__ULONGWORD_TYPE + + + ) + +38 + #__DEV_T_TYPE + +__UQUAD_TYPE + + + ) + +39 + #__UID_T_TYPE + +__U32_TYPE + + + ) + +40 + #__GID_T_TYPE + +__U32_TYPE + + + ) + +41 + #__INO_T_TYPE + +__SYSCALL_ULONG_TYPE + + + ) + +42 + #__INO64_T_TYPE + +__UQUAD_TYPE + + + ) + +43 + #__MODE_T_TYPE + +__U32_TYPE + + + ) + +44 #ifde� +__x86_64__ + + +45 + #__NLINK_T_TYPE + +__SYSCALL_ULONG_TYPE + + + ) + +46 + #__FSWORD_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +48 + #__NLINK_T_TYPE + +__UWORD_TYPE + + + ) + +49 + #__FSWORD_T_TYPE + +__SWORD_TYPE + + + ) + +51 + #__OFF_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +52 + #__OFF64_T_TYPE + +__SQUAD_TYPE + + + ) + +53 + #__PID_T_TYPE + +__S32_TYPE + + + ) + +54 + #__RLIM_T_TYPE + +__SYSCALL_ULONG_TYPE + + + ) + +55 + #__RLIM64_T_TYPE + +__UQUAD_TYPE + + + ) + +56 + #__BLKCNT_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +57 + #__BLKCNT64_T_TYPE + +__SQUAD_TYPE + + + ) + +58 + #__FSBLKCNT_T_TYPE + +__SYSCALL_ULONG_TYPE + + + ) + +59 + #__FSBLKCNT64_T_TYPE + +__UQUAD_TYPE + + + ) + +60 + #__FSFILCNT_T_TYPE + +__SYSCALL_ULONG_TYPE + + + ) + +61 + #__FSFILCNT64_T_TYPE + +__UQUAD_TYPE + + + ) + +62 + #__ID_T_TYPE + +__U32_TYPE + + + ) + +63 + #__CLOCK_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +64 + #__TIME_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +65 + #__USECONDS_T_TYPE + +__U32_TYPE + + + ) + +66 + #__SUSECONDS_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +67 + #__DADDR_T_TYPE + +__S32_TYPE + + + ) + +68 + #__KEY_T_TYPE + +__S32_TYPE + + + ) + +69 + #__CLOCKID_T_TYPE + +__S32_TYPE + + + ) + +70 + #__TIMER_T_TYPE + * + + ) + +71 + #__BLKSIZE_T_TYPE + +__SYSCALL_SLONG_TYPE + + + ) + +72 + #__FSID_T_TYPE + s�u� { +__v� +[2]; } + + ) + +73 + #__SSIZE_T_TYPE + +__SWORD_TYPE + + + ) + +75 #ifde� +__x86_64__ + + +79 + #__OFF_T_MATCHES_OFF64_T + 1 + + ) + +82 + #__INO_T_MATCHES_INO64_T + 1 + + ) + +86 + #__FD_SETSIZE + 1024 + + ) + + @/usr/include/bits/uio.h + +18 #i�! +def�ed + +_SYS_UIO_H + && !def�ed +_FCNTL_H + + +22 #i�de� +_BITS_UIO_H + + +23 + #_BITS_UIO_H + 1 + + ) + +25 + ~<sys/ty�s.h +> + +39 + #UIO_MAXIOV + 1024 + + ) + +43 + siovec + + +45 * + miov_ba� +; + +46 +size_t + + miov_�n +; + +52 #ifde� +__USE_GNU + + +53 #i� +def�ed + +_SYS_UIO_H + && !def�ed +_BITS_UIO_H_FOR_SYS_UIO_H + + +54 + #_BITS_UIO_H_FOR_SYS_UIO_H + 1 + + ) + +56 +__BEGIN_DECLS + + +59 +ssize_t + + $�o�ss_vm_�adv + ( +pid_t + +__pid +, cڡ +iovec + * +__lvec +, + +60 +__liov�t +, + +61 cڡ +iovec + * +__rvec +, + +62 +__riov�t +, + +63 +__�ags +) + +64 +__THROW +; + +67 +ssize_t + + $�o�ss_vm_wr�ev + ( +pid_t + +__pid +, cڡ +iovec + * +__lvec +, + +68 +__liov�t +, + +69 cڡ +iovec + * +__rvec +, + +70 +__riov�t +, + +71 +__�ags +) + +72 +__THROW +; + +74 +__END_DECLS + + + @/usr/include/bits/wchar.h + +19 #i�de� +_BITS_WCHAR_H + + +20 + #_BITS_WCHAR_H + 1 + + ) + +33 #ifde� +__WCHAR_MAX__ + + +34 + #__WCHAR_MAX + +__WCHAR_MAX__ + + + ) + +35 #�i� +L +'\0' - 1 > 0 + +36 + #__WCHAR_MAX + (0xffffffffu + +L +'\0') + + ) + +38 + #__WCHAR_MAX + (0x7ffffff�+ +L +'\0') + + ) + +41 #ifde� +__WCHAR_MIN__ + + +42 + #__WCHAR_MIN + +__WCHAR_MIN__ + + + ) + +43 #�i� +L +'\0' - 1 > 0 + +44 + #__WCHAR_MIN + ( +L +'\0' + 0) + + ) + +46 + #__WCHAR_MIN + (- +__WCHAR_MAX + - 1) + + ) + + @/usr/include/gnu/stubs.h + +6 #i�! +def�ed + +__x86_64__ + + +7 + ~<gnu/�ubs-32.h +> + +9 #i� +def�ed + +__x86_64__ + && def�ed +__LP64__ + + +10 + ~<gnu/�ubs-64.h +> + +12 #i� +def�ed + +__x86_64__ + && def�ed +__ILP32__ + + +13 + ~<gnu/�ubs-x32.h +> + + @/usr/include/linux/errno.h + +1 + ~<asm/��o.h +> + + @/usr/include/stdc-predef.h + +18 #i�def +_STDC_PREDEF_H + + +19 + #_STDC_PREDEF_H + 1 + + ) + +36 #ifde� +__GCC_IEC_559 + + +37 #i� +__GCC_IEC_559 + > 0 + +38 + #__STDC_IEC_559__ + 1 + + ) + +41 + #__STDC_IEC_559__ + 1 + + ) + +44 #ifde� +__GCC_IEC_559_COMPLEX + + +45 #i� +__GCC_IEC_559_COMPLEX + > 0 + +46 + #__STDC_IEC_559_COMPLEX__ + 1 + + ) + +49 + #__STDC_IEC_559_COMPLEX__ + 1 + + ) + +54 + #__STDC_ISO_10646__ + 201103L + + ) + +57 + #__STDC_NO_THREADS__ + 1 + + ) + + @/usr/include/asm-generic/ioctls.h + +1 #i�de� +__ASM_GENERIC_IOCTLS_H + + +2 + #__ASM_GENERIC_IOCTLS_H + + + ) + +4 + ~<l�ux/io�l.h +> + +19 + #TCGETS + 0x5401 + + ) + +20 + #TCSETS + 0x5402 + + ) + +21 + #TCSETSW + 0x5403 + + ) + +22 + #TCSETSF + 0x5404 + + ) + +23 + #TCGETA + 0x5405 + + ) + +24 + #TCSETA + 0x5406 + + ) + +25 + #TCSETAW + 0x5407 + + ) + +26 + #TCSETAF + 0x5408 + + ) + +27 + #TCSBRK + 0x5409 + + ) + +28 + #TCXONC + 0x540A + + ) + +29 + #TCFLSH + 0x540B + + ) + +30 + #TIOCEXCL + 0x540C + + ) + +31 + #TIOCNXCL + 0x540D + + ) + +32 + #TIOCSCTTY + 0x540E + + ) + +33 + #TIOCGPGRP + 0x540F + + ) + +34 + #TIOCSPGRP + 0x5410 + + ) + +35 + #TIOCOUTQ + 0x5411 + + ) + +36 + #TIOCSTI + 0x5412 + + ) + +37 + #TIOCGWINSZ + 0x5413 + + ) + +38 + #TIOCSWINSZ + 0x5414 + + ) + +39 + #TIOCMGET + 0x5415 + + ) + +40 + #TIOCMBIS + 0x5416 + + ) + +41 + #TIOCMBIC + 0x5417 + + ) + +42 + #TIOCMSET + 0x5418 + + ) + +43 + #TIOCGSOFTCAR + 0x5419 + + ) + +44 + #TIOCSSOFTCAR + 0x541A + + ) + +45 + #FIONREAD + 0x541B + + ) + +46 + #TIOCINQ + +FIONREAD + + + ) + +47 + #TIOCLINUX + 0x541C + + ) + +48 + #TIOCCONS + 0x541D + + ) + +49 + #TIOCGSERIAL + 0x541E + + ) + +50 + #TIOCSSERIAL + 0x541F + + ) + +51 + #TIOCPKT + 0x5420 + + ) + +52 + #FIONBIO + 0x5421 + + ) + +53 + #TIOCNOTTY + 0x5422 + + ) + +54 + #TIOCSETD + 0x5423 + + ) + +55 + #TIOCGETD + 0x5424 + + ) + +56 + #TCSBRKP + 0x5425 + + ) + +57 + #TIOCSBRK + 0x5427 + + ) + +58 + #TIOCCBRK + 0x5428 + + ) + +59 + #TIOCGSID + 0x5429 + + ) + +60 + #TCGETS2 + + `_IOR +('T', 0x2A, +�rmios2 +) + + ) + +61 + #TCSETS2 + + `_IOW +('T', 0x2B, +�rmios2 +) + + ) + +62 + #TCSETSW2 + + `_IOW +('T', 0x2C, +�rmios2 +) + + ) + +63 + #TCSETSF2 + + `_IOW +('T', 0x2D, +�rmios2 +) + + ) + +64 + #TIOCGRS485 + 0x542E + + ) + +65 #i�de� +TIOCSRS485 + + +66 + #TIOCSRS485 + 0x542F + + ) + +68 + #TIOCGPTN + + `_IOR +('T', 0x30, � + + ) + +69 + #TIOCSPTLCK + + `_IOW +('T', 0x31, � + + ) + +70 + #TIOCGDEV + + `_IOR +('T', 0x32, � + + ) + +71 + #TCGETX + 0x5432 + + ) + +72 + #TCSETX + 0x5433 + + ) + +73 + #TCSETXF + 0x5434 + + ) + +74 + #TCSETXW + 0x5435 + + ) + +75 + #TIOCSIG + + `_IOW +('T', 0x36, � + + ) + +76 + #TIOCVHANGUP + 0x5437 + + ) + +77 + #TIOCGPKT + + `_IOR +('T', 0x38, � + + ) + +78 + #TIOCGPTLCK + + `_IOR +('T', 0x39, � + + ) + +79 + #TIOCGEXCL + + `_IOR +('T', 0x40, � + + ) + +81 + #FIONCLEX + 0x5450 + + ) + +82 + #FIOCLEX + 0x5451 + + ) + +83 + #FIOASYNC + 0x5452 + + ) + +84 + #TIOCSERCONFIG + 0x5453 + + ) + +85 + #TIOCSERGWILD + 0x5454 + + ) + +86 + #TIOCSERSWILD + 0x5455 + + ) + +87 + #TIOCGLCKTRMIOS + 0x5456 + + ) + +88 + #TIOCSLCKTRMIOS + 0x5457 + + ) + +89 + #TIOCSERGSTRUCT + 0x5458 + + ) + +90 + #TIOCSERGETLSR + 0x5459 + + ) + +91 + #TIOCSERGETMULTI + 0x545A + + ) + +92 + #TIOCSERSETMULTI + 0x545B + + ) + +94 + #TIOCMIWAIT + 0x545C + + ) + +95 + #TIOCGICOUNT + 0x545D + + ) + +101 #i�de� +FIOQSIZE + + +102 + #FIOQSIZE + 0x5460 + + ) + +106 + #TIOCPKT_DATA + 0 + + ) + +107 + #TIOCPKT_FLUSHREAD + 1 + + ) + +108 + #TIOCPKT_FLUSHWRITE + 2 + + ) + +109 + #TIOCPKT_STOP + 4 + + ) + +110 + #TIOCPKT_START + 8 + + ) + +111 + #TIOCPKT_NOSTOP + 16 + + ) + +112 + #TIOCPKT_DOSTOP + 32 + + ) + +113 + #TIOCPKT_IOCTL + 64 + + ) + +115 + #TIOCSER_TEMT + 0x01 + + ) + + @/usr/include/asm-generic/socket.h + +1 #i�de� +__ASM_GENERIC_SOCKET_H + + +2 + #__ASM_GENERIC_SOCKET_H + + + ) + +4 + ~<asm/sockios.h +> + +7 + #SOL_SOCKET + 1 + + ) + +9 + #SO_DEBUG + 1 + + ) + +10 + #SO_REUSEADDR + 2 + + ) + +11 + #SO_TYPE + 3 + + ) + +12 + #SO_ERROR + 4 + + ) + +13 + #SO_DONTROUTE + 5 + + ) + +14 + #SO_BROADCAST + 6 + + ) + +15 + #SO_SNDBUF + 7 + + ) + +16 + #SO_RCVBUF + 8 + + ) + +17 + #SO_SNDBUFFORCE + 32 + + ) + +18 + #SO_RCVBUFFORCE + 33 + + ) + +19 + #SO_KEEPALIVE + 9 + + ) + +20 + #SO_OOBINLINE + 10 + + ) + +21 + #SO_NO_CHECK + 11 + + ) + +22 + #SO_PRIORITY + 12 + + ) + +23 + #SO_LINGER + 13 + + ) + +24 + #SO_BSDCOMPAT + 14 + + ) + +25 + #SO_REUSEPORT + 15 + + ) + +26 #i�de� +SO_PASSCRED + + +27 + #SO_PASSCRED + 16 + + ) + +28 + #SO_PEERCRED + 17 + + ) + +29 + #SO_RCVLOWAT + 18 + + ) + +30 + #SO_SNDLOWAT + 19 + + ) + +31 + #SO_RCVTIMEO + 20 + + ) + +32 + #SO_SNDTIMEO + 21 + + ) + +36 + #SO_SECURITY_AUTHENTICATION + 22 + + ) + +37 + #SO_SECURITY_ENCRYPTION_TRANSPORT + 23 + + ) + +38 + #SO_SECURITY_ENCRYPTION_NETWORK + 24 + + ) + +40 + #SO_BINDTODEVICE + 25 + + ) + +43 + #SO_ATTACH_FILTER + 26 + + ) + +44 + #SO_DETACH_FILTER + 27 + + ) + +45 + #SO_GET_FILTER + +SO_ATTACH_FILTER + + + ) + +47 + #SO_PEERNAME + 28 + + ) + +48 + #SO_TIMESTAMP + 29 + + ) + +49 + #SCM_TIMESTAMP + +SO_TIMESTAMP + + + ) + +51 + #SO_ACCEPTCONN + 30 + + ) + +53 + #SO_PEERSEC + 31 + + ) + +54 + #SO_PASSSEC + 34 + + ) + +55 + #SO_TIMESTAMPNS + 35 + + ) + +56 + #SCM_TIMESTAMPNS + +SO_TIMESTAMPNS + + + ) + +58 + #SO_MARK + 36 + + ) + +60 + #SO_TIMESTAMPING + 37 + + ) + +61 + #SCM_TIMESTAMPING + +SO_TIMESTAMPING + + + ) + +63 + #SO_PROTOCOL + 38 + + ) + +64 + #SO_DOMAIN + 39 + + ) + +66 + #SO_RXQ_OVFL + 40 + + ) + +68 + #SO_WIFI_STATUS + 41 + + ) + +69 + #SCM_WIFI_STATUS + +SO_WIFI_STATUS + + + ) + +70 + #SO_PEEK_OFF + 42 + + ) + +73 + #SO_NOFCS + 43 + + ) + +75 + #SO_LOCK_FILTER + 44 + + ) + +77 + #SO_SELECT_ERR_QUEUE + 45 + + ) + +79 + #SO_BUSY_POLL + 46 + + ) + +81 + #SO_MAX_PACING_RATE + 47 + + ) + + @/usr/include/asm/errno.h + +1 + ~<asm-g��ic/��o.h +> + + @/usr/include/bits/libc-lock.h + +19 #i�de� +_BITS_LIBC_LOCK_H + + +20 + #_BITS_LIBC_LOCK_H + 1 + + ) + +22 + ~<�h�ad.h +> + +23 + #__�ed_NULL + + + ) + +24 + ~<�ddef.h +> + +27 #ifde� +_LIBC + + +28 + ~<low�v�lock.h +> + +29 + ~<�s.h +> + +30 + ~<�h�ad-fun�i�s.h +> + +31 + ~<��o.h +> + +32 + ~<gnu/�ti�-groups.h +> + +36 #i� +def�ed + +_LIBC + || def�ed +_IO_MTSAFE_IO + + +37 #i�( +def�ed + +NOT_IN_libc + && !def�ed +IS_IN_lib�h�ad +�|| !def�ed +_LIBC + + +38 �ru� { +�h�ad_mu�x_t + + mmu�x +; } + t__libc_lock_�cursive_t +; + +40 �ru� { + mlock +; + m�t +; * + mow�r +; } + t__libc_lock_�cursive_t +; + +43 +__libc_lock_�cursive_�aque__ + + t__libc_lock_�cursive_t +; + +53 + #__libc_lock_def�e_�cursive +( +CLASS +, +NAME +) \ + +54 +CLASS + +__libc_lock_�cursive_t + +NAME +; + + ) + +58 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +59 #i� +LLL_LOCK_INITIALIZER + == 0 + +60 + #__libc_lock_def�e_���lized_�cursive +( +CLASS +, +NAME +) \ + +61 +CLASS + +__libc_lock_�cursive_t + +NAME +; + + ) + +63 + #__libc_lock_def�e_���lized_�cursive +( +CLASS +, +NAME +) \ + +64 +CLASS + +__libc_lock_�cursive_t + +NAME + = +_LIBC_LOCK_RECURSIVE_INITIALIZER +; + + ) + +66 + #_LIBC_LOCK_RECURSIVE_INITIALIZER + \ + +67 { +LLL_LOCK_INITIALIZER +, 0, +NULL + } + + ) + +69 + #__libc_lock_def�e_���lized_�cursive +( +CLASS +, +NAME +) \ + +70 +CLASS + +__libc_lock_�cursive_t + +NAME + = +_LIBC_LOCK_RECURSIVE_INITIALIZER +; + + ) + +71 + #_LIBC_LOCK_RECURSIVE_INITIALIZER + \ + +72 { +PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP +} + + ) + +76 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +77 + #__libc_lock_��_�cursive +( +NAME +) \ + +78 (( +NAME +��( +__libc_lock_�cursive_t +� +_LIBC_LOCK_RECURSIVE_INITIALIZER +, 0) + + ) + +80 + #__libc_lock_��_�cursive +( +NAME +) \ + +82 i�( +__�h�ad_mu�x_�� + !� +NULL +) \ + +84 +�h�ad_mu�x��_t + +__�� +; \ + +85 + `__�h�ad_mu�x��_�� + (& +__�� +); \ + +86 + `__�h�ad_mu�x��_��y� + (& +__�� +, +PTHREAD_MUTEX_RECURSIVE_NP +); \ + +87 + `__�h�ad_mu�x_�� + (&( +NAME +). +mu�x +, & +__�� +); \ + +88 + `__�h�ad_mu�x��_de�roy + (& +__�� +); \ + +90 } 0) + + ) + +94 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +95 + #__libc_lock_f�i_�cursive +( +NAME +�((�0) + + ) + +97 + #__libc_lock_f�i_�cursive +( +NAME +) \ + +98 + `__libc_maybe_�� + ( +__�h�ad_mu�x_de�roy +, (&( +NAME +). +mu�x +), 0) + + ) + +102 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +103 #i� +__OPTION_EGLIBC_BIG_MACROS + != 1 + +107 +__libc_lock_lock_�cursive_� + ( +__libc_lock_�cursive_t + *); + +108 +libc_hidd�_��o + ( +__libc_lock_lock_�cursive_� +); + +110 #i� +__OPTION_EGLIBC_BIG_MACROS + + +111 + #__libc_lock_lock_�cursive +( +NAME +) \ + +113 * +�lf + = +THREAD_SELF +; \ + +114 i�(( +NAME +). +ow�r + !� +�lf +) \ + +116 + `�l_lock + (( +NAME +). +lock +, +LLL_PRIVATE +); \ + +117 ( +NAME +). +ow�r + = +�lf +; \ + +119 ++( +NAME +). +�t +; \ + +120 } 0) + + ) + +122 + #__libc_lock_lock_�cursive +( +NAME +) \ + +123 + `__libc_lock_lock_�cursive_� + (&( +NAME +)) + + ) + +126 + #__libc_lock_lock_�cursive +( +NAME +) \ + +127 + `__libc_maybe_�� + ( +__�h�ad_mu�x_lock +, (&( +NAME +). +mu�x +), 0) + + ) + +131 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +132 #i� +__OPTION_EGLIBC_BIG_MACROS + != 1 + +136 +__libc_lock_�ylock_�cursive_� + ( +__libc_lock_�cursive_t + *); + +137 +libc_hidd�_��o + ( +__libc_lock_�ylock_�cursive_� +); + +139 #i� +__OPTION_EGLIBC_BIG_MACROS + + +140 + #__libc_lock_�ylock_�cursive +( +NAME +) \ + +142 +�su� + = 0; \ + +143 * +�lf + = +THREAD_SELF +; \ + +144 i�(( +NAME +). +ow�r + !� +�lf +) \ + +146 i�( + `�l_�ylock + (( +NAME +). +lock +) == 0) \ + +148 ( +NAME +). +ow�r + = +�lf +; \ + +149 ( +NAME +). +�t + = 1; \ + +152 +�su� + = +EBUSY +; \ + +155 ++( +NAME +). +�t +; \ + +156 +�su� +; \ + +157 }) + + ) + +159 + #__libc_lock_�ylock_�cursive +( +NAME +) \ + +160 + `__libc_lock_�ylock_�cursive_� + (&( +NAME +)) + + ) + +163 + #__libc_lock_�ylock_�cursive +( +NAME +) \ + +164 + `__libc_maybe_�� + ( +__�h�ad_mu�x_�ylock +, (&( +NAME +). +mu�x +), 0) + + ) + +168 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +169 #i� +__OPTION_EGLIBC_BIG_MACROS + != 1 + +173 +__libc_lock_u�ock_�cursive_� + ( +__libc_lock_�cursive_t + *); + +174 +libc_hidd�_��o + ( +__libc_lock_u�ock_�cursive_� +); + +176 #i� +__OPTION_EGLIBC_BIG_MACROS + + +178 + #__libc_lock_u�ock_�cursive +( +NAME +) \ + +180 i�(--( +NAME +). +�t + == 0) \ + +182 ( +NAME +). +ow�r + = +NULL +; \ + +183 + `�l_u�ock + (( +NAME +). +lock +, +LLL_PRIVATE +); \ + +185 } 0) + + ) + +187 + #__libc_lock_u�ock_�cursive +( +NAME +) \ + +188 + `__libc_lock_u�ock_�cursive_� + (&( +NAME +)) + + ) + +191 + #__libc_lock_u�ock_�cursive +( +NAME +) \ + +192 + `__libc_maybe_�� + ( +__�h�ad_mu�x_u�ock +, (&( +NAME +). +mu�x +), 0) + + ) + +199 +_�h�ad_��nup_push_de�r + ( +_�h�ad_��nup_buf�r + * +buf�r +, + +200 (* +rout�e +�(*), * +�g +); + +201 + `_�h�ad_��nup_p�_���e + ( +_�h�ad_��nup_buf�r + * +buf�r +, + +202 +execu� +); + +205 + #__libc_��nup_�gi�_��t +( +DOIT +, +FCT +, +ARG +) \ + +206 { +_�h�ad_��nup_buf�r + +_buf�r +; \ + +207 +_ava� +; \ + +208 i�( +DOIT +) { \ + +209 +_ava� + = + `PTFAVAIL + ( +_�h�ad_��nup_push_de�r +); \ + +210 i�( +_ava� +) { \ + +211 + `__libc_�f_��_�ways + ( +_�h�ad_��nup_push_de�r +, (& +_buf�r +, +FCT +, \ + +212 +ARG +)); \ + +214 +_buf�r +. +__rout�e + = ( +FCT +); \ + +215 +_buf�r +. +__�g + = ( +ARG +); \ + +218 +_ava� + = 0; \ + +219 } + + ) + +222 + #__libc_��nup_�gi�_�d +( +DOIT +) \ + +223 i�( +_ava� +) { \ + +224 + `__libc_�f_��_�ways + ( +_�h�ad_��nup_p�_���e +, (& +_buf�r +, +DOIT +));\ + +225 } i�( +DOIT +) \ + +226 +_buf�r +. + `__rout�e + (_buf�r. +__�g +); \ + +227 + } + + ) +} + +232 #ifde� +_LIBC + + +233 + ~"libc-lockP.h +" + + @/usr/include/gconv.h + +22 #i�de� +_GCONV_H + + +23 + #_GCONV_H + 1 + + ) + +25 + ~<�u�s.h +> + +26 + #__�ed_mb��e_t + + + ) + +27 + #__�ed_w�t_t + + + ) + +28 + ~<wch�.h +> + +29 + #__�ed_size_t + + + ) + +30 + #__�ed_wch�_t + + + ) + +31 + ~<�ddef.h +> + +34 + #__UNKNOWN_10646_CHAR + (( +wch�_t +�0xfffd) + + ) + +39 + m__GCONV_OK + = 0, + +40 + m__GCONV_NOCONV +, + +41 + m__GCONV_NODB +, + +42 + m__GCONV_NOMEM +, + +44 + m__GCONV_EMPTY_INPUT +, + +45 + m__GCONV_FULL_OUTPUT +, + +46 + m__GCONV_ILLEGAL_INPUT +, + +47 + m__GCONV_INCOMPLETE_INPUT +, + +49 + m__GCONV_ILLEGAL_DESCRIPTOR +, + +50 + m__GCONV_INTERNAL_ERROR + + +57 + m__GCONV_IS_LAST + = 0x0001, + +58 + m__GCONV_IGNORE_ERRORS + = 0x0002, + +59 + m__GCONV_SWAP + = 0x0004 + +64 + g__gc�v_�� +; + +65 + g__gc�v_��_d�a +; + +66 + g__gc�v_l�ded_obje� +; + +67 + g__gc�v_��s_d�a +; + +71 (* + t__gc�v_f� +�( + t__gc�v_�� + *, + t__gc�v_��_d�a + *, + +73 **, + tsize_t + *, , ); + +76 + $w�t_t + (* + t__gc�v_btowc_f� +�( + t__gc�v_�� + *, ); + +79 (* + t__gc�v_��_f� +�( + t__gc�v_�� + *); + +80 (* + t__gc�v_�d_f� +�( + t__gc�v_�� + *); + +84 (* + t__gc�v_��s_f� +�( + t__gc�v_�� + *, + +85 + t__gc�v_��_d�a + *, *, + +89 + tsize_t + *); + +92 (* + t__gc�v_��s_cڋxt_f� +) (*, const *, + +97 (* + t__gc�v_��s_qu�y_f� +) (const *, const ***, + +98 + tsize_t + *); + +101 (* + t__gc�v_��s_��_f� +) (**, const *); + +102 (* + t__gc�v_��s_�d_f� +) (*); + +104 + s__gc�v_��s_d�a + + +107 +__gc�v_��s_f� + +__��s_f� +; + +108 +__gc�v_��s_cڋxt_f� + +__��s_cڋxt_f� +; + +109 +__gc�v_��s_�d_f� + +__��s_�d_f� +; + +110 * +__d�a +; + +111 +__gc�v_��s_d�a + * +__�xt +; + +116 + s__gc�v_�� + + +118 +__gc�v_l�ded_obje� + * +__shlib_h�d� +; + +119 cڡ * +__mod�me +; + +121 +__cou�� +; + +123 * +__�om_�me +; + +124 * +__to_�me +; + +126 +__gc�v_f� + +__f� +; + +127 +__gc�v_btowc_f� + +__btowc_f� +; + +128 +__gc�v_��_f� + +__��_f� +; + +129 +__gc�v_�d_f� + +__�d_f� +; + +133 +__m�_�eded_�om +; + +134 +__max_�eded_�om +; + +135 +__m�_�eded_to +; + +136 +__max_�eded_to +; + +139 +__��eful +; + +141 * +__d�a +; + +146 + s__gc�v_��_d�a + + +148 * +__outbuf +; + +149 * +__outbu�nd +; + +153 +__�ags +; + +157 +__�vo�ti�_cou�� +; + +161 +__����_u� +; + +163 +__mb��e_t + * +__��� +; + +164 +__mb��e_t + +__��e +; + +168 +__gc�v_��s_d�a + * +__��s +; + +173 + s__gc�v_�fo + + +175 +size_t + +__n��s +; + +176 +__gc�v_�� + * +__��s +; + +177 +__ex�nsi�__ + +__gc�v_��_d�a + +__d�a + +__�ex�r +; + +178 } * + t__gc�v_t +; + + @/usr/include/gnu/stubs-32.h + +6 #ifde� +_LIBC + + +7 #�r� +A�li�ti�s + +may + +n� + +def�e + +the + +ma�o + +_LIBC + + +10 + #__�ub_ch�ags + + + ) + +11 + #__�ub_�ach + + + ) + +12 + #__�ub_fch�ags + + + ) + +13 + #__�ub_fd�ach + + + ) + +14 + #__�ub_g�y + + + ) + +15 + #__�ub_lchmod + + + ) + +16 + #__�ub_�voke + + + ) + +17 + #__�ub_��og� + + + ) + +18 + #__�ub_sig�tu� + + + ) + +19 + #__�ub_s�k + + + ) + +20 + #__�ub_�ty + + + ) + + @/usr/include/gnu/stubs-64.h + +6 #ifde� +_LIBC + + +7 #�r� +A�li�ti�s + +may + +n� + +def�e + +the + +ma�o + +_LIBC + + +10 + #__�ub_bd�ush + + + ) + +11 + #__�ub_ch�ags + + + ) + +12 + #__�ub_�ach + + + ) + +13 + #__�ub_fch�ags + + + ) + +14 + #__�ub_fd�ach + + + ) + +15 + #__�ub_g�msg + + + ) + +16 + #__�ub_g�y + + + ) + +17 + #__�ub_lchmod + + + ) + +18 + #__�ub_putmsg + + + ) + +19 + #__�ub_�voke + + + ) + +20 + #__�ub_��og� + + + ) + +21 + #__�ub_sig�tu� + + + ) + +22 + #__�ub_s�k + + + ) + +23 + #__�ub_�ty + + + ) + + @/usr/include/gnu/stubs-x32.h + +6 #ifde� +_LIBC + + +7 #�r� +A�li�ti�s + +may + +n� + +def�e + +the + +ma�o + +_LIBC + + +10 + #__�ub_bd�ush + + + ) + +11 + #__�ub_ch�ags + + + ) + +12 + #__�ub_���_modu� + + + ) + +13 + #__�ub_�ach + + + ) + +14 + #__�ub_fch�ags + + + ) + +15 + #__�ub_fd�ach + + + ) + +16 + #__�ub_g�_k��l_syms + + + ) + +17 + #__�ub_g�msg + + + ) + +18 + #__�ub_g�y + + + ) + +19 + #__�ub_lchmod + + + ) + +20 + #__�ub_nfs�rv�l + + + ) + +21 + #__�ub_putmsg + + + ) + +22 + #__�ub_qu�y_modu� + + + ) + +23 + #__�ub_�voke + + + ) + +24 + #__�ub_��og� + + + ) + +25 + #__�ub_sig�tu� + + + ) + +26 + #__�ub_s�k + + + ) + +27 + #__�ub_�ty + + + ) + +28 + #__�ub_u�lib + + + ) + + @/usr/include/wchar.h + +23 #i�de� +_WCHAR_H + + +25 #i�! +def�ed + +__�ed_mb��e_t + && !def�ed +__�ed_w�t_t + + +26 + #_WCHAR_H + 1 + + ) + +27 + ~<�u�s.h +> + +30 #ifde� +_WCHAR_H + + +32 + #__�ed___FILE + + + ) + +33 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K + + +34 + #__�ed_FILE + + + ) + +36 + ~<�dio.h +> + +38 + #__�ed___va_li� + + + ) + +39 + ~<�d�g.h +> + +41 + ~<b�s/wch�.h +> + +44 + #__�ed_size_t + + + ) + +45 + #__�ed_wch�_t + + + ) + +46 + #__�ed_NULL + + + ) + +48 #i� +def�ed + +_WCHAR_H + || def�ed +__�ed_w�t_t + || !def�ed +__WINT_TYPE__ + + +49 #unde� +__�ed_w�t_t + + +50 + #__�ed_w�t_t + + + ) + +51 + ~<�ddef.h +> + +55 #i�de� +_WINT_T + + +60 + #_WINT_T + + + ) + +61 + tw�t_t +; + +65 #i� +def�ed + +__�lu�lus + && def�ed +_GLIBCPP_USE_NAMESPACES + \ + +66 && +def�ed + +__WINT_TYPE__ + + +67 +__BEGIN_NAMESPACE_STD + + +68 +__WINT_TYPE__ + + tw�t_t +; + +69 + g__END_NAMESPACE_STD + + +74 #i� +def�ed + +__�lu�lus + && +__GNUC_PREREQ + (4, 4) + +75 + #__CORRECT_ISO_CPP_WCHAR_H_PROTO + + + ) + +79 #i�( +def�ed + +_WCHAR_H + || def�ed +__�ed_mb��e_t +�&& !def�ed +____mb��e_t_def�ed + + +80 + #____mb��e_t_def�ed + 1 + + ) + +84 + m__cou� +; + +87 #ifde� +__WINT_TYPE__ + + +88 +__WINT_TYPE__ + + m__wch +; + +90 +w�t_t + + m__wch +; + +92 + m__wchb +[4]; + +93 } + m__v�ue +; + +94 } + t__mb��e_t +; + +96 #unde� +__�ed_mb��e_t + + +101 #ifde� +_WCHAR_H + + +103 #i�de� +__mb��e_t_def�ed + + +104 +__BEGIN_NAMESPACE_C99 + + +106 +__mb��e_t + + tmb��e_t +; + +107 + g__END_NAMESPACE_C99 + + +108 + #__mb��e_t_def�ed + 1 + + ) + +111 #ifde� +__USE_GNU + + +112 + $__USING_NAMESPACE_C99 +( +mb��e_t +) + +115 #i�de� +WCHAR_MIN + + +117 + #WCHAR_MIN + +__WCHAR_MIN + + + ) + +118 + #WCHAR_MAX + +__WCHAR_MAX + + + ) + +121 #i�de� +WEOF + + +122 + #WEOF + (0xffffffffu) + + ) + +127 #i� +def�ed + +__USE_XOPEN + && !def�ed +__USE_UNIX98 + + +128 + ~<w�y�.h +> + +132 +__BEGIN_DECLS + + +134 +__BEGIN_NAMESPACE_STD + + +137 +tm +; + +138 +__END_NAMESPACE_STD + + +142 + $__USING_NAMESPACE_STD +( +tm +) + +145 +__BEGIN_NAMESPACE_STD + + +147 +wch�_t + * + $wcs�y + ( +wch�_t + * +__��ri� + +__de� +, + +148 cڡ +wch�_t + * +__��ri� + +__�c +� +__THROW +; + +150 +wch�_t + * + $wc��y + ( +wch�_t + * +__��ri� + +__de� +, + +151 cڡ +wch�_t + * +__��ri� + +__�c +, +size_t + +__n +) + +152 +__THROW +; + +155 +wch�_t + * + $wcs�t + ( +wch�_t + * +__��ri� + +__de� +, + +156 cڡ +wch�_t + * +__��ri� + +__�c +� +__THROW +; + +158 +wch�_t + * + $wc��t + ( +wch�_t + * +__��ri� + +__de� +, + +159 cڡ +wch�_t + * +__��ri� + +__�c +, +size_t + +__n +) + +160 +__THROW +; + +163 + $wcscmp + (cڡ +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +) + +164 +__THROW + +__��ibu�_pu�__ +; + +166 + $wc�cmp + (cڡ +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +, +size_t + +__n +) + +167 +__THROW + +__��ibu�_pu�__ +; + +168 +__END_NAMESPACE_STD + + +170 #ifde� +__USE_XOPEN2K8 + + +172 + $wcs��cmp + (cڡ +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +� +__THROW +; + +175 + $wc���cmp + (cڡ +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +, + +176 +size_t + +__n +� +__THROW +; + +180 + ~<xlo��.h +> + +182 + $wcs��cmp_l + (cڡ +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +, + +183 +__lo��_t + +__loc +� +__THROW +; + +185 + $wc���cmp_l + (cڡ +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +, + +186 +size_t + +__n +, +__lo��_t + +__loc +� +__THROW +; + +189 +__BEGIN_NAMESPACE_STD + + +192 + $wcsc�l + (cڡ +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +� +__THROW +; + +196 +size_t + + $wcsx�m + ( +wch�_t + * +__��ri� + +__s1 +, + +197 cڡ +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +� +__THROW +; + +198 +__END_NAMESPACE_STD + + +200 #ifde� +__USE_XOPEN2K8 + + +206 + $wcsc�l_l + (cڡ +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +, + +207 +__lo��_t + +__loc +� +__THROW +; + +212 +size_t + + $wcsx�m_l + ( +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +, + +213 +size_t + +__n +, +__lo��_t + +__loc +� +__THROW +; + +216 +wch�_t + * + $wcsdup + (cڡ +wch�_t + * +__s +� +__THROW + +__��ibu�_m�loc__ +; + +219 +__BEGIN_NAMESPACE_STD + + +221 #ifde� +__CORRECT_ISO_CPP_WCHAR_H_PROTO + + +222 "C++" +wch�_t + * + $wcschr + ( +wch�_t + * +__wcs +, wch�_� +__wc +) + +223 +__THROW + + `__asm + ("wcschr"� +__��ibu�_pu�__ +; + +224 "C++" cڡ +wch�_t + * + $wcschr + (cڡ +wch�_t + * +__wcs +, wch�_� +__wc +) + +225 +__THROW + + `__asm + ("wcschr"� +__��ibu�_pu�__ +; + +227 +wch�_t + * + $wcschr + (cڡ +wch�_t + * +__wcs +, wch�_� +__wc +) + +228 +__THROW + +__��ibu�_pu�__ +; + +231 #ifde� +__CORRECT_ISO_CPP_WCHAR_H_PROTO + + +232 "C++" +wch�_t + * + $wc�chr + ( +wch�_t + * +__wcs +, wch�_� +__wc +) + +233 +__THROW + + `__asm + ("wc�chr"� +__��ibu�_pu�__ +; + +234 "C++" cڡ +wch�_t + * + $wc�chr + (cڡ +wch�_t + * +__wcs +, wch�_� +__wc +) + +235 +__THROW + + `__asm + ("wc�chr"� +__��ibu�_pu�__ +; + +237 +wch�_t + * + $wc�chr + (cڡ +wch�_t + * +__wcs +, wch�_� +__wc +) + +238 +__THROW + +__��ibu�_pu�__ +; + +240 +__END_NAMESPACE_STD + + +242 #ifde� +__USE_GNU + + +245 +wch�_t + * + $wcsch�ul + (cڡ +wch�_t + * +__s +, wch�_� +__wc +) + +246 +__THROW + +__��ibu�_pu�__ +; + +249 +__BEGIN_NAMESPACE_STD + + +252 +size_t + + $wcsc�n + (cڡ +wch�_t + * +__wcs +, cڡ wch�_�* +__�je� +) + +253 +__THROW + +__��ibu�_pu�__ +; + +256 +size_t + + $wcs�n + (cڡ +wch�_t + * +__wcs +, cڡ wch�_�* +__ac�� +) + +257 +__THROW + +__��ibu�_pu�__ +; + +259 #ifde� +__CORRECT_ISO_CPP_WCHAR_H_PROTO + + +260 "C++" +wch�_t + * + $wc�brk + ( +wch�_t + * +__wcs +, cڡ wch�_�* +__ac�� +) + +261 +__THROW + + `__asm + ("wc�brk"� +__��ibu�_pu�__ +; + +262 "C++" cڡ +wch�_t + * + $wc�brk + (cڡ +wch�_t + * +__wcs +, + +263 cڡ +wch�_t + * +__ac�� +) + +264 +__THROW + + `__asm + ("wc�brk"� +__��ibu�_pu�__ +; + +266 +wch�_t + * + $wc�brk + (cڡ +wch�_t + * +__wcs +, cڡ wch�_�* +__ac�� +) + +267 +__THROW + +__��ibu�_pu�__ +; + +270 #ifde� +__CORRECT_ISO_CPP_WCHAR_H_PROTO + + +271 "C++" +wch�_t + * + $wcs�r + ( +wch�_t + * +__hay�ack +, cڡ wch�_�* +__�ed� +) + +272 +__THROW + + `__asm + ("wcs�r"� +__��ibu�_pu�__ +; + +273 "C++" cڡ +wch�_t + * + $wcs�r + (cڡ +wch�_t + * +__hay�ack +, + +274 cڡ +wch�_t + * +__�ed� +) + +275 +__THROW + + `__asm + ("wcs�r"� +__��ibu�_pu�__ +; + +277 +wch�_t + * + $wcs�r + (cڡ +wch�_t + * +__hay�ack +, cڡ wch�_�* +__�ed� +) + +278 +__THROW + +__��ibu�_pu�__ +; + +282 +wch�_t + * + $wc�ok + ( +wch�_t + * +__��ri� + +__s +, + +283 cڡ +wch�_t + * +__��ri� + +__d�im +, + +284 +wch�_t + ** +__��ri� + +__�r +� +__THROW +; + +287 +size_t + + $wc�� + (cڡ +wch�_t + * +__s +� +__THROW + +__��ibu�_pu�__ +; + +288 +__END_NAMESPACE_STD + + +290 #ifde� +__USE_XOPEN + + +292 #ifde� +__CORRECT_ISO_CPP_WCHAR_H_PROTO + + +293 "C++" +wch�_t + * + $wcswcs + ( +wch�_t + * +__hay�ack +, cڡ wch�_�* +__�ed� +) + +294 +__THROW + + `__asm + ("wcswcs"� +__��ibu�_pu�__ +; + +295 "C++" cڡ +wch�_t + * + $wcswcs + (cڡ +wch�_t + * +__hay�ack +, + +296 cڡ +wch�_t + * +__�ed� +) + +297 +__THROW + + `__asm + ("wcswcs"� +__��ibu�_pu�__ +; + +299 +wch�_t + * + $wcswcs + (cڡ +wch�_t + * +__hay�ack +, cڡ wch�_�* +__�ed� +) + +300 +__THROW + +__��ibu�_pu�__ +; + +304 #ifde� +__USE_XOPEN2K8 + + +306 +size_t + + $wc��n + (cڡ +wch�_t + * +__s +, +size_t + +__max�n +) + +307 +__THROW + +__��ibu�_pu�__ +; + +311 +__BEGIN_NAMESPACE_STD + + +313 #ifde� +__CORRECT_ISO_CPP_WCHAR_H_PROTO + + +314 "C++" +wch�_t + * + $wmemchr + ( +wch�_t + * +__s +, wch�_� +__c +, +size_t + +__n +) + +315 +__THROW + + `__asm + ("wmemchr"� +__��ibu�_pu�__ +; + +316 "C++" cڡ +wch�_t + * + $wmemchr + (cڡ +wch�_t + * +__s +, wch�_� +__c +, + +317 +size_t + +__n +) + +318 +__THROW + + `__asm + ("wmemchr"� +__��ibu�_pu�__ +; + +320 +wch�_t + * + $wmemchr + (cڡ +wch�_t + * +__s +, wch�_� +__c +, +size_t + +__n +) + +321 +__THROW + +__��ibu�_pu�__ +; + +325 + $wmemcmp + (cڡ +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +, +size_t + +__n +) + +326 +__THROW + +__��ibu�_pu�__ +; + +329 +wch�_t + * + $wmem�y + ( +wch�_t + * +__��ri� + +__s1 +, + +330 cڡ +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +� +__THROW +; + +334 +wch�_t + * + $wmemmove + ( +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +, +size_t + +__n +) + +335 +__THROW +; + +338 +wch�_t + * + $wmem�t + ( +wch�_t + * +__s +, wch�_� +__c +, +size_t + +__n +� +__THROW +; + +339 +__END_NAMESPACE_STD + + +341 #ifde� +__USE_GNU + + +344 +wch�_t + * + $wmemp�y + ( +wch�_t + * +__��ri� + +__s1 +, + +345 cڡ +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +) + +346 +__THROW +; + +350 +__BEGIN_NAMESPACE_STD + + +353 +w�t_t + + $btowc + ( +__c +� +__THROW +; + +357 + $w�ob + ( +w�t_t + +__c +� +__THROW +; + +361 + $mbs�� + (cڡ +mb��e_t + * +__ps +� +__THROW + +__��ibu�_pu�__ +; + +365 +size_t + + $mb�owc + ( +wch�_t + * +__��ri� + +__pwc +, + +366 cڡ * +__��ri� + +__s +, +size_t + +__n +, + +367 +mb��e_t + * +__��ri� + +__p +� +__THROW +; + +370 +size_t + + $w�tomb + (* +__��ri� + +__s +, +wch�_t + +__wc +, + +371 +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +374 +size_t + + $__mb�� + (cڡ * +__��ri� + +__s +, +size_t + +__n +, + +375 +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +376 +size_t + + $mb�� + (cڡ * +__��ri� + +__s +, +size_t + +__n +, + +377 +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +378 +__END_NAMESPACE_STD + + +380 #ifde� +__USE_EXTERN_INLINES + + +386 +w�t_t + + $__btowc_��s + ( +__c +� + `__asm + ("btowc"); + +387 +__ex��_�l�e + +w�t_t + + +388 + `__NTH + ( + $btowc + ( +__c +)) + +389 { ( + `__bu�t�_cڡ�t_p + ( +__c +) && __c >= '\0' && __c <= '\x7f' + +390 ? ( +w�t_t +� +__c + : + `__btowc_��s + (__c)); + } +} + +392 + $__w�ob_��s + ( +w�t_t + +__c +� + `__asm + ("wctob"); + +393 +__ex��_�l�e + + +394 + `__NTH + ( + $w�ob + ( +w�t_t + +__wc +)) + +395 { ( + `__bu�t�_cڡ�t_p + ( +__wc +�&& __w�>� +L +'\0' && __wc <= L'\x7f' + +396 ? (� +__wc + : + `__w�ob_��s + (__wc)); + } +} + +398 +__ex��_�l�e + +size_t + + +399 +__NTH + ( + $mb�� + (cڡ * +__��ri� + +__s +, +size_t + +__n +, + +400 +mb��e_t + * +__��ri� + +__ps +)) + +401 { ( +__ps + !� +NULL + + +402 ? + `mb�owc + ( +NULL +, +__s +, +__n +, +__ps +�: + `__mb�� + (__s, __n, NULL)); + } +} + +405 +__BEGIN_NAMESPACE_STD + + +408 +size_t + + $mb�towcs + ( +wch�_t + * +__��ri� + +__d� +, + +409 cڡ ** +__��ri� + +__�c +, +size_t + +__�n +, + +410 +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +414 +size_t + + $wc�tombs + (* +__��ri� + +__d� +, + +415 cڡ +wch�_t + ** +__��ri� + +__�c +, +size_t + +__�n +, + +416 +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +417 +__END_NAMESPACE_STD + + +420 #ifdef +__USE_XOPEN2K8 + + +423 +size_t + + $mb��owcs + ( +wch�_t + * +__��ri� + +__d� +, + +424 cڡ ** +__��ri� + +__�c +, +size_t + +__nmc +, + +425 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +429 +size_t + + $wc��ombs + (* +__��ri� + +__d� +, + +430 cڡ +wch�_t + ** +__��ri� + +__�c +, + +431 +size_t + +__nwc +, size_� +__�n +, + +432 +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +437 #ifde� +__USE_XOPEN + + +439 + $wcwidth + ( +wch�_t + +__c +� +__THROW +; + +443 + $wcswidth + (cڡ +wch�_t + * +__s +, +size_t + +__n +� +__THROW +; + +447 +__BEGIN_NAMESPACE_STD + + +450 + $wc�od + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +451 +wch�_t + ** +__��ri� + +__�d�r +� +__THROW +; + +452 +__END_NAMESPACE_STD + + +454 #ifde� +__USE_ISOC99 + + +455 +__BEGIN_NAMESPACE_C99 + + +457 + $wc�of + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +458 +wch�_t + ** +__��ri� + +__�d�r +� +__THROW +; + +459 + $wc��d + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +460 +wch�_t + ** +__��ri� + +__�d�r +� +__THROW +; + +461 +__END_NAMESPACE_C99 + + +465 +__BEGIN_NAMESPACE_STD + + +468 + $wc�� + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +469 +wch�_t + ** +__��ri� + +__�d�r +, +__ba� +� +__THROW +; + +473 + $wc�oul + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +474 +wch�_t + ** +__��ri� + +__�d�r +, +__ba� +) + +475 +__THROW +; + +476 +__END_NAMESPACE_STD + + +478 #ifde� +__USE_ISOC99 + + +479 +__BEGIN_NAMESPACE_C99 + + +482 +__ex�nsi�__ + + +483 + $wc��l + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +484 +wch�_t + ** +__��ri� + +__�d�r +, +__ba� +) + +485 +__THROW +; + +489 +__ex�nsi�__ + + +490 + $wc�ou� + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +491 +wch�_t + ** +__��ri� + +__�d�r +, + +492 +__ba� +� +__THROW +; + +493 +__END_NAMESPACE_C99 + + +496 #ifde� +__USE_GNU + + +499 +__ex�nsi�__ + + +500 + $wc�oq + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +501 +wch�_t + ** +__��ri� + +__�d�r +, +__ba� +) + +502 +__THROW +; + +506 +__ex�nsi�__ + + +507 + $wc�ouq + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +508 +wch�_t + ** +__��ri� + +__�d�r +, + +509 +__ba� +� +__THROW +; + +512 #ifde� +__USE_GNU + + +526 + ~<xlo��.h +> + +530 + $wc��_l + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +531 +wch�_t + ** +__��ri� + +__�d�r +, +__ba� +, + +532 +__lo��_t + +__loc +� +__THROW +; + +534 + $wc�oul_l + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +535 +wch�_t + ** +__��ri� + +__�d�r +, + +536 +__ba� +, +__lo��_t + +__loc +� +__THROW +; + +538 +__ex�nsi�__ + + +539 + $wc��l_l + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +540 +wch�_t + ** +__��ri� + +__�d�r +, + +541 +__ba� +, +__lo��_t + +__loc +� +__THROW +; + +543 +__ex�nsi�__ + + +544 + $wc�ou�_l + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +545 +wch�_t + ** +__��ri� + +__�d�r +, + +546 +__ba� +, +__lo��_t + +__loc +) + +547 +__THROW +; + +549 + $wc�od_l + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +550 +wch�_t + ** +__��ri� + +__�d�r +, +__lo��_t + +__loc +) + +551 +__THROW +; + +553 + $wc�of_l + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +554 +wch�_t + ** +__��ri� + +__�d�r +, +__lo��_t + +__loc +) + +555 +__THROW +; + +557 + $wc��d_l + (cڡ +wch�_t + * +__��ri� + +__Ō +, + +558 +wch�_t + ** +__��ri� + +__�d�r +, + +559 +__lo��_t + +__loc +� +__THROW +; + +563 #ifde� +__USE_XOPEN2K8 + + +566 +wch�_t + * + $w��y + ( +wch�_t + * +__��ri� + +__de� +, + +567 cڡ +wch�_t + * +__��ri� + +__�c +� +__THROW +; + +571 +wch�_t + * + $w�n�y + ( +wch�_t + * +__��ri� + +__de� +, + +572 cڡ +wch�_t + * +__��ri� + +__�c +, +size_t + +__n +) + +573 +__THROW +; + +580 +__FILE + * + $ݒ_wmem��am + ( +wch�_t + ** +__bu�oc +, +size_t + * +__siz�oc +� +__THROW +; + +583 #i� +def�ed + +__USE_ISOC95 + || def�ed +__USE_UNIX98 + + +584 +__BEGIN_NAMESPACE_STD + + +587 + $fwide + ( +__FILE + * +__� +, +__mode +� +__THROW +; + +594 + `fw��tf + ( +__FILE + * +__��ri� + +__��am +, + +595 cڡ +wch�_t + * +__��ri� + +__f�m� +, ...) + +601 + `w��tf + (cڡ +wch�_t + * +__��ri� + +__f�m� +, ...) + +604 + $sw��tf + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +605 cڡ +wch�_t + * +__��ri� + +__f�m� +, ...) + +606 +__THROW + ; + +612 + `vfw��tf + ( +__FILE + * +__��ri� + +__s +, + +613 cڡ +wch�_t + * +__��ri� + +__f�m� +, + +614 +__gnuc_va_li� + +__�g +) + +620 + `vw��tf + (cڡ +wch�_t + * +__��ri� + +__f�m� +, + +621 +__gnuc_va_li� + +__�g +) + +625 + $vsw��tf + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +626 cڡ +wch�_t + * +__��ri� + +__f�m� +, + +627 +__gnuc_va_li� + +__�g +) + +628 +__THROW + ; + +635 + `fws�nf + ( +__FILE + * +__��ri� + +__��am +, + +636 cڡ +wch�_t + * +__��ri� + +__f�m� +, ...) + +642 + `ws�nf + (cڡ +wch�_t + * +__��ri� + +__f�m� +, ...) + +645 + $sws�nf + (cڡ +wch�_t + * +__��ri� + +__s +, + +646 cڡ +wch�_t + * +__��ri� + +__f�m� +, ...) + +647 +__THROW + ; + +649 #i� +def�ed + +__USE_ISOC99 + && !def�ed +__USE_GNU + \ + +650 && (! +def�ed + +__LDBL_COMPAT + || !def�ed +__REDIRECT +) \ + +651 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +652 #ifde� +__REDIRECT + + +656 + `__REDIRECT + ( +fws�nf +, ( +__FILE + * +__��ri� + +__��am +, + +657 cڡ +wch�_t + * +__��ri� + +__f�m� +, ...), + +658 +__isoc99_fws�nf +) + +660 + `__REDIRECT + ( +ws�nf +, (cڡ +wch�_t + * +__��ri� + +__f�m� +, ...), + +661 +__isoc99_ws�nf +) + +663 + `__REDIRECT_NTH + ( +sws�nf +, (cڡ +wch�_t + * +__��ri� + +__s +, + +664 cڡ +wch�_t + * +__��ri� + +__f�m� +, + +665 ...), +__isoc99_sws�nf +) + +668 + `__isoc99_fws�nf + ( +__FILE + * +__��ri� + +__��am +, + +669 cڡ +wch�_t + * +__��ri� + +__f�m� +, ...); + +670 + `__isoc99_ws�nf + (cڡ +wch�_t + * +__��ri� + +__f�m� +, ...); + +671 + $__isoc99_sws�nf + (cڡ +wch�_t + * +__��ri� + +__s +, + +672 cڡ +wch�_t + * +__��ri� + +__f�m� +, ...) + +673 +__THROW +; + +674 + #fws�nf + +__isoc99_fws�nf + + + ) + +675 + #ws�nf + +__isoc99_ws�nf + + + ) + +676 + #sws�nf + +__isoc99_sws�nf + + + ) + +680 +__END_NAMESPACE_STD + + +683 #ifde� +__USE_ISOC99 + + +684 +__BEGIN_NAMESPACE_C99 + + +689 + `vfws�nf + ( +__FILE + * +__��ri� + +__s +, + +690 cڡ +wch�_t + * +__��ri� + +__f�m� +, + +691 +__gnuc_va_li� + +__�g +) + +697 + `vws�nf + (cڡ +wch�_t + * +__��ri� + +__f�m� +, + +698 +__gnuc_va_li� + +__�g +) + +701 + $vsws�nf + (cڡ +wch�_t + * +__��ri� + +__s +, + +702 cڡ +wch�_t + * +__��ri� + +__f�m� +, + +703 +__gnuc_va_li� + +__�g +) + +704 +__THROW + ; + +706 #i�! +def�ed + +__USE_GNU + \ + +707 && (! +def�ed + +__LDBL_COMPAT + || !def�ed +__REDIRECT +) \ + +708 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +709 #ifde� +__REDIRECT + + +710 + `__REDIRECT + ( +vfws�nf +, ( +__FILE + * +__��ri� + +__s +, + +711 cڡ +wch�_t + * +__��ri� + +__f�m� +, + +712 +__gnuc_va_li� + +__�g +), +__isoc99_vfws�nf +) + +714 + `__REDIRECT + ( +vws�nf +, (cڡ +wch�_t + * +__��ri� + +__f�m� +, + +715 +__gnuc_va_li� + +__�g +), +__isoc99_vws�nf +) + +717 + `__REDIRECT_NTH + ( +vsws�nf +, (cڡ +wch�_t + * +__��ri� + +__s +, + +718 cڡ +wch�_t + * +__��ri� + +__f�m� +, + +719 +__gnuc_va_li� + +__�g +), +__isoc99_vsws�nf +) + +722 + `__isoc99_vfws�nf + ( +__FILE + * +__��ri� + +__s +, + +723 cڡ +wch�_t + * +__��ri� + +__f�m� +, + +724 +__gnuc_va_li� + +__�g +); + +725 + `__isoc99_vws�nf + (cڡ +wch�_t + * +__��ri� + +__f�m� +, + +726 +__gnuc_va_li� + +__�g +); + +727 + $__isoc99_vsws�nf + (cڡ +wch�_t + * +__��ri� + +__s +, + +728 cڡ +wch�_t + * +__��ri� + +__f�m� +, + +729 +__gnuc_va_li� + +__�g +� +__THROW +; + +730 + #vfws�nf + +__isoc99_vfws�nf + + + ) + +731 + #vws�nf + +__isoc99_vws�nf + + + ) + +732 + #vsws�nf + +__isoc99_vsws�nf + + + ) + +736 +__END_NAMESPACE_C99 + + +740 +__BEGIN_NAMESPACE_STD + + +745 +w�t_t + + `fg�wc + ( +__FILE + * +__��am +); + +746 +w�t_t + + `g�wc + ( +__FILE + * +__��am +); + +752 +w�t_t + + `g�wch� + (); + +759 +w�t_t + + `�utwc + ( +wch�_t + +__wc +, +__FILE + * +__��am +); + +760 +w�t_t + + `putwc + ( +wch�_t + +__wc +, +__FILE + * +__��am +); + +766 +w�t_t + + `putwch� + ( +wch�_t + +__wc +); + +774 +wch�_t + * + `fg�ws + (wch�_�* +__��ri� + +__ws +, +__n +, + +775 +__FILE + * +__��ri� + +__��am +); + +781 + `�utws + (cڡ +wch�_t + * +__��ri� + +__ws +, + +782 +__FILE + * +__��ri� + +__��am +); + +789 +w�t_t + + `ung�wc + (w�t_� +__wc +, +__FILE + * +__��am +); + +790 +__END_NAMESPACE_STD + + +793 #ifde� +__USE_GNU + + +801 +w�t_t + + `g�wc_u�ocked + ( +__FILE + * +__��am +); + +802 +w�t_t + + `g�wch�_u�ocked + (); + +810 +w�t_t + + `fg�wc_u�ocked + ( +__FILE + * +__��am +); + +818 +w�t_t + + `�utwc_u�ocked + ( +wch�_t + +__wc +, +__FILE + * +__��am +); + +827 +w�t_t + + `putwc_u�ocked + ( +wch�_t + +__wc +, +__FILE + * +__��am +); + +828 +w�t_t + + `putwch�_u�ocked + ( +wch�_t + +__wc +); + +837 +wch�_t + * + `fg�ws_u�ocked + (wch�_�* +__��ri� + +__ws +, +__n +, + +838 +__FILE + * +__��ri� + +__��am +); + +846 + `�utws_u�ocked + (cڡ +wch�_t + * +__��ri� + +__ws +, + +847 +__FILE + * +__��ri� + +__��am +); + +851 +__BEGIN_NAMESPACE_C99 + + +855 +size_t + + $wcs�ime + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__maxsize +, + +856 cڡ +wch�_t + * +__��ri� + +__f�m� +, + +857 cڡ +tm + * +__��ri� + +__� +� +__THROW +; + +858 +__END_NAMESPACE_C99 + + +860 #ifde� +__USE_GNU + + +861 + ~<xlo��.h +> + +865 +size_t + + $wcs�ime_l + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__maxsize +, + +866 cڡ +wch�_t + * +__��ri� + +__f�m� +, + +867 cڡ +tm + * +__��ri� + +__� +, + +868 +__lo��_t + +__loc +� +__THROW +; + +877 #i� +def�ed + +__USE_UNIX98 + && !def�ed +__USE_GNU + + +878 + #__�ed_iswxxx + + + ) + +879 + ~<w�y�.h +> + +883 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__f�tify_fun�i� + + +884 + ~<b�s/wch�2.h +> + +887 #ifde� +__LDBL_COMPAT + + +888 + ~<b�s/wch�-ldbl.h +> + +891 +__END_DECLS + + +899 #unde� +__�ed_mb��e_t + + +900 #unde� +__�ed_w�t_t + + + @/usr/include/asm-generic/errno.h + +1 #i�de� +_ASM_GENERIC_ERRNO_H + + +2 + #_ASM_GENERIC_ERRNO_H + + + ) + +4 + ~<asm-g��ic/��o-ba�.h +> + +6 + #EDEADLK + 35 + + ) + +7 + #ENAMETOOLONG + 36 + + ) + +8 + #ENOLCK + 37 + + ) + +9 + #ENOSYS + 38 + + ) + +10 + #ENOTEMPTY + 39 + + ) + +11 + #ELOOP + 40 + + ) + +12 + #EWOULDBLOCK + +EAGAIN + + + ) + +13 + #ENOMSG + 42 + + ) + +14 + #EIDRM + 43 + + ) + +15 + #ECHRNG + 44 + + ) + +16 + #EL2NSYNC + 45 + + ) + +17 + #EL3HLT + 46 + + ) + +18 + #EL3RST + 47 + + ) + +19 + #ELNRNG + 48 + + ) + +20 + #EUNATCH + 49 + + ) + +21 + #ENOCSI + 50 + + ) + +22 + #EL2HLT + 51 + + ) + +23 + #EBADE + 52 + + ) + +24 + #EBADR + 53 + + ) + +25 + #EXFULL + 54 + + ) + +26 + #ENOANO + 55 + + ) + +27 + #EBADRQC + 56 + + ) + +28 + #EBADSLT + 57 + + ) + +30 + #EDEADLOCK + +EDEADLK + + + ) + +32 + #EBFONT + 59 + + ) + +33 + #ENOSTR + 60 + + ) + +34 + #ENODATA + 61 + + ) + +35 + #ETIME + 62 + + ) + +36 + #ENOSR + 63 + + ) + +37 + #ENONET + 64 + + ) + +38 + #ENOPKG + 65 + + ) + +39 + #EREMOTE + 66 + + ) + +40 + #ENOLINK + 67 + + ) + +41 + #EADV + 68 + + ) + +42 + #ESRMNT + 69 + + ) + +43 + #ECOMM + 70 + + ) + +44 + #EPROTO + 71 + + ) + +45 + #EMULTIHOP + 72 + + ) + +46 + #EDOTDOT + 73 + + ) + +47 + #EBADMSG + 74 + + ) + +48 + #EOVERFLOW + 75 + + ) + +49 + #ENOTUNIQ + 76 + + ) + +50 + #EBADFD + 77 + + ) + +51 + #EREMCHG + 78 + + ) + +52 + #ELIBACC + 79 + + ) + +53 + #ELIBBAD + 80 + + ) + +54 + #ELIBSCN + 81 + + ) + +55 + #ELIBMAX + 82 + + ) + +56 + #ELIBEXEC + 83 + + ) + +57 + #EILSEQ + 84 + + ) + +58 + #ERESTART + 85 + + ) + +59 + #ESTRPIPE + 86 + + ) + +60 + #EUSERS + 87 + + ) + +61 + #ENOTSOCK + 88 + + ) + +62 + #EDESTADDRREQ + 89 + + ) + +63 + #EMSGSIZE + 90 + + ) + +64 + #EPROTOTYPE + 91 + + ) + +65 + #ENOPROTOOPT + 92 + + ) + +66 + #EPROTONOSUPPORT + 93 + + ) + +67 + #ESOCKTNOSUPPORT + 94 + + ) + +68 + #EOPNOTSUPP + 95 + + ) + +69 + #EPFNOSUPPORT + 96 + + ) + +70 + #EAFNOSUPPORT + 97 + + ) + +71 + #EADDRINUSE + 98 + + ) + +72 + #EADDRNOTAVAIL + 99 + + ) + +73 + #ENETDOWN + 100 + + ) + +74 + #ENETUNREACH + 101 + + ) + +75 + #ENETRESET + 102 + + ) + +76 + #ECONNABORTED + 103 + + ) + +77 + #ECONNRESET + 104 + + ) + +78 + #ENOBUFS + 105 + + ) + +79 + #EISCONN + 106 + + ) + +80 + #ENOTCONN + 107 + + ) + +81 + #ESHUTDOWN + 108 + + ) + +82 + #ETOOMANYREFS + 109 + + ) + +83 + #ETIMEDOUT + 110 + + ) + +84 + #ECONNREFUSED + 111 + + ) + +85 + #EHOSTDOWN + 112 + + ) + +86 + #EHOSTUNREACH + 113 + + ) + +87 + #EALREADY + 114 + + ) + +88 + #EINPROGRESS + 115 + + ) + +89 + #ESTALE + 116 + + ) + +90 + #EUCLEAN + 117 + + ) + +91 + #ENOTNAM + 118 + + ) + +92 + #ENAVAIL + 119 + + ) + +93 + #EISNAM + 120 + + ) + +94 + #EREMOTEIO + 121 + + ) + +95 + #EDQUOT + 122 + + ) + +97 + #ENOMEDIUM + 123 + + ) + +98 + #EMEDIUMTYPE + 124 + + ) + +99 + #ECANCELED + 125 + + ) + +100 + #ENOKEY + 126 + + ) + +101 + #EKEYEXPIRED + 127 + + ) + +102 + #EKEYREVOKED + 128 + + ) + +103 + #EKEYREJECTED + 129 + + ) + +106 + #EOWNERDEAD + 130 + + ) + +107 + #ENOTRECOVERABLE + 131 + + ) + +109 + #ERFKILL + 132 + + ) + +111 + #EHWPOISON + 133 + + ) + + @/usr/include/bits/wchar-ldbl.h + +19 #i�de� +_WCHAR_H + + +23 #i� +def�ed + +__USE_ISOC95 + || def�ed +__USE_UNIX98 + + +24 +__BEGIN_NAMESPACE_C99 + + +25 +__LDBL_REDIR_DECL + ( +fw��tf +); + +26 +__LDBL_REDIR_DECL + ( +w��tf +); + +27 +__LDBL_REDIR_DECL + ( +sw��tf +); + +28 +__LDBL_REDIR_DECL + ( +vfw��tf +); + +29 +__LDBL_REDIR_DECL + ( +vw��tf +); + +30 +__LDBL_REDIR_DECL + ( +vsw��tf +); + +31 #i� +def�ed + +__USE_ISOC99 + && !def�ed +__USE_GNU + \ + +32 && ! +def�ed + + g__REDIRECT + \ + +33 && ( +def�ed + + g__STRICT_ANSI__ + || def�ed + g__USE_XOPEN2K +) + +34 + $__LDBL_REDIR1_DECL + ( +fws�nf +, +__�dbl___isoc99_fws�nf +) + +35 + $__LDBL_REDIR1_DECL + ( +ws�nf +, +__�dbl___isoc99_ws�nf +) + +36 + $__LDBL_REDIR1_DECL + ( +sws�nf +, +__�dbl___isoc99_sws�nf +) + +38 + `__LDBL_REDIR_DECL + ( +fws�nf +); + +39 + `__LDBL_REDIR_DECL + ( +ws�nf +); + +40 + `__LDBL_REDIR_DECL + ( +sws�nf +); + +42 +__END_NAMESPACE_C99 + + +45 #ifde� +__USE_ISOC99 + + +46 +__BEGIN_NAMESPACE_C99 + + +47 + `__LDBL_REDIR1_DECL + ( +wc��d +, +wc�od +); + +48 #i�! +def�ed + +__USE_GNU + && !def�ed +__REDIRECT + \ + +49 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +50 + $__LDBL_REDIR1_DECL + ( +vfws�nf +, +__�dbl___isoc99_vfws�nf +) + +51 + $__LDBL_REDIR1_DECL + ( +vws�nf +, +__�dbl___isoc99_vws�nf +) + +52 + $__LDBL_REDIR1_DECL + ( +vsws�nf +, +__�dbl___isoc99_vsws�nf +) + +54 + `__LDBL_REDIR_DECL + ( +vfws�nf +); + +55 + `__LDBL_REDIR_DECL + ( +vws�nf +); + +56 + `__LDBL_REDIR_DECL + ( +vsws�nf +); + +58 +__END_NAMESPACE_C99 + + +61 #ifde� +__USE_GNU + + +62 + `__LDBL_REDIR1_DECL + ( +wc��d_l +, +wc�od_l +); + +65 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__f�tify_fun�i� + + +66 + $__LDBL_REDIR_DECL + ( +__sw��tf_chk +) + +67 + $__LDBL_REDIR_DECL + ( +__vsw��tf_chk +) + +68 #i� +__USE_FORTIFY_LEVEL + > 1 + +69 + $__LDBL_REDIR_DECL + ( +__fw��tf_chk +) + +70 + $__LDBL_REDIR_DECL + ( +__w��tf_chk +) + +71 + $__LDBL_REDIR_DECL + ( +__vfw��tf_chk +) + +72 + $__LDBL_REDIR_DECL + ( +__vw��tf_chk +) + + @/usr/include/bits/wchar2.h + +19 #i�de� +_WCHAR_H + + +24 +wch�_t + * + $__wmem�y_chk + ( +wch�_t + * +__��ri� + +__s1 +, + +25 cڡ +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +, + +26 +size_t + +__ns1 +� +__THROW +; + +27 +wch�_t + * + `__REDIRECT_NTH + ( +__wmem�y_��s +, + +28 ( +wch�_t + * +__��ri� + +__s1 +, + +29 cڡ +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +), + +30 +wmem�y +); + +31 +wch�_t + * + `__REDIRECT_NTH + ( +__wmem�y_chk_w�n +, + +32 ( +wch�_t + * +__��ri� + +__s1 +, + +33 cڡ +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +, + +34 +size_t + +__ns1 +), +__wmem�y_chk +) + +35 + `__w�ljr + ("wmemcpy called with�ength bigger�han size of destination " + +38 +__f�tify_fun�i� + +wch�_t + * + +39 + `__NTH + ( + $wmem�y + ( +wch�_t + * +__��ri� + +__s1 +, cڡ wch�_�*__��ri� +__s2 +, + +40 +size_t + +__n +)) + +42 i�( + `__bos0 + ( +__s1 +�!�( +size_t +) -1) + +44 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +45 + `__wmem�y_chk + ( +__s1 +, +__s2 +, +__n +, + +46 + `__bos0 + ( +__s1 +�/ ( +wch�_t +)); + +48 i�( +__n + > + `__bos0 + ( +__s1 +�/ ( +wch�_t +)) + +49 + `__wmem�y_chk_w�n + ( +__s1 +, +__s2 +, +__n +, + +50 + `__bos0 + ( +__s1 +�/ ( +wch�_t +)); + +52 + `__wmem�y_��s + ( +__s1 +, +__s2 +, +__n +); + +53 + } +} + +56 +wch�_t + * + $__wmemmove_chk + ( +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +, + +57 +size_t + +__n +, size_� +__ns1 +� +__THROW +; + +58 +wch�_t + * + `__REDIRECT_NTH + ( +__wmemmove_��s +, (wch�_�* +__s1 +, + +59 cڡ +wch�_t + * +__s2 +, + +60 +size_t + +__n +), +wmemmove +); + +61 +wch�_t + * + `__REDIRECT_NTH + ( +__wmemmove_chk_w�n +, + +62 ( +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +, + +63 +size_t + +__n +, size_� +__ns1 +), +__wmemmove_chk +) + +64 + `__w�ljr + ("wmemmove called with�ength bigger�han size of destination " + +67 +__f�tify_fun�i� + +wch�_t + * + +68 + `__NTH + ( + $wmemmove + ( +wch�_t + * +__s1 +, cڡ wch�_�* +__s2 +, +size_t + +__n +)) + +70 i�( + `__bos0 + ( +__s1 +�!�( +size_t +) -1) + +72 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +73 + `__wmemmove_chk + ( +__s1 +, +__s2 +, +__n +, + +74 + `__bos0 + ( +__s1 +�/ ( +wch�_t +)); + +76 i�( +__n + > + `__bos0 + ( +__s1 +�/ ( +wch�_t +)) + +77 + `__wmemmove_chk_w�n + ( +__s1 +, +__s2 +, +__n +, + +78 + `__bos0 + ( +__s1 +�/ ( +wch�_t +)); + +80 + `__wmemmove_��s + ( +__s1 +, +__s2 +, +__n +); + +81 + } +} + +84 #ifde� +__USE_GNU + + +85 +wch�_t + * + $__wmemp�y_chk + ( +wch�_t + * +__��ri� + +__s1 +, + +86 cڡ +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +, + +87 +size_t + +__ns1 +� +__THROW +; + +88 +wch�_t + * + `__REDIRECT_NTH + ( +__wmemp�y_��s +, + +89 ( +wch�_t + * +__��ri� + +__s1 +, + +90 cڡ +wch�_t + * +__��ri� + +__s2 +, + +91 +size_t + +__n +), +wmemp�y +); + +92 +wch�_t + * + `__REDIRECT_NTH + ( +__wmemp�y_chk_w�n +, + +93 ( +wch�_t + * +__��ri� + +__s1 +, + +94 cڡ +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +, + +95 +size_t + +__ns1 +), +__wmemp�y_chk +) + +96 + `__w�ljr + ("wmempcpy called with�ength bigger�han size of destination " + +99 +__f�tify_fun�i� + +wch�_t + * + +100 + `__NTH + ( + $wmemp�y + ( +wch�_t + * +__��ri� + +__s1 +, cڡ wch�_�*__��ri� +__s2 +, + +101 +size_t + +__n +)) + +103 i�( + `__bos0 + ( +__s1 +�!�( +size_t +) -1) + +105 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +106 + `__wmemp�y_chk + ( +__s1 +, +__s2 +, +__n +, + +107 + `__bos0 + ( +__s1 +�/ ( +wch�_t +)); + +109 i�( +__n + > + `__bos0 + ( +__s1 +�/ ( +wch�_t +)) + +110 + `__wmemp�y_chk_w�n + ( +__s1 +, +__s2 +, +__n +, + +111 + `__bos0 + ( +__s1 +�/ ( +wch�_t +)); + +113 + `__wmemp�y_��s + ( +__s1 +, +__s2 +, +__n +); + +114 + } +} + +118 +wch�_t + * + $__wmem�t_chk + ( +wch�_t + * +__s +, wch�_� +__c +, +size_t + +__n +, + +119 +size_t + +__ns +� +__THROW +; + +120 +wch�_t + * + `__REDIRECT_NTH + ( +__wmem�t_��s +, (wch�_�* +__s +, wch�_� +__c +, + +121 +size_t + +__n +), +wmem�t +); + +122 +wch�_t + * + `__REDIRECT_NTH + ( +__wmem�t_chk_w�n +, + +123 ( +wch�_t + * +__s +, wch�_� +__c +, +size_t + +__n +, + +124 +size_t + +__ns +), +__wmem�t_chk +) + +125 + `__w�ljr + ("wmemset called with�ength bigger�han size of destination " + +128 +__f�tify_fun�i� + +wch�_t + * + +129 + `__NTH + ( + $wmem�t + ( +wch�_t + * +__s +, wch�_� +__c +, +size_t + +__n +)) + +131 i�( + `__bos0 + ( +__s +�!�( +size_t +) -1) + +133 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +134 + `__wmem�t_chk + ( +__s +, +__c +, +__n +, + `__bos0 + (__s�/ ( +wch�_t +)); + +136 i�( +__n + > + `__bos0 + ( +__s +�/ ( +wch�_t +)) + +137 + `__wmem�t_chk_w�n + ( +__s +, +__c +, +__n +, + +138 + `__bos0 + ( +__s +�/ ( +wch�_t +)); + +140 + `__wmem�t_��s + ( +__s +, +__c +, +__n +); + +141 + } +} + +144 +wch�_t + * + $__wcs�y_chk + ( +wch�_t + * +__��ri� + +__de� +, + +145 cڡ +wch�_t + * +__��ri� + +__�c +, + +146 +size_t + +__n +� +__THROW +; + +147 +wch�_t + * + `__REDIRECT_NTH + ( +__wcs�y_��s +, + +148 ( +wch�_t + * +__��ri� + +__de� +, + +149 cڡ +wch�_t + * +__��ri� + +__�c +), +wcs�y +); + +151 +__f�tify_fun�i� + +wch�_t + * + +152 + `__NTH + ( + $wcs�y + ( +wch�_t + * +__��ri� + +__de� +, cڡ wch�_�*__��ri� +__�c +)) + +154 i�( + `__bos + ( +__de� +�!�( +size_t +) -1) + +155 + `__wcs�y_chk + ( +__de� +, +__�c +, + `__bos + (__de��/ ( +wch�_t +)); + +156 + `__wcs�y_��s + ( +__de� +, +__�c +); + +157 + } +} + +160 +wch�_t + * + $__w��y_chk + ( +wch�_t + * +__��ri� + +__de� +, + +161 cڡ +wch�_t + * +__��ri� + +__�c +, + +162 +size_t + +__de��n +� +__THROW +; + +163 +wch�_t + * + `__REDIRECT_NTH + ( +__w��y_��s +, + +164 ( +wch�_t + * +__��ri� + +__de� +, + +165 cڡ +wch�_t + * +__��ri� + +__�c +), +w��y +); + +167 +__f�tify_fun�i� + +wch�_t + * + +168 + `__NTH + ( + $w��y + ( +wch�_t + * +__��ri� + +__de� +, cڡ wch�_�*__��ri� +__�c +)) + +170 i�( + `__bos + ( +__de� +�!�( +size_t +) -1) + +171 + `__w��y_chk + ( +__de� +, +__�c +, + `__bos + (__de��/ ( +wch�_t +)); + +172 + `__w��y_��s + ( +__de� +, +__�c +); + +173 + } +} + +176 +wch�_t + * + $__wc��y_chk + ( +wch�_t + * +__��ri� + +__de� +, + +177 cڡ +wch�_t + * +__��ri� + +__�c +, +size_t + +__n +, + +178 +size_t + +__de��n +� +__THROW +; + +179 +wch�_t + * + `__REDIRECT_NTH + ( +__wc��y_��s +, + +180 ( +wch�_t + * +__��ri� + +__de� +, + +181 cڡ +wch�_t + * +__��ri� + +__�c +, + +182 +size_t + +__n +), +wc��y +); + +183 +wch�_t + * + `__REDIRECT_NTH + ( +__wc��y_chk_w�n +, + +184 ( +wch�_t + * +__��ri� + +__de� +, + +185 cڡ +wch�_t + * +__��ri� + +__�c +, + +186 +size_t + +__n +, size_� +__de��n +), +__wc��y_chk +) + +187 + `__w�ljr + ("wcsncpy called with�ength bigger�han size of destination " + +190 +__f�tify_fun�i� + +wch�_t + * + +191 + `__NTH + ( + $wc��y + ( +wch�_t + * +__��ri� + +__de� +, cڡ wch�_�*__��ri� +__�c +, + +192 +size_t + +__n +)) + +194 i�( + `__bos + ( +__de� +�!�( +size_t +) -1) + +196 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +197 + `__wc��y_chk + ( +__de� +, +__�c +, +__n +, + +198 + `__bos + ( +__de� +�/ ( +wch�_t +)); + +199 i�( +__n + > + `__bos + ( +__de� +�/ ( +wch�_t +)) + +200 + `__wc��y_chk_w�n + ( +__de� +, +__�c +, +__n +, + +201 + `__bos + ( +__de� +�/ ( +wch�_t +)); + +203 + `__wc��y_��s + ( +__de� +, +__�c +, +__n +); + +204 + } +} + +207 +wch�_t + * + $__w�n�y_chk + ( +wch�_t + * +__��ri� + +__de� +, + +208 cڡ +wch�_t + * +__��ri� + +__�c +, +size_t + +__n +, + +209 +size_t + +__de��n +� +__THROW +; + +210 +wch�_t + * + `__REDIRECT_NTH + ( +__w�n�y_��s +, + +211 ( +wch�_t + * +__��ri� + +__de� +, + +212 cڡ +wch�_t + * +__��ri� + +__�c +, + +213 +size_t + +__n +), +w�n�y +); + +214 +wch�_t + * + `__REDIRECT_NTH + ( +__w�n�y_chk_w�n +, + +215 ( +wch�_t + * +__��ri� + +__de� +, + +216 cڡ +wch�_t + * +__��ri� + +__�c +, + +217 +size_t + +__n +, size_� +__de��n +), +__w�n�y_chk +) + +218 + `__w�ljr + ("wcpncpy called with�ength bigger�han size of destination " + +221 +__f�tify_fun�i� + +wch�_t + * + +222 + `__NTH + ( + $w�n�y + ( +wch�_t + * +__��ri� + +__de� +, cڡ wch�_�*__��ri� +__�c +, + +223 +size_t + +__n +)) + +225 i�( + `__bos + ( +__de� +�!�( +size_t +) -1) + +227 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +228 + `__w�n�y_chk + ( +__de� +, +__�c +, +__n +, + +229 + `__bos + ( +__de� +�/ ( +wch�_t +)); + +230 i�( +__n + > + `__bos + ( +__de� +�/ ( +wch�_t +)) + +231 + `__w�n�y_chk_w�n + ( +__de� +, +__�c +, +__n +, + +232 + `__bos + ( +__de� +�/ ( +wch�_t +)); + +234 + `__w�n�y_��s + ( +__de� +, +__�c +, +__n +); + +235 + } +} + +238 +wch�_t + * + $__wcs�t_chk + ( +wch�_t + * +__��ri� + +__de� +, + +239 cڡ +wch�_t + * +__��ri� + +__�c +, + +240 +size_t + +__de��n +� +__THROW +; + +241 +wch�_t + * + `__REDIRECT_NTH + ( +__wcs�t_��s +, + +242 ( +wch�_t + * +__��ri� + +__de� +, + +243 cڡ +wch�_t + * +__��ri� + +__�c +), +wcs�t +); + +245 +__f�tify_fun�i� + +wch�_t + * + +246 + `__NTH + ( + $wcs�t + ( +wch�_t + * +__��ri� + +__de� +, cڡ wch�_�*__��ri� +__�c +)) + +248 i�( + `__bos + ( +__de� +�!�( +size_t +) -1) + +249 + `__wcs�t_chk + ( +__de� +, +__�c +, + `__bos + (__de��/ ( +wch�_t +)); + +250 + `__wcs�t_��s + ( +__de� +, +__�c +); + +251 + } +} + +254 +wch�_t + * + $__wc��t_chk + ( +wch�_t + * +__��ri� + +__de� +, + +255 cڡ +wch�_t + * +__��ri� + +__�c +, + +256 +size_t + +__n +, size_� +__de��n +� +__THROW +; + +257 +wch�_t + * + `__REDIRECT_NTH + ( +__wc��t_��s +, + +258 ( +wch�_t + * +__��ri� + +__de� +, + +259 cڡ +wch�_t + * +__��ri� + +__�c +, + +260 +size_t + +__n +), +wc��t +); + +262 +__f�tify_fun�i� + +wch�_t + * + +263 + `__NTH + ( + $wc��t + ( +wch�_t + * +__��ri� + +__de� +, cڡ wch�_�*__��ri� +__�c +, + +264 +size_t + +__n +)) + +266 i�( + `__bos + ( +__de� +�!�( +size_t +) -1) + +267 + `__wc��t_chk + ( +__de� +, +__�c +, +__n +, + +268 + `__bos + ( +__de� +�/ ( +wch�_t +)); + +269 + `__wc��t_��s + ( +__de� +, +__�c +, +__n +); + +270 + } +} + +273 + $__sw��tf_chk + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +274 +__�ag +, +size_t + +__s_�n +, + +275 cڡ +wch�_t + * +__��ri� + +__f�m� +, ...) + +276 +__THROW + ; + +278 + `__REDIRECT_NTH_LDBL + ( +__sw��tf_��s +, + +279 ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +280 cڡ +wch�_t + * +__��ri� + +__fmt +, ...), + +281 +sw��tf +); + +283 #ifde� +__va_�g_�ck + + +284 +__f�tify_fun�i� + + +285 + `__NTH + ( + $sw��tf + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +286 cڡ +wch�_t + * +__��ri� + +__fmt +, ...)) + +288 i�( + `__bos + ( +__s +�!�( +size_t +�-1 || +__USE_FORTIFY_LEVEL + > 1) + +289 + `__sw��tf_chk + ( +__s +, +__n +, +__USE_FORTIFY_LEVEL + - 1, + +290 + `__bos + ( +__s +�/ ( +wch�_t +), + +291 +__fmt +, + `__va_�g_�ck + ()); + +292 + `__sw��tf_��s + ( +__s +, +__n +, +__fmt +, + `__va_�g_�ck + ()); + +293 + } +} + +294 #�i�! +def�ed + +__�lu�lus + + +296 + #sw��tf +( +s +, +n +, ...) \ + +297 ( + `__bos + ( +s +�!�( +size_t +�-1 || +__USE_FORTIFY_LEVEL + > 1 \ + +298 ? + `__sw��tf_chk + ( +s +, +n +, +__USE_FORTIFY_LEVEL + - 1, \ + +299 + `__bos + ( +s +�/ ( +wch�_t +), +__VA_ARGS__ +) \ + +300 : + `sw��tf + ( +s +, +n +, +__VA_ARGS__ +)) + + ) + +303 + $__vsw��tf_chk + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +304 +__�ag +, +size_t + +__s_�n +, + +305 cڡ +wch�_t + * +__��ri� + +__f�m� +, + +306 +__gnuc_va_li� + +__�g +) + +307 +__THROW + ; + +309 + `__REDIRECT_NTH_LDBL + ( +__vsw��tf_��s +, + +310 ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +311 cڡ +wch�_t + * +__��ri� + +__fmt +, + +312 +__gnuc_va_li� + +__� +), +vsw��tf +); + +314 +__f�tify_fun�i� + + +315 + `__NTH + ( + $vsw��tf + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +316 cڡ +wch�_t + * +__��ri� + +__fmt +, +__gnuc_va_li� + +__� +)) + +318 i�( + `__bos + ( +__s +�!�( +size_t +�-1 || +__USE_FORTIFY_LEVEL + > 1) + +319 + `__vsw��tf_chk + ( +__s +, +__n +, +__USE_FORTIFY_LEVEL + - 1, + +320 + `__bos + ( +__s +�/ ( +wch�_t +), +__fmt +, +__� +); + +321 + `__vsw��tf_��s + ( +__s +, +__n +, +__fmt +, +__� +); + +322 + } +} + +325 #i� +__USE_FORTIFY_LEVEL + > 1 + +327 +__fw��tf_chk + ( +__FILE + * +__��ri� + +__��am +, +__�ag +, + +328 cڡ +wch�_t + * +__��ri� + +__f�m� +, ...); + +329 +__w��tf_chk + ( +__�ag +, cڡ +wch�_t + * +__��ri� + +__f�m� +, + +331 +__vfw��tf_chk + ( +__FILE + * +__��ri� + +__��am +, +__�ag +, + +332 cڡ +wch�_t + * +__��ri� + +__f�m� +, + +333 +__gnuc_va_li� + +__� +); + +334 +__vw��tf_chk + ( +__�ag +, cڡ +wch�_t + * +__��ri� + +__f�m� +, + +335 +__gnuc_va_li� + +__� +); + +337 #ifde� +__va_�g_�ck + + +338 +__f�tify_fun�i� + + +339 + $w��tf + (cڡ +wch�_t + * +__��ri� + +__fmt +, ...) + +341 + `__w��tf_chk + ( +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + `__va_�g_�ck + ()); + +342 + } +} + +344 +__f�tify_fun�i� + + +345 + $fw��tf + ( +__FILE + * +__��ri� + +__��am +, cڡ +wch�_t + *__��ri� +__fmt +, ...) + +347 + `__fw��tf_chk + ( +__��am +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +348 + `__va_�g_�ck + ()); + +349 + } +} + +350 #�i�! +def�ed + +__�lu�lus + + +351 + #w��tf +(...) \ + +352 + `__w��tf_chk + ( +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +353 + #fw��tf +( +��am +, ...) \ + +354 + `__fw��tf_chk + ( +��am +, +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +357 +__f�tify_fun�i� + + +358 + $vw��tf + (cڡ +wch�_t + * +__��ri� + +__fmt +, +__gnuc_va_li� + +__� +) + +360 + `__vw��tf_chk + ( +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +361 + } +} + +363 +__f�tify_fun�i� + + +364 + $vfw��tf + ( +__FILE + * +__��ri� + +__��am +, + +365 cڡ +wch�_t + * +__��ri� + +__fmt +, +__gnuc_va_li� + +__� +) + +367 + `__vfw��tf_chk + ( +__��am +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +368 + } +} + +372 +wch�_t + * + $__fg�ws_chk + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__size +, +__n +, + +373 +__FILE + * +__��ri� + +__��am +� +__wur +; + +374 +wch�_t + * + `__REDIRECT + ( +__fg�ws_��s +, + +375 ( +wch�_t + * +__��ri� + +__s +, +__n +, + +376 +__FILE + * +__��ri� + +__��am +), +fg�ws +� +__wur +; + +377 +wch�_t + * + `__REDIRECT + ( +__fg�ws_chk_w�n +, + +378 ( +wch�_t + * +__��ri� + +__s +, +size_t + +__size +, +__n +, + +379 +__FILE + * +__��ri� + +__��am +), +__fg�ws_chk +) + +380 +__wur + + `__w�ljr + ("fgetws called with bigger size�han�ength " + +383 +__f�tify_fun�i� + +__wur + +wch�_t + * + +384 + $fg�ws + ( +wch�_t + * +__��ri� + +__s +, +__n +, +__FILE + *__��ri� +__��am +) + +386 i�( + `__bos + ( +__s +�!�( +size_t +) -1) + +388 i�(! + `__bu�t�_cڡ�t_p + ( +__n +) || __n <= 0) + +389 + `__fg�ws_chk + ( +__s +, + `__bos + (__s�/ ( +wch�_t +), + +390 +__n +, +__��am +); + +392 i�(( +size_t +� +__n + > + `__bos + ( +__s +�/ ( +wch�_t +)) + +393 + `__fg�ws_chk_w�n + ( +__s +, + `__bos + (__s�/ ( +wch�_t +), + +394 +__n +, +__��am +); + +396 + `__fg�ws_��s + ( +__s +, +__n +, +__��am +); + +397 + } +} + +399 #ifde� +__USE_GNU + + +400 +wch�_t + * + $__fg�ws_u�ocked_chk + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__size +, + +401 +__n +, +__FILE + * +__��ri� + +__��am +) + +402 +__wur +; + +403 +wch�_t + * + `__REDIRECT + ( +__fg�ws_u�ocked_��s +, + +404 ( +wch�_t + * +__��ri� + +__s +, +__n +, + +405 +__FILE + * +__��ri� + +__��am +), +fg�ws_u�ocked +) + +406 +__wur +; + +407 +wch�_t + * + `__REDIRECT + ( +__fg�ws_u�ocked_chk_w�n +, + +408 ( +wch�_t + * +__��ri� + +__s +, +size_t + +__size +, +__n +, + +409 +__FILE + * +__��ri� + +__��am +), + +410 +__fg�ws_u�ocked_chk +) + +411 +__wur + + `__w�ljr + ("fgetws_unlocked called with bigger size�han�ength " + +414 +__f�tify_fun�i� + +__wur + +wch�_t + * + +415 + $fg�ws_u�ocked + ( +wch�_t + * +__��ri� + +__s +, +__n +, +__FILE + *__��ri� +__��am +) + +417 i�( + `__bos + ( +__s +�!�( +size_t +) -1) + +419 i�(! + `__bu�t�_cڡ�t_p + ( +__n +) || __n <= 0) + +420 + `__fg�ws_u�ocked_chk + ( +__s +, + `__bos + (__s�/ ( +wch�_t +), + +421 +__n +, +__��am +); + +423 i�(( +size_t +� +__n + > + `__bos + ( +__s +�/ ( +wch�_t +)) + +424 + `__fg�ws_u�ocked_chk_w�n + ( +__s +, + `__bos + (__s�/ ( +wch�_t +), + +425 +__n +, +__��am +); + +427 + `__fg�ws_u�ocked_��s + ( +__s +, +__n +, +__��am +); + +428 + } +} + +432 +size_t + + $__w�tomb_chk + (* +__��ri� + +__s +, +wch�_t + +__wch� +, + +433 +mb��e_t + * +__��ri� + +__p +, + +434 +size_t + +__bu� +� +__THROW + +__wur +; + +435 +size_t + + `__REDIRECT_NTH + ( +__w�tomb_��s +, + +436 (* +__��ri� + +__s +, +wch�_t + +__wch� +, + +437 +mb��e_t + * +__��ri� + +__ps +), +w�tomb +� +__wur +; + +439 +__f�tify_fun�i� + +__wur + +size_t + + +440 + `__NTH + ( + $w�tomb + (* +__��ri� + +__s +, +wch�_t + +__wch� +, + +441 +mb��e_t + * +__��ri� + +__ps +)) + +446 + #__WCHAR_MB_LEN_MAX + 16 + + ) + +447 #i� +def�ed + +MB_LEN_MAX + && MB_LEN_MAX !� +__WCHAR_MB_LEN_MAX + + +450 i�( + `__bos + ( +__s +�!�( +size_t +�-1 && +__WCHAR_MB_LEN_MAX + > __bos (__s)) + +451 + `__w�tomb_chk + ( +__s +, +__wch� +, +__ps +, + `__bos + (__s)); + +452 + `__w�tomb_��s + ( +__s +, +__wch� +, +__ps +); + +453 + } +} + +456 +size_t + + $__mb�towcs_chk + ( +wch�_t + * +__��ri� + +__d� +, + +457 cڡ ** +__��ri� + +__�c +, + +458 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +, + +459 +size_t + +__d��n +� +__THROW +; + +460 +size_t + + `__REDIRECT_NTH + ( +__mb�towcs_��s +, + +461 ( +wch�_t + * +__��ri� + +__d� +, + +462 cڡ ** +__��ri� + +__�c +, + +463 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +), + +464 +mb�towcs +); + +465 +size_t + + `__REDIRECT_NTH + ( +__mb�towcs_chk_w�n +, + +466 ( +wch�_t + * +__��ri� + +__d� +, + +467 cڡ ** +__��ri� + +__�c +, + +468 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +, + +469 +size_t + +__d��n +), +__mb�towcs_chk +) + +470 + `__w�ljr + ("mbsrtowcs called with dst buffer smaller�han�en " + +473 +__f�tify_fun�i� + +size_t + + +474 + `__NTH + ( + $mb�towcs + ( +wch�_t + * +__��ri� + +__d� +, cڡ **__��ri� +__�c +, + +475 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +)) + +477 i�( + `__bos + ( +__d� +�!�( +size_t +) -1) + +479 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +480 + `__mb�towcs_chk + ( +__d� +, +__�c +, +__�n +, +__ps +, + +481 + `__bos + ( +__d� +�/ ( +wch�_t +)); + +483 i�( +__�n + > + `__bos + ( +__d� +�/ ( +wch�_t +)) + +484 + `__mb�towcs_chk_w�n + ( +__d� +, +__�c +, +__�n +, +__ps +, + +485 + `__bos + ( +__d� +�/ ( +wch�_t +)); + +487 + `__mb�towcs_��s + ( +__d� +, +__�c +, +__�n +, +__ps +); + +488 + } +} + +491 +size_t + + $__wc�tombs_chk + (* +__��ri� + +__d� +, + +492 cڡ +wch�_t + ** +__��ri� + +__�c +, + +493 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +, + +494 +size_t + +__d��n +� +__THROW +; + +495 +size_t + + `__REDIRECT_NTH + ( +__wc�tombs_��s +, + +496 (* +__��ri� + +__d� +, + +497 cڡ +wch�_t + ** +__��ri� + +__�c +, + +498 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +), + +499 +wc�tombs +); + +500 +size_t + + `__REDIRECT_NTH + ( +__wc�tombs_chk_w�n +, + +501 (* +__��ri� + +__d� +, + +502 cڡ +wch�_t + ** +__��ri� + +__�c +, + +503 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +, + +504 +size_t + +__d��n +), +__wc�tombs_chk +) + +505 + `__w�ljr + ("wcsrtombs called with dst buffer smaller�han�en"); + +507 +__f�tify_fun�i� + +size_t + + +508 + `__NTH + ( + $wc�tombs + (* +__��ri� + +__d� +, cڡ +wch�_t + **__��ri� +__�c +, + +509 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +)) + +511 i�( + `__bos + ( +__d� +�!�( +size_t +) -1) + +513 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +514 + `__wc�tombs_chk + ( +__d� +, +__�c +, +__�n +, +__ps +, + `__bos + (__dst)); + +516 i�( +__�n + > + `__bos + ( +__d� +)) + +517 + `__wc�tombs_chk_w�n + ( +__d� +, +__�c +, +__�n +, +__ps +, + `__bos + (__dst)); + +519 + `__wc�tombs_��s + ( +__d� +, +__�c +, +__�n +, +__ps +); + +520 + } +} + +523 #ifde� +__USE_GNU + + +524 +size_t + + $__mb��owcs_chk + ( +wch�_t + * +__��ri� + +__d� +, + +525 cڡ ** +__��ri� + +__�c +, +size_t + +__nmc +, + +526 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +, + +527 +size_t + +__d��n +� +__THROW +; + +528 +size_t + + `__REDIRECT_NTH + ( +__mb��owcs_��s +, + +529 ( +wch�_t + * +__��ri� + +__d� +, + +530 cڡ ** +__��ri� + +__�c +, +size_t + +__nmc +, + +531 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +), + +532 +mb��owcs +); + +533 +size_t + + `__REDIRECT_NTH + ( +__mb��owcs_chk_w�n +, + +534 ( +wch�_t + * +__��ri� + +__d� +, + +535 cڡ ** +__��ri� + +__�c +, +size_t + +__nmc +, + +536 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +, + +537 +size_t + +__d��n +), +__mb��owcs_chk +) + +538 + `__w�ljr + ("mbsnrtowcs called with dst buffer smaller�han�en " + +541 +__f�tify_fun�i� + +size_t + + +542 + `__NTH + ( + $mb��owcs + ( +wch�_t + * +__��ri� + +__d� +, cڡ **__��ri� +__�c +, + +543 +size_t + +__nmc +, size_� +__�n +, +mb��e_t + * +__��ri� + +__ps +)) + +545 i�( + `__bos + ( +__d� +�!�( +size_t +) -1) + +547 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +548 + `__mb��owcs_chk + ( +__d� +, +__�c +, +__nmc +, +__�n +, +__ps +, + +549 + `__bos + ( +__d� +�/ ( +wch�_t +)); + +551 i�( +__�n + > + `__bos + ( +__d� +�/ ( +wch�_t +)) + +552 + `__mb��owcs_chk_w�n + ( +__d� +, +__�c +, +__nmc +, +__�n +, +__ps +, + +553 + `__bos + ( +__d� +�/ ( +wch�_t +)); + +555 + `__mb��owcs_��s + ( +__d� +, +__�c +, +__nmc +, +__�n +, +__ps +); + +556 + } +} + +559 +size_t + + $__wc��ombs_chk + (* +__��ri� + +__d� +, + +560 cڡ +wch�_t + ** +__��ri� + +__�c +, + +561 +size_t + +__nwc +, size_� +__�n +, + +562 +mb��e_t + * +__��ri� + +__ps +, +size_t + +__d��n +) + +563 +__THROW +; + +564 +size_t + + `__REDIRECT_NTH + ( +__wc��ombs_��s +, + +565 (* +__��ri� + +__d� +, + +566 cڡ +wch�_t + ** +__��ri� + +__�c +, + +567 +size_t + +__nwc +, size_� +__�n +, + +568 +mb��e_t + * +__��ri� + +__ps +), +wc��ombs +); + +569 +size_t + + `__REDIRECT_NTH + ( +__wc��ombs_chk_w�n +, + +570 (* +__��ri� + +__d� +, + +571 cڡ +wch�_t + ** +__��ri� + +__�c +, + +572 +size_t + +__nwc +, size_� +__�n +, + +573 +mb��e_t + * +__��ri� + +__ps +, + +574 +size_t + +__d��n +), +__wc��ombs_chk +) + +575 + `__w�ljr + ("wcsnrtombs called with dst buffer smaller�han�en"); + +577 +__f�tify_fun�i� + +size_t + + +578 + `__NTH + ( + $wc��ombs + (* +__��ri� + +__d� +, cڡ +wch�_t + **__��ri� +__�c +, + +579 +size_t + +__nwc +, size_� +__�n +, +mb��e_t + * +__��ri� + +__ps +)) + +581 i�( + `__bos + ( +__d� +�!�( +size_t +) -1) + +583 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +584 + `__wc��ombs_chk + ( +__d� +, +__�c +, +__nwc +, +__�n +, +__ps +, + +585 + `__bos + ( +__d� +)); + +587 i�( +__�n + > + `__bos + ( +__d� +)) + +588 + `__wc��ombs_chk_w�n + ( +__d� +, +__�c +, +__nwc +, +__�n +, +__ps +, + +589 + `__bos + ( +__d� +)); + +591 + `__wc��ombs_��s + ( +__d� +, +__�c +, +__nwc +, +__�n +, +__ps +); + +592 + } +} + + @/usr/include/gnu/option-groups.h + +10 #i�de� +__GNU_OPTION_GROUPS_H + + +11 + #__GNU_OPTION_GROUPS_H + + + ) + +13 + #__OPTION_EGLIBC_ADVANCED_INET6 + 1 + + ) + +14 + #__OPTION_EGLIBC_BACKTRACE + 1 + + ) + +15 + #__OPTION_EGLIBC_BIG_MACROS + 1 + + ) + +16 + #__OPTION_EGLIBC_BSD + 1 + + ) + +17 + #__OPTION_EGLIBC_CATGETS + 1 + + ) + +18 + #__OPTION_EGLIBC_CHARSETS + 1 + + ) + +19 + #__OPTION_EGLIBC_CRYPT + 1 + + ) + +20 + #__OPTION_EGLIBC_CRYPT_UFC + 1 + + ) + +21 + #__OPTION_EGLIBC_CXX_TESTS + 1 + + ) + +22 + #__OPTION_EGLIBC_DB_ALIASES + 1 + + ) + +23 + #__OPTION_EGLIBC_ENVZ + 1 + + ) + +24 + #__OPTION_EGLIBC_FCVT + 1 + + ) + +25 + #__OPTION_EGLIBC_FMTMSG + 1 + + ) + +26 + #__OPTION_EGLIBC_FSTAB + 1 + + ) + +27 + #__OPTION_EGLIBC_FTRAVERSE + 1 + + ) + +28 + #__OPTION_EGLIBC_GETLOGIN + 1 + + ) + +29 + #__OPTION_EGLIBC_IDN + 1 + + ) + +30 + #__OPTION_EGLIBC_INET + 1 + + ) + +31 + #__OPTION_EGLIBC_INET_ANL + 1 + + ) + +32 + #__OPTION_EGLIBC_LIBM + 1 + + ) + +33 + #__OPTION_EGLIBC_LOCALES + 1 + + ) + +34 + #__OPTION_EGLIBC_LOCALE_CODE + 1 + + ) + +35 + #__OPTION_EGLIBC_MEMUSAGE + 1 + + ) + +36 + #__OPTION_EGLIBC_NIS + 1 + + ) + +37 + #__OPTION_EGLIBC_NSSWITCH + 1 + + ) + +38 + #__OPTION_EGLIBC_RCMD + 1 + + ) + +39 + #__OPTION_EGLIBC_RTLD_DEBUG + 1 + + ) + +40 + #__OPTION_EGLIBC_SPAWN + 1 + + ) + +41 + #__OPTION_EGLIBC_STREAMS + 1 + + ) + +42 + #__OPTION_EGLIBC_SUNRPC + 1 + + ) + +43 + #__OPTION_EGLIBC_UTMP + 1 + + ) + +44 + #__OPTION_EGLIBC_UTMPX + 1 + + ) + +45 + #__OPTION_EGLIBC_WORDEXP + 1 + + ) + +46 + #__OPTION_POSIX_C_LANG_WIDE_CHAR + 1 + + ) + +47 + #__OPTION_POSIX_REGEXP + 1 + + ) + +48 + #__OPTION_POSIX_REGEXP_GLIBC + 1 + + ) + +49 + #__OPTION_POSIX_WIDE_CHAR_DEVICE_IO + 1 + + ) + + @/usr/include/linux/ioctl.h + +1 #i�de� +_LINUX_IOCTL_H + + +2 + #_LINUX_IOCTL_H + + + ) + +4 + ~<asm/io�l.h +> + + @/usr/include/wctype.h + +23 #i�de� +_WCTYPE_H + + +25 + ~<�u�s.h +> + +26 + ~<b�s/ty�s.h +> + +28 #i�de� +__�ed_iswxxx + + +29 + #_WCTYPE_H + 1 + + ) + +32 + #__�ed_w�t_t + + + ) + +33 + ~<wch�.h +> + +37 #i�de� +WEOF + + +38 + #WEOF + (0xffffffffu) + + ) + +41 #unde� +__�ed_iswxxx + + +46 #i�de� +__iswxxx_def�ed + + +47 + #__iswxxx_def�ed + 1 + + ) + +49 +__BEGIN_NAMESPACE_C99 + + +52 + tw�y�_t +; + +53 + g__END_NAMESPACE_C99 + + +55 #i�de� +_ISwb� + + +60 + ~<�d�n.h +> + +61 #i� +__BYTE_ORDER + =� +__BIG_ENDIAN + + +62 + #_ISwb� +( +b� +�(1 << (b�)) + + ) + +64 + #_ISwb� +( +b� +) \ + +65 (( +b� +) < 8 ? () ((1UL << (bit)) << 24) \ + +66 : (( +b� +) < 16 ? () ((1UL << (bit)) << 8) \ + +67 : (( +b� +) < 24 ? () ((1UL << (bit)) >> 8) \ + +68 : (�((1UL << ( +b� +)�>> 24)))) + + ) + +73 + m__ISwu�� + = 0, + +74 + m__ISwlow� + = 1, + +75 + m__ISw�pha + = 2, + +76 + m__ISwdig� + = 3, + +77 + m__ISwxdig� + = 4, + +78 + m__ISw�a� + = 5, + +79 + m__ISw��t + = 6, + +80 + m__ISwg�ph + = 7, + +81 + m__ISwb�nk + = 8, + +82 + m__ISw��l + = 9, + +83 + m__ISwpun� + = 10, + +84 + m__ISw�num + = 11, + +86 + m_ISwu�� + = +_ISwb� + ( +__ISwu�� +), + +87 + m_ISwlow� + = +_ISwb� + ( +__ISwlow� +), + +88 + m_ISw�pha + = +_ISwb� + ( +__ISw�pha +), + +89 + m_ISwdig� + = +_ISwb� + ( +__ISwdig� +), + +90 + m_ISwxdig� + = +_ISwb� + ( +__ISwxdig� +), + +91 + m_ISw�a� + = +_ISwb� + ( +__ISw�a� +), + +92 + m_ISw��t + = +_ISwb� + ( +__ISw��t +), + +93 + m_ISwg�ph + = +_ISwb� + ( +__ISwg�ph +), + +94 + m_ISwb�nk + = +_ISwb� + ( +__ISwb�nk +), + +95 + m_ISw��l + = +_ISwb� + ( +__ISw��l +), + +96 + m_ISwpun� + = +_ISwb� + ( +__ISwpun� +), + +97 + m_ISw�num + = +_ISwb� + ( +__ISw�num +) + +102 +__BEGIN_DECLS + + +104 +__BEGIN_NAMESPACE_C99 + + +111 + $isw�num + ( +w�t_t + +__wc +� +__THROW +; + +117 + $isw�pha + ( +w�t_t + +__wc +� +__THROW +; + +120 + $isw��l + ( +w�t_t + +__wc +� +__THROW +; + +124 + $iswdig� + ( +w�t_t + +__wc +� +__THROW +; + +128 + $iswg�ph + ( +w�t_t + +__wc +� +__THROW +; + +133 + $iswlow� + ( +w�t_t + +__wc +� +__THROW +; + +136 + $isw��t + ( +w�t_t + +__wc +� +__THROW +; + +141 + $iswpun� + ( +w�t_t + +__wc +� +__THROW +; + +146 + $isw�a� + ( +w�t_t + +__wc +� +__THROW +; + +151 + $iswu�� + ( +w�t_t + +__wc +� +__THROW +; + +156 + $iswxdig� + ( +w�t_t + +__wc +� +__THROW +; + +161 #ifde� +__USE_ISOC99 + + +162 + $iswb�nk + ( +w�t_t + +__wc +� +__THROW +; + +171 +w�y�_t + + $w�y� + (cڡ * +__�ݔty +� +__THROW +; + +175 + $isw�y� + ( +w�t_t + +__wc +, +w�y�_t + +__desc +� +__THROW +; + +176 +__END_NAMESPACE_C99 + + +183 +__BEGIN_NAMESPACE_C99 + + +186 cڡ + t__�t32_t + * + tw��ns_t +; + +187 +__END_NAMESPACE_C99 + + +188 #ifde� +__USE_GNU + + +189 + $__USING_NAMESPACE_C99 +( +w��ns_t +) + +192 +__BEGIN_NAMESPACE_C99 + + +194 +w�t_t + + $towlow� + ( +w�t_t + +__wc +� +__THROW +; + +197 +w�t_t + + $towu�� + ( +w�t_t + +__wc +� +__THROW +; + +198 +__END_NAMESPACE_C99 + + +200 +__END_DECLS + + +207 #ifde� +_WCTYPE_H + + +213 +__BEGIN_DECLS + + +215 +__BEGIN_NAMESPACE_C99 + + +218 +w��ns_t + + $w��ns + (cڡ * +__�ݔty +� +__THROW +; + +221 +w�t_t + + $tow��ns + ( +w�t_t + +__wc +, +w��ns_t + +__desc +� +__THROW +; + +222 +__END_NAMESPACE_C99 + + +224 #ifde� +__USE_XOPEN2K8 + + +226 + ~<xlo��.h +> + +230 + $isw�num_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +236 + $isw�pha_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +239 + $isw��l_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +243 + $iswdig�_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +247 + $iswg�ph_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +252 + $iswlow�_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +255 + $isw��t_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +260 + $iswpun�_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +265 + $isw�a�_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +270 + $iswu��_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +275 + $iswxdig�_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +280 + $iswb�nk_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +284 +w�y�_t + + $w�y�_l + (cڡ * +__�ݔty +, +__lo��_t + +__lo�� +) + +285 +__THROW +; + +289 + $isw�y�_l + ( +w�t_t + +__wc +, +w�y�_t + +__desc +, +__lo��_t + +__lo�� +) + +290 +__THROW +; + +298 +w�t_t + + $towlow�_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +301 +w�t_t + + $towu��_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +305 +w��ns_t + + $w��ns_l + (cڡ * +__�ݔty +, +__lo��_t + +__lo�� +) + +306 +__THROW +; + +309 +w�t_t + + $tow��ns_l + ( +w�t_t + +__wc +, +w��ns_t + +__desc +, + +310 +__lo��_t + +__lo�� +� +__THROW +; + +314 +__END_DECLS + + + @/usr/include/asm-generic/errno-base.h + +1 #i�de� +_ASM_GENERIC_ERRNO_BASE_H + + +2 + #_ASM_GENERIC_ERRNO_BASE_H + + + ) + +4 + #EPERM + 1 + + ) + +5 + #ENOENT + 2 + + ) + +6 + #ESRCH + 3 + + ) + +7 + #EINTR + 4 + + ) + +8 + #EIO + 5 + + ) + +9 + #ENXIO + 6 + + ) + +10 + #E2BIG + 7 + + ) + +11 + #ENOEXEC + 8 + + ) + +12 + #EBADF + 9 + + ) + +13 + #ECHILD + 10 + + ) + +14 + #EAGAIN + 11 + + ) + +15 + #ENOMEM + 12 + + ) + +16 + #EACCES + 13 + + ) + +17 + #EFAULT + 14 + + ) + +18 + #ENOTBLK + 15 + + ) + +19 + #EBUSY + 16 + + ) + +20 + #EEXIST + 17 + + ) + +21 + #EXDEV + 18 + + ) + +22 + #ENODEV + 19 + + ) + +23 + #ENOTDIR + 20 + + ) + +24 + #EISDIR + 21 + + ) + +25 + #EINVAL + 22 + + ) + +26 + #ENFILE + 23 + + ) + +27 + #EMFILE + 24 + + ) + +28 + #ENOTTY + 25 + + ) + +29 + #ETXTBSY + 26 + + ) + +30 + #EFBIG + 27 + + ) + +31 + #ENOSPC + 28 + + ) + +32 + #ESPIPE + 29 + + ) + +33 + #EROFS + 30 + + ) + +34 + #EMLINK + 31 + + ) + +35 + #EPIPE + 32 + + ) + +36 + #EDOM + 33 + + ) + +37 + #ERANGE + 34 + + ) + + @ +1 +. +1 +/usr/include +188 +4305 +at91_ioctl.h +cp_array.c +cp_array.h +cp_atcmd.c +cp_atcmd.h +cp_common.h +cp_comport.c +cp_comport.h +cp_dictionary.c +cp_dictionary.h +cp_fds.c +cp_fds.h +cp_gprs.c +cp_gprs.h +cp_gsmmux.c +cp_gsmmux.h +cp_hal.c +cp_hal.h +cp_iniparser.c +cp_iniparser.h +cp_klist.h +cp_logger.c +cp_logger.h +cp_network.c +cp_network.h +cp_ppp.c +cp_ppp.h +cp_proc.c +cp_proc.h +cp_queue.c +cp_queue.h +cp_ringbuf.c +cp_ringbuf.h +cp_sock.c +cp_sock.h +cp_string.c +cp_string.h +cp_time.h +cp_vector.c +cp_vector.h +test/comport.c +test/swe_tpdud.c +test/swe_tpdud.h +test/test_array.c +test/test_hal.c +test/test_hh.c +test/test_ini.c +test/test_klist.c +test/test_logger.c +test/test_queue.c +test/test_sock_client.c +test/test_sock_server.c +test/test_string.c +test/test_vector.c +/usr/include/arpa/inet.h +/usr/include/asm/ioctl.h +/usr/include/assert.h +/usr/include/ctype.h +/usr/include/errno.h +/usr/include/fcntl.h +/usr/include/getopt.h +/usr/include/libgen.h +/usr/include/linux/rtc.h +/usr/include/linux/sockios.h +/usr/include/linux/stddef.h +/usr/include/net/if.h +/usr/include/net/if_arp.h +/usr/include/netdb.h +/usr/include/netinet/in.h +/usr/include/netinet/tcp.h +/usr/include/poll.h +/usr/include/pthread.h +/usr/include/signal.h +/usr/include/stdio.h +/usr/include/stdlib.h +/usr/include/string.h +/usr/include/sys/epoll.h +/usr/include/sys/ioctl.h +/usr/include/sys/resource.h +/usr/include/sys/select.h +/usr/include/sys/socket.h +/usr/include/sys/stat.h +/usr/include/sys/time.h +/usr/include/sys/types.h +/usr/include/sys/un.h +/usr/include/sys/wait.h +/usr/include/termios.h +/usr/include/time.h +/usr/include/unistd.h +/usr/include/alloca.h +/usr/include/asm-generic/ioctl.h +/usr/include/asm/sockios.h +/usr/include/bits/byteswap.h +/usr/include/bits/confname.h +/usr/include/bits/environments.h +/usr/include/bits/epoll.h +/usr/include/bits/errno.h +/usr/include/bits/fcntl.h +/usr/include/bits/fcntl2.h +/usr/include/bits/in.h +/usr/include/bits/ioctl-types.h +/usr/include/bits/ioctls.h +/usr/include/bits/netdb.h +/usr/include/bits/posix_opt.h +/usr/include/bits/pthreadtypes.h +/usr/include/bits/resource.h +/usr/include/bits/select.h +/usr/include/bits/select2.h +/usr/include/bits/setjmp.h +/usr/include/bits/sigaction.h +/usr/include/bits/sigcontext.h +/usr/include/bits/siginfo.h +/usr/include/bits/signum.h +/usr/include/bits/sigset.h +/usr/include/bits/sigstack.h +/usr/include/bits/sigthread.h +/usr/include/bits/sockaddr.h +/usr/include/bits/socket.h +/usr/include/bits/socket2.h +/usr/include/bits/stat.h +/usr/include/bits/stdio-ldbl.h +/usr/include/bits/stdio.h +/usr/include/bits/stdio2.h +/usr/include/bits/stdio_lim.h +/usr/include/bits/stdlib-bsearch.h +/usr/include/bits/stdlib-float.h +/usr/include/bits/stdlib-ldbl.h +/usr/include/bits/stdlib.h +/usr/include/bits/string.h +/usr/include/bits/string2.h +/usr/include/bits/string3.h +/usr/include/bits/sys_errlist.h +/usr/include/bits/termios.h +/usr/include/bits/time.h +/usr/include/bits/types.h +/usr/include/bits/unistd.h +/usr/include/bits/waitflags.h +/usr/include/bits/waitstatus.h +/usr/include/bits/wordsize.h +/usr/include/endian.h +/usr/include/features.h +/usr/include/libio.h +/usr/include/rpc/netdb.h +/usr/include/sched.h +/usr/include/stdint.h +/usr/include/sys/cdefs.h +/usr/include/sys/poll.h +/usr/include/sys/sysmacros.h +/usr/include/sys/ttydefaults.h +/usr/include/sys/ucontext.h +/usr/include/sys/uio.h +/usr/include/xlocale.h +/usr/include/_G_config.h +/usr/include/asm-generic/sockios.h +/usr/include/asm/ioctls.h +/usr/include/asm/socket.h +/usr/include/bits/byteswap-16.h +/usr/include/bits/endian.h +/usr/include/bits/fcntl-linux.h +/usr/include/bits/libio-ldbl.h +/usr/include/bits/poll.h +/usr/include/bits/poll2.h +/usr/include/bits/sched.h +/usr/include/bits/socket_type.h +/usr/include/bits/stdio-lock.h +/usr/include/bits/timex.h +/usr/include/bits/typesizes.h +/usr/include/bits/uio.h +/usr/include/bits/wchar.h +/usr/include/gnu/stubs.h +/usr/include/linux/errno.h +/usr/include/stdc-predef.h +/usr/include/asm-generic/ioctls.h +/usr/include/asm-generic/socket.h +/usr/include/asm/errno.h +/usr/include/bits/libc-lock.h +/usr/include/gconv.h +/usr/include/gnu/stubs-32.h +/usr/include/gnu/stubs-64.h +/usr/include/gnu/stubs-x32.h +/usr/include/wchar.h +/usr/include/asm-generic/errno.h +/usr/include/bits/wchar-ldbl.h +/usr/include/bits/wchar2.h +/usr/include/gnu/option-groups.h +/usr/include/linux/ioctl.h +/usr/include/wctype.h +/usr/include/asm-generic/errno-base.h diff --git a/program/cp_library/cscope.po.out b/program/cp_library/cscope.po.out new file mode 100644 index 0000000..8a83f6c --- /dev/null +++ b/program/cp_library/cscope.po.out Binary files differ diff --git a/program/cp_library/makefile b/program/cp_library/makefile new file mode 100644 index 0000000..d48804a --- /dev/null +++ b/program/cp_library/makefile @@ -0,0 +1,107 @@ +#********************************************************************************* +# Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> +# All rights reserved. +# +# Filename: Makefile +# Description: This is the common subdir Makefile which to compile all the C +# source code to object files and then generate the shared or +# static library named lib$(FOLDER_NAME).a orlib $(FOLDER_NAME).so, +# which depends on the variable $LINK_MODE. +# +# Version: 1.0.0(10/08/2011~) +# Author: Guo Wenxue <guowenxue@gmail.com> +# ChangeLog: 1, Release initial version on "10/08/2011 01:29:33 AM" +# +#********************************************************************************/ + +PWD=$(shell pwd) + +#If wanna compile in the subdir, not called by top makefile, uncomment it +ifneq (${TOP_COMPILE}, YES) +LOCAL_COMPILE=YES +endif + +LINK_MODE=STATIC +#MULTHREADS=YES + +LIBNAME=$(shell basename ${PWD}) +STALIB=lib${LIBNAME}.a +DYNLIB=lib${LIBNAME}.so + +VPATH= . +SRCS = $(wildcard ${VPATH}/*.c) +OBJS = $(patsubst %.c,%.o,$(SRCS)) + +#====================================================== +# ---> Doesn't call by top makefile, compile by local +#====================================================== +ifeq (${LOCAL_COMPILE}, YES) +ARCH?=arm920t +#ARCH?=i386 +CFLAGS+=-fPIC +TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]") +ifneq (,$(filter i386,$(TMP))) + CROSS_COMPILE= +else + CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux- +endif + +PRJDIR?=$(shell dirname ${PWD}) +CFLAGS+=-I${PRJDIR} -g -Wall -Werror +CC = ${CROSS_COMPILE}gcc +AR = ${CROSS_COMPILE}ar + +endif #End local compile + +ifeq ("${LINK_MODE}", "STATIC") + LIBS = ${STALIB} +else + LIBS=${DYNLIB} ${STALIB} +endif + +ifeq ("${MULTHREADS}", "YES") +LDFLAGS+=-lpthread +CFLAGS+=-DMULTHREADS +endif + +all: entry clean ${LIBS} install + +entry: + @echo " "; + @echo " ========================================================="; + @echo " ** Compile subdir ${LIBNAME} for ${ARCH} "; + @echo " ========================================================="; + +#$(LD) -g --relocatable $(OBJS) -o lib${LIBNAME}.o +${STALIB}: $(OBJS) + $(AR) -rcu $@ $(OBJS) + +${DYNLIB}: $(OBJS) + $(CC) -fPIC -shared -o $@ $(OBJS) + +%.o : %.c + $(CC) -c $< $(CFLAGS) + +test: clean ${LIBS} + make -C test ARCH=${ARCH} + +tag: + @ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R . + @cscope -Rbq + +install: + @if [ ! -z "${LIBS_PATH}" ] ; then \ + mkdir -p ${LIBS_PATH} ; \ + cp ${LIBS} ${LIBS_PATH}; \ + fi; + +clean: + @rm -f *.o *.lo *~ + @rm -rf *.gdb *.a *.so + @make clean -C test + @rm -f *.log + +distclean: clean + @rm -f tags cscope* + +.PHONY: clean entry diff --git a/program/cp_library/tags b/program/cp_library/tags new file mode 100644 index 0000000..bc2df0f --- /dev/null +++ b/program/cp_library/tags @@ -0,0 +1,1322 @@ +!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ +!_TAG_PROGRAM_NAME Exuberant Ctags // +!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ +!_TAG_PROGRAM_VERSION 5.9~svn20110310 // +ALL_READY cp_gprs.h /^ ALL_READY,$/;" e enum:__anon4 +APN_2G cp_ppp.h 31;" d +APN_3G cp_ppp.h 30;" d +APN_ACCOUNT cp_ppp.h /^} APN_ACCOUNT; $/;" t typeref:struct:__APN_ACCOUNT +APN_DEF_CONF_FILE cp_ppp.h 39;" d +APN_LEN cp_ppp.h 26;" d +AR makefile /^AR = ${CROSS_COMPILE}ar$/;" m +AR test/makefile /^export AR=${CROSS_COMPILE}ar$/;" m +ARCH makefile /^ARCH?=arm920t$/;" m +ARCH test/makefile /^ARCH?=arm920t$/;" m +ARCH_HAS_PREFETCH cp_klist.h 54;" d +AS test/makefile /^export AS=${CROSS_COMPILE}as$/;" m +ASCIILINESZ cp_iniparser.c 14;" d file: +ATCMD_REPLY_LEN cp_atcmd.c 20;" d file: +BINARIES test/makefile /^BINARIES=$(SRCFILES:%.c=%)$/;" m +BLINK cp_hal.h 35;" d +BUF_64 cp_comport.h 30;" d +BUZZER_BEEP at91_ioctl.h 50;" d +BUZZER_FREQ at91_ioctl.h 52;" d +BUZZER_OFF at91_ioctl.h 51;" d +BUZZER_ON at91_ioctl.h 49;" d +CC makefile /^CC = ${CROSS_COMPILE}gcc$/;" m +CC test/makefile /^export CC=${CROSS_COMPILE}gcc$/;" m +CHARS_PER_LINE cp_logger.c 343;" d file: +CHARS_PER_LINE cp_string.c 397;" d file: +CHECK_HWINFO cp_gprs.h /^ CHECK_HWINFO, \/* Get GPRS hardware Information *\/$/;" e enum:__anon4 +CHECK_REGISTRY cp_gprs.h /^ CHECK_REGISTRY, \/* Check GPRS register network information *\/$/;" e enum:__anon4 +CHUNK cp_string.c 317;" d file: +CMUX_DATAPORT cp_gprs.h 37;" d +CMUX_PORT_START_INDEX cp_gprs.h 36;" d +COMPILE_DATE test/makefile /^COMPILE_DATE=$(shell date -u +"%Y-%m-%d %H:%M")$/;" m +COM_PORT cp_comport.h /^} COM_PORT;$/;" t typeref:struct:__COM_PORT +COM_PRINT cp_comport.h 38;" d +COM_PRINT cp_comport.h 40;" d +CONNECTED cp_ppp.h /^ CONNECTED,$/;" e enum:__anon2 +CONNECTING cp_ppp.h /^ CONNECTING,$/;" e enum:__anon2 +CP_ARRAY cp_array.h /^} CP_ARRAY;$/;" t typeref:struct:_CP_ARRAY +CP_ARRAY_FLAG_MALLOC cp_array.h 17;" d +CP_DEF_FDS_TIMEOUT cp_fds.h 33;" d +CP_DEF_MAX_CLIENTS cp_network.h 19;" d +CP_DEF_MAX_EVENTS cp_fds.h 32;" d +CP_DEF_RCVBUF_SIZE cp_sock.h 39;" d +CP_DEF_SNDBUF_SIZE cp_sock.h 40;" d +CP_DEF_TIMEOUT cp_network.h 20;" d +CP_FDS cp_fds.h /^} CP_FDS;$/;" t typeref:struct:_CP_FDS +CP_LOGGER_ARGUMENT cp_logger.h 62;" d +CP_LOGGER_CONSOLE cp_logger.h 64;" d +CP_LOGGER_FILE cp_logger.h 65;" d +CP_LOGGER_LEVEL_OPT cp_logger.h 67;" d +CP_LOGGER_MALLOC cp_logger.h 61;" d +CP_MAX_EVENT_ONCE cp_fds.h 31;" d +CP_PROC_SIG cp_proc.h /^} CP_PROC_SIG;$/;" t typeref:struct:__CP_PROC_SIG +CP_QNODE cp_queue.h /^} CP_QNODE;$/;" t typeref:struct:_CP_QNODE +CP_QUEUE cp_queue.h /^} CP_QUEUE;$/;" t typeref:struct:_CP_QUEUE +CP_SOCK cp_sock.h /^} CP_SOCK;$/;" t typeref:struct:_CP_SOCK +CP_SOCK_CALLBACK cp_sock.h /^} CP_SOCK_CALLBACK; $/;" t typeref:struct:_CP_SOCK_CALLBACK +CP_SOCK_DEF_IDLE_TIMEOUT cp_sock.h 45;" d +CP_SOCK_DEF_MSG_TIMEOUT cp_sock.h 46;" d +CP_SOCK_EVENT_CALLBACK cp_sock.h /^typedef int (*CP_SOCK_EVENT_CALLBACK)(struct _CP_SOCK *sock);$/;" t +CP_SOCK_EVENT_ERROR cp_sock.h /^ CP_SOCK_EVENT_ERROR = EPOLLERR, \/* compatilbe with EPOLLERR *\/$/;" e enum:__anon7 +CP_SOCK_EVENT_HUP cp_sock.h /^ CP_SOCK_EVENT_HUP = EPOLLHUP, \/* compatilbe with EPOLLHUP *\/$/;" e enum:__anon7 +CP_SOCK_EVENT_IDLE_TIMEOUT cp_sock.h /^ CP_SOCK_EVENT_IDLE_TIMEOUT = (1<<16), \/* compatilbe with EPOLL reserved*\/ $/;" e enum:__anon7 +CP_SOCK_EVENT_MSG_TIMEOUT cp_sock.h /^ CP_SOCK_EVENT_MSG_TIMEOUT = (1<<17), \/* compatible with EPOLL reserved*\/$/;" e enum:__anon7 +CP_SOCK_EVENT_READ cp_sock.h /^ CP_SOCK_EVENT_READ = EPOLLIN, \/* compatilbe with EPOLLIN *\/$/;" e enum:__anon7 +CP_SOCK_EVENT_WRITE cp_sock.h /^ CP_SOCK_EVENT_WRITE = EPOLLOUT, \/* compatilbe with EPOLLOUT *\/$/;" e enum:__anon7 +CP_SOCK_KEEPCNT cp_sock.h 49;" d +CP_SOCK_KEEPINTVL cp_sock.h 48;" d +CP_SOCK_MODE_ACCEPT cp_sock.h 52;" d +CP_SOCK_MODE_CONNECT cp_sock.h 53;" d +CP_SOCK_MODE_LISTEN cp_sock.h 54;" d +CP_SOCK_MODE_NONE cp_sock.h 51;" d +CP_SOCK_RCVBUF cp_sock.h 42;" d +CP_SOCK_SNDBUF cp_sock.h 43;" d +CP_VECTOR cp_vector.h /^} CP_VECTOR;$/;" t typeref:struct:_CP_VECTOR +CROSS_COMPILE makefile /^ CROSS_COMPILE=$/;" m +CROSS_COMPILE makefile /^ CROSS_COMPILE=\/opt\/xtools\/arm920t\/bin\/arm-linux-$/;" m +CROSS_COMPILE test/makefile /^ CROSS_COMPILE=$/;" m +CROSS_COMPILE test/makefile /^ CROSS_COMPILE=\/opt\/buildroot-2012.08\/$(ARCH)\/usr\/bin\/arm-linux-$/;" m +CXX test/makefile /^export CXX=${CROSS_COMPILE}g++$/;" m +DATE_TIME cp_time.h /^} DATE_TIME;$/;" t typeref:struct:__DATE_TIME +DBG_LOG_FILE cp_logger.h 37;" d +DEBUG test/makefile /^DEBUG=1$/;" m +DEFAULT_LOGFILE cp_logger.h 36;" d +DEFAULT_PING_INTERVAL cp_ppp.h 25;" d +DEFAULT_TIME_FORMAT cp_logger.h 42;" d +DEF_PING_DST cp_ppp.h 37;" d +DEVNAME_LEN cp_comport.h 33;" d +DEV_GMTUBE_PATH cp_hal.h 31;" d +DEV_GPS_PATH cp_hal.h 29;" d +DEV_GSM_PATH cp_hal.h 28;" d +DEV_LED_PATH cp_hal.h 27;" d +DEV_ZIGBEE_PATH cp_hal.h 30;" d +DICTMINSZ cp_dictionary.c 27;" d file: +DICT_INVALID_KEY cp_dictionary.c 30;" d file: +DISCONNECT cp_ppp.h /^ DISCONNECT = 0,$/;" e enum:__anon2 +DOMAIN test/test_sock_server.c 23;" d file: +DYNLIB makefile /^DYNLIB=lib${LIBNAME}.so$/;" m +FILENAME_LEN cp_logger.h 33;" d +FLAG_FDS_INIT cp_fds.h 38;" d +FLAG_FDS_MALLOC cp_fds.h 39;" d +FLAG_SOCK_EPOLLED cp_sock.h 81;" d +FLAG_SOCK_INIT cp_sock.h 79;" d +FLAG_SOCK_INQUEUE cp_sock.h 83;" d +FLAG_SOCK_MALLOC cp_sock.h 80;" d +FLAG_SOCK_REGISTRY cp_sock.h 82;" d +FLAG_SOCK_TASKED cp_sock.h 84;" d +FLAG_TPDU_INIT test/swe_tpdud.h 26;" d +FLAG_TPDU_STOP test/swe_tpdud.h 27;" d +GET_ADC_DATA at91_ioctl.h 44;" d +GET_BATTERY_STAT at91_ioctl.h 41;" d +GET_BUTTON_STATUS at91_ioctl.h 55;" d +GET_DRV_VER at91_ioctl.h 34;" d +GET_GMTUBE_VHIGH at91_ioctl.h 42;" d +GET_GPRS_VBAT at91_ioctl.h 43;" d +GM_GET_MEASURE_DOSE at91_ioctl.h 81;" d +GM_GET_VOLTAGE at91_ioctl.h 84;" d +GM_SET_DUTY at91_ioctl.h 82;" d +GM_SET_INTERVAL at91_ioctl.h 83;" d +GM_SET_MEASURE_RADI at91_ioctl.h 80;" d +GM_SET_MEASURE_TC at91_ioctl.h 88;" d +GM_SET_POWER at91_ioctl.h 86;" d +GM_SET_PWM_TC at91_ioctl.h 87;" d +GM_SET_TIMER_TC at91_ioctl.h 89;" d +GPRS_LOCATION cp_atcmd.h /^} GPRS_LOCATION;$/;" t typeref:struct:_GPRS_LOCATION +GPS_GET_POWER at91_ioctl.h 75;" d +GPS_SET_POWER at91_ioctl.h 74;" d +GSMIOC_GETCONF cp_gsmmux.h 36;" d +GSMIOC_SETCONF cp_gsmmux.h 37;" d +GSM_CTRLPORT cp_gprs.h 32;" d +GSM_DATAPORT cp_gprs.h 33;" d +GSM_GET_ADC at91_ioctl.h 72;" d +GSM_GET_POWER at91_ioctl.h 71;" d +GSM_SET_POWER at91_ioctl.h 70;" d +HAL_LIBRARY_TEST test/test_hal.c 18;" d file: +HH_DATAPORT test/test_hh.c 16;" d file: +HLIST_HEAD cp_klist.h 587;" d +HLIST_HEAD_INIT cp_klist.h 586;" d +HOSTSIM_IP test/swe_tpdud.h 20;" d +HOSTSIM_PORT test/swe_tpdud.h 19;" d +HW_INFO cp_atcmd.h /^} HW_INFO;$/;" t typeref:struct:_HARDWARE_INFO +INIT_HLIST_HEAD cp_klist.h 588;" d +INIT_HLIST_NODE cp_klist.h /^static inline void INIT_HLIST_NODE(struct hlist_node *h)$/;" f +INIT_LIST_HEAD cp_klist.h /^static inline void INIT_LIST_HEAD(struct list_head *list)$/;" f +INI_CONF test/test_ini.c 17;" d file: +INI_INVALID_KEY cp_iniparser.c 15;" d file: +INSTPATH test/makefile /^INSTPATH=\/tftp$/;" m +IN_EVENT_LIST cp_fds.h 35;" d +IN_TASK_LIST cp_fds.h 36;" d +IPADDR test/test_sock_server.c 24;" d file: +LED_BLINK at91_ioctl.h 60;" d +LED_OFF at91_ioctl.h 58;" d +LED_ON at91_ioctl.h 59;" d +LED_SYS cp_hal.h 44;" d +LIBNAME makefile /^LIBNAME=$(shell basename ${PWD})$/;" m +LIBS makefile /^ LIBS = ${STALIB} $/;" m +LIBS makefile /^ LIBS=${DYNLIB} ${STALIB}$/;" m +LIB_NAME test/makefile /^LIB_NAME=$(shell basename ${LIB_PATH})$/;" m +LIB_PATH test/makefile /^LIB_PATH=$(shell dirname ${PWD})$/;" m +LINELEN cp_logger.c 342;" d file: +LINELEN cp_string.c 396;" d file: +LINE_COMMENT cp_iniparser.c /^ LINE_COMMENT,$/;" e enum:_line_status_ file: +LINE_EMPTY cp_iniparser.c /^ LINE_EMPTY,$/;" e enum:_line_status_ file: +LINE_ERROR cp_iniparser.c /^ LINE_ERROR,$/;" e enum:_line_status_ file: +LINE_SECTION cp_iniparser.c /^ LINE_SECTION,$/;" e enum:_line_status_ file: +LINE_UNPROCESSED cp_iniparser.c /^ LINE_UNPROCESSED,$/;" e enum:_line_status_ file: +LINE_VALUE cp_iniparser.c /^ LINE_VALUE$/;" e enum:_line_status_ file: +LINK_MODE makefile /^LINK_MODE=STATIC$/;" m +LIST_HEAD cp_klist.h 74;" d +LIST_HEAD_INIT cp_klist.h 72;" d +LIST_POISON1 cp_klist.h 50;" d +LIST_POISON2 cp_klist.h 51;" d +LOCAL_COMPILE makefile /^LOCAL_COMPILE=YES$/;" m +LOG_FILE_LINE cp_logger.h 46;" d +LOG_LEVEL_DEBUG cp_logger.h /^ LOG_LEVEL_DEBUG, \/* Debug Level "Debug" *\/$/;" e enum:__anon1 +LOG_LEVEL_DISB cp_logger.h /^ LOG_LEVEL_DISB = 0, \/* Disable "Debug" *\/$/;" e enum:__anon1 +LOG_LEVEL_ERROR cp_logger.h /^ LOG_LEVEL_ERROR, \/* Debug Level "ERROR" *\/$/;" e enum:__anon1 +LOG_LEVEL_FATAL cp_logger.h /^ LOG_LEVEL_FATAL, \/* Debug Level "Fatal" *\/$/;" e enum:__anon1 +LOG_LEVEL_INFO cp_logger.h /^ LOG_LEVEL_INFO, \/* Debug Level "Information" *\/$/;" e enum:__anon1 +LOG_LEVEL_MAX cp_logger.h /^ LOG_LEVEL_MAX,$/;" e enum:__anon1 +LOG_LEVEL_NRML cp_logger.h /^ LOG_LEVEL_NRML, \/* Debug Level "Normal" *\/$/;" e enum:__anon1 +LOG_LEVEL_TRACE cp_logger.h /^ LOG_LEVEL_TRACE, \/* Debug Level "Trace" *\/$/;" e enum:__anon1 +LOG_LEVEL_WARN cp_logger.h /^ LOG_LEVEL_WARN, \/* Debug Level "warnning" *\/$/;" e enum:__anon1 +LOG_ROLLBACK_NONE cp_logger.h 40;" d +LOG_ROLLBACK_SIZE cp_logger.h 39;" d +LOG_VERSION_STR cp_logger.h 30;" d +MAXVALSZ cp_dictionary.c 24;" d file: +MAX_DATAPORT cp_gprs.h 35;" d +MAX_ITEMS test/test_array.c 22;" d file: +MAX_ITEMS test/test_queue.c 21;" d file: +MAX_LOG_MESSAGE_LEN cp_logger.h 43;" d +MAX_PPP_FAIL_CNT cp_ppp.h 99;" d +MODE test/makefile /^MODE=PRODUCTION$/;" m +MODE_AUTO cp_gprs.h 70;" d +MODE_FAST cp_hal.h 39;" d +MODE_GSM cp_gprs.h 71;" d +MODE_SLOW cp_hal.h 38;" d +MODE_WCDMA cp_gprs.h 72;" d +MODULE_INFO cp_gprs.h /^} MODULE_INFO;$/;" t typeref:struct:__MODULE_INFO +MODULE_READY cp_gprs.h /^ MODULE_READY, \/* GPRS AT command active and SIM card valid *\/$/;" e enum:__anon4 +NO cp_gprs.h 30;" d +NOT_READY cp_gprs.h /^ NOT_READY,$/;" e enum:__anon4 +NS_EGPRS cp_gprs.h /^ NS_EGPRS, \/* EGPRS(EDGE) *\/$/;" e enum:__anon6 +NS_GPRS cp_gprs.h /^ NS_GPRS, \/* GPRS *\/$/;" e enum:__anon6 +NS_GSM cp_gprs.h /^ NS_GSM, \/* GSM *\/$/;" e enum:__anon6 +NS_HSDPA cp_gprs.h /^ NS_HSDPA, \/* HSDPA only *\/$/;" e enum:__anon6 +NS_HSPA cp_gprs.h /^ NS_HSPA, \/* HSDPA and HSUPA *\/$/;" e enum:__anon6 +NS_HSUPA cp_gprs.h /^ NS_HSUPA, \/* HSUPA only *\/$/;" e enum:__anon6 +NS_NONE cp_gprs.h /^ NS_NONE = 0, \/* No service *\/$/;" e enum:__anon6 +NS_WCDMA cp_gprs.h /^ NS_WCDMA, \/* WCDMA *\/$/;" e enum:__anon6 +NVALS cp_dictionary.c 359;" d file: +N_GSM0710 cp_gsmmux.h 39;" d +OBJS makefile /^OBJS = $(patsubst %.c,%.o,$(SRCS))$/;" m +OBJS test/makefile /^OBJS = $(patsubst %.c,%.o,$(SRCS))$/;" m +OFF cp_hal.h 33;" d +ON cp_hal.h 34;" d +PID_ASCII_SIZE cp_proc.h 19;" d +PING_INTERVAL_TIME cp_ppp.h 23;" d +PLATDRV_MAGIC at91_ioctl.h 26;" d +POISON_POINTER_DELTA cp_klist.h 40;" d +POISON_POINTER_DELTA cp_klist.h 42;" d +PPPD_CMD_LEN cp_ppp.c 242;" d file: +PPPD_DIAL_SCRIPTS cp_ppp.h 33;" d +PPPD_DIAL_TIMEOUT cp_ppp.h 22;" d +PPPD_INFO cp_ppp.h /^} PPPD_INFO;$/;" t typeref:struct:__PPPD_INFO +PPP_BAD cp_ppp.h 104;" d +PPP_CONN cp_ppp.h 103;" d +PPP_CTX cp_ppp.h /^} PPP_CTX;$/;" t typeref:struct:__PPP_CTX +PPP_GOOD cp_ppp.h 105;" d +PPP_INTERFACE_NAME cp_ppp.h 34;" d +PPP_PROC_NET_DEV cp_ppp.h 35;" d +PPP_STAT cp_ppp.h /^} PPP_STAT;$/;" t typeref:struct:__PPP_STAT +PPP_STOP cp_ppp.h 101;" d +PRECISE_TIME_FACTOR cp_logger.c 17;" d file: +PRIVT_FREE cp_sock.h /^typedef void (*PRIVT_FREE)(void);$/;" t +PRJDIR makefile /^PRJDIR?=$(shell dirname ${PWD})$/;" m +PWD makefile /^PWD=$(shell pwd)$/;" m +PWD test/makefile /^PWD=$(shell pwd)$/;" m +PWD_LEN cp_ppp.h 28;" d +RANLIB test/makefile /^export RANLIB=${CROSS_COMPILE}ranlib$/;" m +REGISTER_INFO cp_atcmd.h /^} REGISTER_INFO;$/;" t typeref:struct:_REGISTER_INFO +REG_DENIED cp_gprs.h /^ REG_DENIED, \/* registration denied *\/$/;" e enum:__anon5 +REG_HOMEWORK cp_gprs.h /^ REG_HOMEWORK, \/* registered, home network *\/$/;" e enum:__anon5 +REG_ROAMING cp_gprs.h /^ REG_ROAMING, \/* registered, roaming *\/$/;" e enum:__anon5 +REG_SEARCHING cp_gprs.h /^ REG_SEARCHING, \/* not registered, but ME is currently searching a new operator to register to *\/$/;" e enum:__anon5 +REG_UNKNOW cp_gprs.h /^ REG_UNKNOW, \/* unknow *\/$/;" e enum:__anon5 +REG_UNREGIST cp_gprs.h /^ REG_UNREGIST = 0, \/* not registered, ME is not currently searching a new operator to register to *\/$/;" e enum:__anon5 +REQ_EVENT_NONE cp_gprs.h /^ REQ_EVENT_NONE = 0,$/;" e enum:__anon3 +REQ_POWER_OFF cp_gprs.h /^ REQ_POWER_OFF,$/;" e enum:__anon3 +REQ_POWER_ON cp_gprs.h /^ REQ_POWER_ON,$/;" e enum:__anon3 +REQ_POWER_RESET cp_gprs.h /^ REQ_POWER_RESET,$/;" e enum:__anon3 +RESET cp_hal.h 36;" d +SELECTED_APN cp_ppp.h /^ SELECTED_APN,$/;" e enum:__anon2 +SERV_ADDR test/test_sock_client.c 21;" d file: +SERV_PORT test/test_sock_client.c 23;" d file: +SERV_PORT1 test/test_sock_server.c 20;" d file: +SERV_PORT2 test/test_sock_server.c 21;" d file: +SET_ADC_INTERVEL at91_ioctl.h 45;" d +SET_DRV_DEBUG at91_ioctl.h 33;" d +SIG_WEAK cp_ppp.h 102;" d +SOCK_STAT_ACCEPTED cp_sock.h 90;" d +SOCK_STAT_ALREADY cp_sock.h 91;" d +SOCK_STAT_CONNECTED cp_sock.h 88;" d +SOCK_STAT_CONNECTING cp_sock.h 87;" d +SOCK_STAT_DISCONNECT cp_sock.h 92;" d +SOCK_STAT_INIT cp_sock.h 86;" d +SOCK_STAT_LISTENED cp_sock.h 89;" d +SRCFILES test/makefile /^SRCFILES = $(wildcard *.c)$/;" m +SRCS makefile /^SRCS = $(wildcard ${VPATH}\/*.c)$/;" m +SRCS test/makefile /^SRCS = $(wildcard ${VPATH}\/*.c)$/;" m +STALIB makefile /^STALIB=lib${LIBNAME}.a$/;" m +START cp_hal.h 41;" d +STOP cp_hal.h 42;" d +STRIP test/makefile /^export STRIP=${CROSS_COMPILE}strip$/;" m +SWE_TPDU test/swe_tpdud.h /^} SWE_TPDU;$/;" t typeref:struct:_SWE_TPDU +THREAD_BODY cp_proc.h /^typedef void *(THREAD_BODY) (void *thread_arg);$/;" t +TMP makefile /^TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")$/;" m +TMP test/makefile /^TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")$/;" m +TPDUD_PORT test/swe_tpdud.h 22;" d +TURN_ALL_LED at91_ioctl.h 61;" d +UID_LEN cp_ppp.h 27;" d +UPLINK_ADDR test/swe_tpdud.h 23;" d +UPLINK_PORT test/swe_tpdud.h 24;" d +VPATH makefile /^VPATH= .$/;" m +VPATH test/makefile /^VPATH= .$/;" m +YES cp_gprs.h 29;" d +ZIGBEE_RESET at91_ioctl.h 64;" d +ZIGBEE_STATUS at91_ioctl.h 65;" d +_CP_ARRAY cp_array.h /^typedef struct _CP_ARRAY$/;" s +_CP_COMPORT_H cp_comport.h 14;" d +_CP_DICTIONARY_H_ cp_dictionary.h 15;" d +_CP_FDS cp_fds.h /^struct _CP_FDS;$/;" x +_CP_FDS cp_fds.h /^typedef struct _CP_FDS$/;" s +_CP_FDS cp_sock.h /^struct _CP_FDS;$/;" x +_CP_INIPARSER_H_ cp_iniparser.h 11;" d +_CP_QNODE cp_queue.h /^typedef struct _CP_QNODE$/;" s +_CP_QUEUE cp_queue.h /^typedef struct _CP_QUEUE$/;" s +_CP_SOCK cp_fds.h /^struct _CP_SOCK;$/;" x +_CP_SOCK cp_sock.h /^struct _CP_SOCK;$/;" x +_CP_SOCK cp_sock.h /^typedef struct _CP_SOCK$/;" s +_CP_SOCK_CALLBACK cp_sock.h /^typedef struct _CP_SOCK_CALLBACK$/;" s +_CP_STRING_H cp_string.h 2;" d +_CP_VECTOR cp_vector.h /^typedef struct _CP_VECTOR$/;" s +_GPRS_LOCATION cp_atcmd.h /^typedef struct _GPRS_LOCATION$/;" s +_HARDWARE_INFO cp_atcmd.h /^typedef struct _HARDWARE_INFO$/;" s +_LINUX_LIST_H cp_klist.h 15;" d +_REGISTER_INFO cp_atcmd.h /^typedef struct _REGISTER_INFO$/;" s +_SWE_TPDU test/swe_tpdud.h /^typedef struct _SWE_TPDU$/;" s +__APN_ACCOUNT cp_ppp.h /^typedef struct __APN_ACCOUNT$/;" s +__AT91_IOCTL_H at91_ioctl.h 15;" d +__COM_PORT cp_comport.h /^typedef struct __COM_PORT$/;" s +__CP_ARRAY_H cp_array.h 15;" d +__CP_ATCMD_H cp_atcmd.h 15;" d +__CP_COMMON_H cp_common.h 15;" d +__CP_FDS_H cp_fds.h 15;" d +__CP_GPRS_H cp_gprs.h 15;" d +__CP_GSMMUX_H_ cp_gsmmux.h 16;" d +__CP_HAL_H cp_hal.h 14;" d +__CP_LOG_H cp_logger.h 15;" d +__CP_NETWORK_H cp_network.h 14;" d +__CP_PROC_H cp_proc.h 15;" d +__CP_PROC_SIG cp_proc.h /^typedef struct __CP_PROC_SIG$/;" s +__CP_QUEUE cp_queue.h 14;" d +__CP_RINGBUF_H_ cp_ringbuf.h 22;" d +__CP_SOCK_H cp_sock.h 14;" d +__CP_TIME_H cp_time.h 14;" d +__CP_VECTOR cp_vector.h 15;" d +__DATE_TIME cp_time.h /^typedef struct __DATE_TIME$/;" s +__MODULE_INFO cp_gprs.h /^typedef struct __MODULE_INFO$/;" s +__PPPD_INFO cp_ppp.h /^typedef struct __PPPD_INFO$/;" s +__PPP_CTX cp_ppp.h /^typedef struct __PPP_CTX$/;" s +__PPP_H cp_ppp.h 14;" d +__PPP_STAT cp_ppp.h /^typedef struct __PPP_STAT$/;" s +__SWE_TPDUD_H test/swe_tpdud.h 15;" d +__hlist_del cp_klist.h /^static inline void __hlist_del(struct hlist_node *n)$/;" f +__list_add cp_klist.h /^static inline void __list_add(struct list_head *new,$/;" f +__list_cut_position cp_klist.h /^static inline void __list_cut_position(struct list_head *list,$/;" f +__list_del cp_klist.h /^static inline void __list_del(struct list_head *prev, struct list_head *next)$/;" f +__list_for_each cp_klist.h 405;" d +__list_splice cp_klist.h /^static inline void __list_splice(const struct list_head *list,$/;" f +_cp_logger cp_logger.h /^typedef struct _cp_logger$/;" s +_cp_string cp_string.h /^typedef struct _cp_string$/;" s +_curOffset cp_logger.c /^ long _curOffset = ftell(logger->fp);$/;" l +_dictionary_ cp_dictionary.h /^typedef struct _dictionary_ {$/;" s +_line_status_ cp_iniparser.c /^typedef enum _line_status_ {$/;" g file: +_t_free cp_common.h /^static inline void _t_free(void *ptr$/;" f +_t_malloc cp_common.h /^static inline void *_t_malloc(size_t size$/;" f +acBuf cp_atcmd.c /^ char acBuf [256],$/;" l +acRecv cp_atcmd.c /^ char acRecv[1024];$/;" l +accept_cnt cp_sock.h /^ int accept_cnt; \/* current clients number, only listen socket use it*\/$/;" m struct:_CP_SOCK +accept_list cp_sock.h /^ struct list_head accept_list; \/* all the accept client list head, only listen socket use it *\/$/;" m struct:_CP_SOCK typeref:struct:_CP_SOCK::list_head +act cp_logger.c /^ struct sigaction act;$/;" l +actv_time cp_sock.h /^ unsigned long actv_time; \/* The last time get event(send\/recv) data in this socket *\/$/;" m struct:_CP_SOCK +adaption cp_gsmmux.h /^ unsigned int adaption;$/;" m struct:gsm_config +alloc_gsm_dataport cp_gprs.c /^COM_PORT *alloc_gsm_dataport(char *who, MODULE_INFO *module)$/;" f +ap cp_string.c /^ va_list ap;$/;" l +apn cp_ppp.h /^ APN_ACCOUNT apn; \/* PPP dial up APN *\/$/;" m struct:__PPP_CTX +apn cp_ppp.h /^ char apn[APN_LEN];$/;" m struct:__APN_ACCOUNT +arg cp_hal.c /^ int arg = led|(mode<<3);$/;" l +arg test/swe_tpdud.c /^ SWE_TPDU *arg = dlink->serv_sock->privt;$/;" l +argp cp_logger.c /^ va_list argp;$/;" l +args cp_proc.c /^ va_list args;$/;" l +array test/test_array.c /^ CP_ARRAY *array = NULL;$/;" l +at_match cp_atcmd.c /^unsigned char at_match (char *p_pcStr, char *p_pcMatch)$/;" f +atcmd cp_atcmd.c /^ char atcmd[64]={0}; $/;" l +atcmd cp_atcmd.c /^ char atcmd[64]={0};$/;" l +atcmd_check_at_ready cp_atcmd.c /^int atcmd_check_at_ready(COM_PORT *comport)$/;" f +atcmd_check_gprs_carrier cp_atcmd.c /^int atcmd_check_gprs_carrier(COM_PORT *comport, char *carrier)$/;" f +atcmd_check_gprs_iemi cp_atcmd.c /^int atcmd_check_gprs_iemi(COM_PORT *comport, char *iemi)$/;" f +atcmd_check_gprs_location cp_atcmd.c /^int atcmd_check_gprs_location(COM_PORT *comport, GPRS_LOCATION *loc)$/;" f +atcmd_check_gprs_mcc_mnc cp_atcmd.c /^int atcmd_check_gprs_mcc_mnc(COM_PORT *comport, char *mcc_mnc)$/;" f +atcmd_check_gprs_name cp_atcmd.c /^int atcmd_check_gprs_name(COM_PORT *comport, char *name)$/;" f +atcmd_check_gprs_network cp_atcmd.c /^int atcmd_check_gprs_network(COM_PORT *comport, int *network)$/;" f +atcmd_check_gprs_register cp_atcmd.c /^int atcmd_check_gprs_register(COM_PORT *comport)$/;" f +atcmd_check_gprs_signal cp_atcmd.c /^int atcmd_check_gprs_signal(COM_PORT *comport)$/;" f +atcmd_check_gprs_version cp_atcmd.c /^int atcmd_check_gprs_version(COM_PORT *comport, char *version)$/;" f +atcmd_check_hwinfo cp_gprs.c /^int atcmd_check_hwinfo(COM_PORT *comport, HW_INFO *hw, int times)$/;" f +atcmd_check_module_ready cp_gprs.c /^int atcmd_check_module_ready(COM_PORT *comport, int times)$/;" f +atcmd_check_network_info cp_gprs.c /^int atcmd_check_network_info(COM_PORT *comport, REGISTER_INFO *reg)$/;" f +atcmd_check_power_on cp_gprs.c /^int atcmd_check_power_on(COM_PORT *comport)$/;" f +atcmd_check_ready cp_gprs.c /^int atcmd_check_ready(MODULE_INFO *module)$/;" f +atcmd_check_regist cp_gprs.c /^int atcmd_check_regist(COM_PORT *comport, REGISTER_INFO *reg, int times)$/;" f +atcmd_check_sim_valid cp_atcmd.c /^int atcmd_check_sim_valid(COM_PORT *comport)$/;" f +atcmd_inspect_status cp_gprs.c /^int atcmd_inspect_status(MODULE_INFO *module)$/;" f +atcmd_module_preset cp_gprs.c /^int atcmd_module_preset(COM_PORT *comport)$/;" f +atcmd_set_apn cp_atcmd.c /^int atcmd_set_apn(COM_PORT *comport, char *apn)$/;" f +atcmd_set_network_mode cp_atcmd.c /^int atcmd_set_network_mode(COM_PORT *comport, int mode)$/;" f +attach_gsm0710 cp_gsmmux.c /^int attach_gsm0710(COM_PORT *comport)$/;" f +auth cp_ppp.h /^ char auth[10]; \/* PAP or CHAP *\/$/;" m struct:__APN_ACCOUNT +baudrate cp_comport.h /^ long baudrate;$/;" m struct:__COM_PORT +baudrate test/comport.c /^ int baudrate = 115200;$/;" l +buf cp_logger.c /^ char buf[MAX_LOG_MESSAGE_LEN];$/;" l +buf cp_network.c /^ char buf[512];$/;" l +buf cp_ppp.c /^ char buf[512];$/;" l +buf cp_ppp.c /^ char buf[512];$/;" l +buf cp_ppp.c /^ char buf[10];$/;" l +buf cp_string.c /^ char buf[CHUNK];$/;" l +buf test/comport.c /^ char buf[512];$/;" l +buf test/test_logger.c /^ char buf[30]="Hello World!\\n";$/;" l +buffer cp_ringbuf.h /^ u_char *buffer;$/;" m struct:ring_buffer +c cp_gsmmux.c /^ struct gsm_config c;$/;" l +c cp_iniparser.c /^ char * c ;$/;" l +c cp_logger.c /^ unsigned char c = buf[idx];$/;" l +c cp_string.c /^ unsigned char c = data[idx];$/;" l +c cp_string.c /^ unsigned char c = str->data[idx];$/;" l +cSleep cp_time.h /^ struct timespec cSleep;$/;" l +carrier cp_atcmd.h /^ char carrier[64];\/* Network operator *\/$/;" m struct:_REGISTER_INFO +cbfunc cp_sock.h /^ CP_SOCK_EVENT_CALLBACK cbfunc; \/* event callback function *\/$/;" m struct:_CP_SOCK +ch cp_string.c /^ char *i, *f, ch;$/;" l +check_and_rollback cp_logger.c /^static void check_and_rollback(void)$/;" f file: +check_daemon_running cp_proc.c /^int check_daemon_running(const char *pid_file)$/;" f +check_ppp_interface cp_ppp.c /^int check_ppp_interface(char *ppp_dev)$/;" f +check_ppp_ipaddr cp_ppp.c /^int check_ppp_ipaddr(PPPD_INFO *pppd_info, char *ppp_dev)$/;" f +check_ppp_stat cp_ppp.c /^int check_ppp_stat(PPP_STAT *ppp_stat, char *ppp_dev)$/;" f +check_pppd_pid cp_ppp.c /^int check_pppd_pid(char *find_key)$/;" f +clen cp_string.c /^ int clen = strlen(cstr);$/;" l +client_func cp_sock.h /^ CP_SOCK_EVENT_CALLBACK client_func; \/* client data callback function, only server socket use it *\/$/;" m struct:_CP_SOCK +client_list cp_fds.h /^ struct list_head client_list; \/* a list keep all the connect sockets *\/ $/;" m struct:_CP_FDS typeref:struct:_CP_FDS::list_head +close_gsm_dataport cp_gprs.c /^void close_gsm_dataport(MODULE_INFO *module)$/;" f +cmd cp_logger.c /^ char cmd[512];$/;" l +cmd cp_network.c /^ char cmd[256];$/;" l +cmd cp_ppp.c /^ char cmd[128];$/;" l +cmd cp_proc.c /^ char cmd[256];$/;" l +comport cp_comport.c /^ COM_PORT *comport = NULL;$/;" l +comport cp_gprs.c /^ COM_PORT *comport;$/;" l +comport cp_gprs.c /^ COM_PORT *comport = NULL;$/;" l +comport cp_gprs.h /^ COM_PORT *comport[MAX_DATAPORT]; \/* CMUX driver generate CMUX port *\/$/;" m struct:__MODULE_INFO +comport cp_ppp.h /^ COM_PORT *comport;$/;" m struct:__PPP_CTX +comport test/comport.c /^ COM_PORT *comport = NULL;$/;" l +comport test/test_hh.c /^ COM_PORT *comport = NULL;$/;" l +comport_close cp_comport.c /^void comport_close(COM_PORT * comport)$/;" f +comport_cnt cp_gprs.h /^ int comport_cnt; \/* GPRS data channel count *\/$/;" m struct:__MODULE_INFO +comport_init cp_comport.c /^COM_PORT *comport_init(const char *dev_name, int baudrate, const char *settings)$/;" f +comport_open cp_comport.c /^int comport_open(COM_PORT * comport)$/;" f +comport_recv cp_comport.c /^int comport_recv(COM_PORT * comport, char *buf, int buf_size, unsigned long timeout)$/;" f +comport_send cp_comport.c /^int comport_send(COM_PORT * comport, char *buf, int send_bytes)$/;" f +comport_term cp_comport.c /^void comport_term(COM_PORT * comport)$/;" f +container_of cp_common.h 25;" d +container_of cp_klist.h 29;" d +cp_add_epoll_event cp_fds.c /^int cp_add_epoll_event(CP_SOCK *sock)$/;" f +cp_array_add cp_array.c /^int cp_array_add(CP_ARRAY *array, void *data)$/;" f +cp_array_count cp_array.h 28;" d +cp_array_init cp_array.c /^CP_ARRAY *cp_array_init(CP_ARRAY *array, int size)$/;" f +cp_array_is_empty cp_array.h 27;" d +cp_array_is_full cp_array.h 26;" d +cp_array_rm_bydata cp_array.c /^int cp_array_rm_bydata(CP_ARRAY *array, void *data)$/;" f +cp_array_rm_byindex cp_array.c /^void cp_array_rm_byindex(CP_ARRAY *array, int index)$/;" f +cp_array_size cp_array.h 29;" d +cp_array_term cp_array.c /^void cp_array_term(CP_ARRAY *array)$/;" f +cp_array_travel cp_array.c /^void cp_array_travel(CP_ARRAY *array)$/;" f +cp_cstring_dump cp_string.c /^void cp_cstring_dump(char *data, int len)$/;" f +cp_del_epoll_event cp_fds.c /^void cp_del_epoll_event(CP_SOCK *sock)$/;" f +cp_dequeue cp_queue.c /^void *cp_dequeue(CP_QUEUE *queue)$/;" f +cp_enqueue cp_queue.c /^void *cp_enqueue(CP_QUEUE *queue, void *data)$/;" f +cp_fds_add_sock_registry cp_fds.c /^int cp_fds_add_sock_registry(CP_SOCK *sock)$/;" f +cp_fds_add_sock_task cp_fds.c /^int cp_fds_add_sock_task(CP_SOCK *sock)$/;" f +cp_fds_del_sock_registry cp_fds.c /^void cp_fds_del_sock_registry(CP_SOCK *sock)$/;" f +cp_fds_del_sock_task cp_fds.c /^void cp_fds_del_sock_task(CP_SOCK *sock)$/;" f +cp_fds_destroy_sock cp_fds.c /^void cp_fds_destroy_sock(CP_SOCK *sock)$/;" f +cp_fds_destroy_sock_clear cp_fds.h 99;" d +cp_fds_detect_event cp_fds.c /^int cp_fds_detect_event(CP_FDS *fds)$/;" f +cp_fds_init cp_fds.c /^CP_FDS *cp_fds_init(CP_FDS *fds, int maxevents, int timeout)$/;" f +cp_fds_list_sock_task cp_fds.c /^void cp_fds_list_sock_task(CP_FDS *fds)$/;" f +cp_fds_proc_event cp_fds.c /^void cp_fds_proc_event(CP_FDS *fds)$/;" f +cp_fds_setrlimit cp_fds.c /^int cp_fds_setrlimit(int maxfd)$/;" f +cp_fds_sock_dequeue cp_fds.c /^void *cp_fds_sock_dequeue(CP_FDS *fds)$/;" f +cp_fds_sock_enqueue cp_fds.c /^void *cp_fds_sock_enqueue(CP_SOCK *sock)$/;" f +cp_fds_sock_rmqueue cp_fds.c /^void *cp_fds_sock_rmqueue(CP_SOCK *sock)$/;" f +cp_fds_term cp_fds.c /^void cp_fds_term(CP_FDS *fds)$/;" f +cp_fds_term_clear cp_fds.h 71;" d +cp_hexdump_string cp_string.c /^const char *cp_hexdump_string(const void *data, size_t len)$/;" f +cp_install_proc_signal cp_proc.c /^void cp_install_proc_signal(void)$/;" f +cp_list_array_for_each cp_array.c /^ cp_list_array_for_each(array, i, data)$/;" f +cp_list_array_for_each cp_array.c /^ cp_list_array_for_each(array, i, entry)$/;" f +cp_list_array_for_each cp_array.h 31;" d +cp_list_array_for_each test/test_array.c /^ cp_list_array_for_each(array, i, sock)$/;" f +cp_log cp_logger.c /^void cp_log(int level, char *fmt, ...)$/;" f +cp_log_close cp_logger.c /^void cp_log_close(void)$/;" f +cp_log_default_signal_handler cp_logger.c /^static void cp_log_default_signal_handler(int sig)$/;" f file: +cp_log_dump cp_logger.c /^void cp_log_dump(int level, char *buf, int len)$/;" f +cp_log_init cp_logger.c /^cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size)$/;" f +cp_log_line cp_logger.c /^void cp_log_line(int level, char *file, int line, char *fmt, ...)$/;" f +cp_log_open cp_logger.c /^int cp_log_open(void)$/;" f +cp_log_raw cp_logger.c /^void cp_log_raw(const char *fmt, ...)$/;" f +cp_log_reopen cp_logger.c /^int cp_log_reopen(void)$/;" f +cp_log_set_time_format cp_logger.c /^void cp_log_set_time_format(char *time_format)$/;" f +cp_log_term cp_logger.c /^void cp_log_term(void)$/;" f +cp_logger cp_logger.h /^} cp_logger;$/;" t typeref:struct:_cp_logger +cp_mod_epoll_event cp_fds.c /^int cp_mod_epoll_event(CP_SOCK *sock, int event)$/;" f +cp_printout cp_logger.c /^static void cp_printout(char *level, char *fmt, va_list argp)$/;" f file: +cp_printout_line cp_logger.c /^static void cp_printout_line(char *level, char *fmt, char *file, int line, va_list argp)$/;" f file: +cp_proc_sighandler cp_proc.c /^void cp_proc_sighandler(int sig)$/;" f +cp_queue_count cp_queue.h 38;" d +cp_queue_destroy cp_queue.c /^void cp_queue_destroy(CP_QUEUE *queue)$/;" f +cp_queue_destroy_clear cp_queue.h 47;" d +cp_queue_init cp_queue.c /^CP_QUEUE *cp_queue_init(CP_QUEUE *queue, int size)$/;" f +cp_queue_is_empty cp_queue.h 37;" d +cp_queue_is_full cp_queue.h 36;" d +cp_queue_size cp_queue.h 39;" d +cp_rmqueue cp_queue.c /^void *cp_rmqueue(CP_QUEUE *queue, void *data)$/;" f +cp_sock_accept cp_sock.c /^int cp_sock_accept(CP_SOCK *serv_sock, CP_SOCK *new_sock)$/;" f +cp_sock_accept_regist cp_network.c /^int cp_sock_accept_regist(CP_SOCK *serv_sock)$/;" f +cp_sock_close cp_sock.c /^int cp_sock_close(CP_SOCK *sock)$/;" f +cp_sock_connect cp_sock.c /^int cp_sock_connect(CP_SOCK *sock, char *raddr, int rport, int lport)$/;" f +cp_sock_connect_regist cp_network.c /^CP_SOCK *cp_sock_connect_regist(CP_FDS *fds, CP_SOCK *sock, char *raddr, int rport, int lport, CP_SOCK_EVENT_CALLBACK service_route)$/;" f +cp_sock_detect_timeout cp_fds.c /^void cp_sock_detect_timeout(CP_FDS *fds)$/;" f +cp_sock_init cp_sock.c /^CP_SOCK *cp_sock_init(CP_SOCK *sock, unsigned int rsize, unsigned int ssize, int keepintvl, int keepcnt)$/;" f +cp_sock_listen cp_sock.c /^int cp_sock_listen(CP_SOCK *sock, char *laddr, int lport, int backlog)$/;" f +cp_sock_recv cp_sock.c /^int cp_sock_recv(CP_SOCK *sock)$/;" f +cp_sock_send cp_sock.c /^int cp_sock_send(CP_SOCK *sock)$/;" f +cp_sock_server_regist cp_network.c /^CP_SOCK *cp_sock_server_regist(CP_FDS *fds, char *addr, int port, int max_client, CP_SOCK_EVENT_CALLBACK service_route, void *data)$/;" f +cp_sock_set_buffer cp_sock.c /^int cp_sock_set_buffer(int sockfd, int rsize, int ssize)$/;" f +cp_sock_set_idle_timeout cp_sock.h /^static void inline cp_sock_set_idle_timeout(CP_SOCK *sock, unsigned long timeout)$/;" f +cp_sock_set_keepalive cp_sock.c /^int cp_sock_set_keepalive(int sockfd, int keepintvl, int keepcnt)$/;" f +cp_sock_set_msg_timeout cp_sock.h /^static void inline cp_sock_set_msg_timeout(CP_SOCK *sock, unsigned long timeout)$/;" f +cp_sock_set_nonblock cp_sock.c /^int cp_sock_set_nonblock(int sockfd)$/;" f +cp_sock_set_private_data cp_sock.h /^static void inline cp_sock_set_private_data(CP_SOCK *sock, void *data, PRIVT_FREE free)$/;" f +cp_sock_set_reuseaddr cp_sock.c /^int cp_sock_set_reuseaddr(int sockfd)$/;" f +cp_sock_term cp_sock.c /^void cp_sock_term(CP_SOCK *sock)$/;" f +cp_sock_term_all_client cp_fds.c /^void cp_sock_term_all_client(CP_FDS *fds)$/;" f +cp_sock_term_all_server cp_fds.c /^void cp_sock_term_all_server(CP_FDS *fds)$/;" f +cp_sock_term_all_service cp_network.c /^void cp_sock_term_all_service(CP_FDS *fds)$/;" f +cp_sock_term_all_service_clear cp_network.h 34;" d +cp_sock_term_all_task cp_fds.c /^void cp_sock_term_all_task(CP_FDS *fds)$/;" f +cp_sock_term_clear cp_sock.h 170;" d +cp_sock_term_server cp_fds.c /^void cp_sock_term_server(CP_SOCK *serv_sock)$/;" f +cp_string cp_string.h /^} cp_string;$/;" t typeref:struct:_cp_string +cp_string_append_char cp_string.c /^cp_string *cp_string_append_char(cp_string *str, char ch)$/;" f +cp_string_cat cp_string.c /^cp_string *cp_string_cat(cp_string *str, cp_string *appendum)$/;" f +cp_string_cat_bin cp_string.c /^cp_string *cp_string_cat_bin(cp_string *str, void *bin, int len)$/;" f +cp_string_clear_data cp_string.c /^void cp_string_clear_data(cp_string *str)$/;" f +cp_string_cmp cp_string.c /^int cp_string_cmp(cp_string *s1, cp_string *s2)$/;" f +cp_string_copy cp_string.c /^int cp_string_copy(cp_string *dst, cp_string *src)$/;" f +cp_string_create cp_string.c /^cp_string *cp_string_create(char *data, int len)$/;" f +cp_string_create_empty cp_string.c /^cp_string *cp_string_create_empty(int initial_size)$/;" f +cp_string_cstrcat cp_string.c /^cp_string *cp_string_cstrcat(cp_string *str, char *cstr)$/;" f +cp_string_cstrcopy cp_string.c /^int cp_string_cstrcopy(cp_string *dst, char *string, int len)$/;" f +cp_string_cstrcpy cp_string.c /^cp_string *cp_string_cstrcpy(cp_string *str, char *cstr)$/;" f +cp_string_cstrdup cp_string.c /^cp_string *cp_string_cstrdup(char *src)$/;" f +cp_string_data cp_string.c /^char *cp_string_data(cp_string *s)$/;" f +cp_string_destroy cp_string.c /^void cp_string_destroy(cp_string *str)$/;" f +cp_string_dump cp_string.c /^void cp_string_dump(cp_string *str)$/;" f +cp_string_dup cp_string.c /^cp_string *cp_string_dup(cp_string *src)$/;" f +cp_string_filter cp_string.c /^cp_string *cp_string_filter(cp_string *str, char *letters)$/;" f +cp_string_flip cp_string.c /^void cp_string_flip(cp_string *str)$/;" f +cp_string_len cp_string.c /^int cp_string_len(cp_string *s)$/;" f +cp_string_move cp_string.c /^int cp_string_move(cp_string *dst, cp_string *src)$/;" f +cp_string_read cp_string.c /^cp_string *cp_string_read(int fd, int len)$/;" f +cp_string_read_file cp_string.c /^cp_string *cp_string_read_file(char *filename)$/;" f +cp_string_tocstr cp_string.c /^char *cp_string_tocstr(cp_string *str)$/;" f +cp_string_write cp_string.c /^int cp_string_write(cp_string *str, int fd)$/;" f +cp_string_write_file cp_string.c /^int cp_string_write_file(cp_string *str, char *filename)$/;" f +cp_time_format cp_logger.c /^static char *cp_time_format = DEFAULT_TIME_FORMAT;$/;" v file: +cp_travel_queue cp_queue.c /^void cp_travel_queue(CP_QUEUE *queue)$/;" f +cp_vector_add cp_vector.c /^void *cp_vector_add(CP_VECTOR *vector, int index, void *item)$/;" f +cp_vector_count cp_vector.h 29;" d +cp_vector_del cp_vector.c /^void *cp_vector_del(CP_VECTOR *vector, int index)$/;" f +cp_vector_destroy cp_vector.c /^void cp_vector_destroy(CP_VECTOR *vector)$/;" f +cp_vector_get cp_vector.c /^void *cp_vector_get(CP_VECTOR *vector, int index)$/;" f +cp_vector_init cp_vector.c /^CP_VECTOR *cp_vector_init(int size)$/;" f +cp_vector_size cp_vector.h 30;" d +cstr cp_string.c /^ char *cstr = NULL;$/;" l +ctrl_thread_start cp_gprs.c /^void ctrl_thread_start(void *thread_arg)$/;" f +ctrl_thread_term cp_gprs.c /^void ctrl_thread_term(void *thread_arg)$/;" f +current cp_time.h /^ unsigned long current = time_now(); $/;" l +cval cp_dictionary.c /^ char cval[90] ;$/;" l +d cp_dictionary.c /^ dictionary * d ;$/;" l +d cp_string.c /^ unsigned char *d = (unsigned char *)data; $/;" l +daemonize cp_proc.c /^void daemonize(int nochdir, int noclose)$/;" f +data cp_array.c /^ void *data;$/;" l +data cp_array.h /^ void **data;$/;" m struct:_CP_ARRAY +data cp_string.h /^ char *data; \/**< internal buffer *\/$/;" m struct:_cp_string +databit cp_comport.h /^ unsigned char databit, parity, stopbit, flowctrl, is_connted;$/;" m struct:__COM_PORT +date cp_atcmd.h /^ char date[15];$/;" m struct:_GPRS_LOCATION +del_char_from_string cp_string.c /^char *del_char_from_string(char *str, char delchar)$/;" f +delay cp_atcmd.c /^ unsigned long delay = 200;$/;" l +delim cp_string.c /^ char delim[2]={*(fmt+2), '\\0'};$/;" l +dev cp_ppp.h /^ char dev[10]; \/* PPP dial up device name, such as PPP10 *\/$/;" m struct:__PPP_CTX +dev_name cp_comport.h /^ char dev_name[DEVNAME_LEN];$/;" m struct:__COM_PORT +dev_name test/comport.c /^ char *dev_name = NULL;$/;" l +devname cp_gprs.c /^ char devname[DEVNAME_LEN];$/;" l +dict cp_iniparser.c /^ dictionary * dict ;$/;" l +dictionary cp_dictionary.h /^} dictionary ;$/;" t typeref:struct:_dictionary_ +dictionary_del cp_dictionary.c /^void dictionary_del(dictionary * d)$/;" f +dictionary_dump cp_dictionary.c /^void dictionary_dump(dictionary * d, FILE * out)$/;" f +dictionary_get cp_dictionary.c /^char * dictionary_get(dictionary * d, const char * key, char * def)$/;" f +dictionary_hash cp_dictionary.c /^unsigned dictionary_hash(const char * key)$/;" f +dictionary_new cp_dictionary.c /^dictionary * dictionary_new(int size)$/;" f +dictionary_set cp_dictionary.c /^int dictionary_set(dictionary * d, const char * key, const char * val)$/;" f +dictionary_unset cp_dictionary.c /^void dictionary_unset(dictionary * d, const char * key)$/;" f +disp_mode test/comport.c /^ unsigned char disp_mode = 0x00;$/;" l +disp_settings cp_comport.c /^void disp_settings(COM_PORT * comport)$/;" f +dlink test/swe_tpdud.c /^ CP_SOCK *dlink = NULL;$/;" l +dlink test/swe_tpdud.c /^ CP_SOCK *dlink; $/;" l +dlink test/swe_tpdud.h /^ CP_SOCK *dlink; \/* listen port accept socket *\/$/;" m struct:_SWE_TPDU +do_ioctl test/comport.c /^int do_ioctl(char *dev_name, int cmd, int arg)$/;" f +done cp_proc.c /^ int done; $/;" l +dose cp_hal.c /^ int dose = 0;$/;" l +enable cp_ppp.h /^ unsigned char enable; \/* Enable PPP thread running or not, RFU *\/$/;" m struct:__PPP_CTX +encapsulation cp_gsmmux.h /^ unsigned int encapsulation;$/;" m struct:gsm_config +end cp_comport.c /^ char *ptr, *end;$/;" l +end cp_string.c /^ char *end = str;$/;" l +entry cp_array.c /^ void *entry;$/;" l +epfd cp_fds.h /^ int epfd; \/* the epoll_create() returns file description *\/ $/;" m struct:_CP_FDS +error cp_sock.h /^ CP_SOCK_EVENT_CALLBACK error;$/;" m struct:_CP_SOCK_CALLBACK +errs cp_iniparser.c /^ int errs=0;$/;" l +event cp_gprs.h /^ unsigned char event; \/* Request to set GPRS power REQ_POWER_ON, REQ_POWER_OFF or REQ_POWER_RESET *\/$/;" m struct:__MODULE_INFO +event cp_sock.h /^ struct epoll_event event; \/* epoll_wait returned event *\/$/;" m struct:_CP_SOCK typeref:struct:_CP_SOCK::epoll_event +event_cnt cp_fds.h /^ int event_cnt; \/* current socket regist in epoll *\/$/;" m struct:_CP_FDS +event_queue cp_fds.h /^ CP_QUEUE *event_queue; \/* a queue keep all these sockets get event happened *\/$/;" m struct:_CP_FDS +evts cp_fds.c /^ struct epoll_event evts[CP_MAX_EVENT_ONCE];$/;" l +exec_system_cmd cp_proc.c /^void exec_system_cmd(const char *format, ...)$/;" f +f cp_proc.c /^ FILE *f; $/;" l +f cp_string.c /^ char *i, *f, ch;$/;" l +f cp_string.c /^ char *f;$/;" l +fStatBuf cp_proc.c /^ struct stat fStatBuf; $/;" l +fStatBuf cp_proc.c /^ struct stat fStatBuf;$/;" l +fail_cnt cp_gprs.c /^ static int fail_cnt = 0;$/;" l file: +fail_cnt cp_ppp.h /^ unsigned char fail_cnt; \/* PPP failure count *\/$/;" m struct:__PPP_CTX +fd cp_comport.h /^ int fd;$/;" m struct:__COM_PORT +fd cp_hal.c /^ int fd = -1;$/;" l +fd cp_network.c /^ int fd; $/;" l +fd cp_ppp.c /^ int fd;$/;" l +fd cp_ppp.c /^ int fd = -1;$/;" l +fd cp_proc.c /^ int fd = -1; $/;" l +fd cp_proc.c /^ int retval, fd; $/;" l +fd cp_sock.c /^ int fd = -1;$/;" l +fd cp_sock.c /^ int fd = -1;$/;" l +fd cp_sock.h /^ int fd; \/* the socket file description *\/$/;" m struct:_CP_SOCK +fd cp_time.h /^ int rv, fd = -1;$/;" l +fd test/comport.c /^ int fd = -1;$/;" l +fds cp_comport.c /^ fd_set fds;$/;" l +fds cp_fds.c /^ CP_FDS *fds;$/;" l +fds cp_sock.h /^ struct _CP_FDS *fds; \/* epoll fds contex *\/$/;" m struct:_CP_SOCK typeref:struct:_CP_SOCK::_CP_FDS +fds test/swe_tpdud.c /^ CP_FDS *fds;$/;" l +fds test/test_sock_client.c /^ CP_FDS *fds;$/;" l +fds test/test_sock_server.c /^ CP_FDS *fds;$/;" l +file cp_logger.h /^ char file[FILENAME_LEN];$/;" m struct:_cp_logger +file test/test_logger.c /^ char file[FILENAME_LEN];$/;" l +filemode cp_logger.c /^ char *filemode;$/;" l +first cp_klist.h /^ struct hlist_node *first = h->first;$/;" l +first cp_klist.h /^ struct hlist_node *first;$/;" m struct:hlist_head typeref:struct:hlist_head::hlist_node +first cp_klist.h /^ struct list_head *first = list->next;$/;" l +flag cp_array.h /^ unsigned char flag;$/;" m struct:_CP_ARRAY +flag cp_fds.h /^ unsigned char flag; \/* Refer to follow definition *\/$/;" m struct:_CP_FDS +flag cp_logger.h /^ unsigned char flag; \/* This logger pointer is malloc() or passed by argument *\/$/;" m struct:_cp_logger +flag cp_sock.c /^ int flag;$/;" l +flag cp_sock.h /^ unsigned short flag; \/* Refer to the follow definition *\/$/;" m struct:_CP_SOCK +flag test/swe_tpdud.h /^ unsigned char flag;$/;" m struct:_SWE_TPDU +flowctrl cp_comport.h /^ unsigned char databit, parity, stopbit, flowctrl, is_connted;$/;" m struct:__COM_PORT +force cp_sock.c /^ int force = 0;$/;" l +found cp_iniparser.c /^ int found=0 ;$/;" l +foundsec cp_iniparser.c /^ int foundsec ;$/;" l +fp cp_logger.h /^ FILE *fp;$/;" m struct:_cp_logger +fp cp_network.c /^ FILE *fp;$/;" l +fp cp_ppp.c /^ FILE *fp;$/;" l +fp cp_ppp.c /^ FILE *fp = NULL;$/;" l +fp cp_string.c /^ FILE *fp = fopen(filename, "rb");$/;" l +fp cp_string.c /^ FILE *fp = fopen(filename, "wb");$/;" l +fp test/test_ini.c /^ FILE *fp;$/;" l +frag_size cp_comport.h /^ int frag_size;$/;" m struct:__COM_PORT +free_gsm_dataport cp_gprs.c /^void free_gsm_dataport(char *who, MODULE_INFO *module, COM_PORT **comport)$/;" f +front cp_queue.h /^ CP_QNODE *front;$/;" m struct:_CP_QUEUE +g_cp_signal cp_proc.c /^CP_PROC_SIG g_cp_signal={0};$/;" v +g_cp_signal cp_proc.h /^extern CP_PROC_SIG g_cp_signal;$/;" x +g_ucCtrlZ test/comport.c /^unsigned char g_ucCtrlZ;$/;" v +g_ucProcToken test/comport.c /^unsigned char g_ucProcToken = 0x01;$/;" v +gap cp_atcmd.c /^ unsigned long gap = 300;$/;" l +get_apn_conf cp_ppp.c /^int get_apn_conf(char *ini_name, char *ini_key, APN_ACCOUNT *apn, unsigned char type)$/;" f +get_current_time cp_time.h /^static inline void get_current_time(DATE_TIME * date)$/;" f +get_daemon_pid cp_proc.c /^pid_t get_daemon_pid(const char *pid_file)$/;" f +get_rtc_time cp_time.h /^static inline int get_rtc_time(DATE_TIME *date)$/;" f +get_sys_time cp_time.h 94;" d +gsm_config cp_gsmmux.h /^struct gsm_config$/;" s +gsmport cp_gprs.h /^ COM_PORT *gsmport; \/* The GSM hardware UART port *\/$/;" m struct:__MODULE_INFO +hal_get_gmtube_dose cp_hal.c /^int hal_get_gmtube_dose(void)$/;" f +hal_get_gprs_power cp_hal.c /^int hal_get_gprs_power(void)$/;" f +hal_get_gps_power cp_hal.c /^int hal_get_gps_power(void)$/;" f +hal_get_zigbee_status cp_hal.c /^int hal_get_zigbee_status(void)$/;" f +hal_reset_zigbee cp_hal.c /^int hal_reset_zigbee(void)$/;" f +hal_set_gmtube cp_hal.c /^int hal_set_gmtube(status)$/;" f +hal_turn_gprs_power cp_hal.c /^int hal_turn_gprs_power(int status)$/;" f +hal_turn_gps_power cp_hal.c /^int hal_turn_gps_power(int status)$/;" f +hal_turn_led_blink cp_hal.c /^int hal_turn_led_blink(int led, int mode)$/;" f +hal_turn_led_off cp_hal.c /^int hal_turn_led_off(int led)$/;" f +hal_turn_led_on cp_hal.c /^int hal_turn_led_on(int led)$/;" f +hash cp_dictionary.c /^ unsigned hash ;$/;" l +hash cp_dictionary.h /^ unsigned * hash ; \/** List of hash values for keys *\/$/;" m struct:_dictionary_ +hc cp_logger.c /^ char hc[4];$/;" l +hc cp_string.c /^ char hc[4];$/;" l +hints cp_sock.c /^ struct addrinfo hints, *rp;$/;" l +hlist_add_after cp_klist.h /^static inline void hlist_add_after(struct hlist_node *n,$/;" f +hlist_add_before cp_klist.h /^static inline void hlist_add_before(struct hlist_node *n,$/;" f +hlist_add_head cp_klist.h /^static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)$/;" f +hlist_del cp_klist.h /^static inline void hlist_del(struct hlist_node *n)$/;" f +hlist_del_init cp_klist.h /^static inline void hlist_del_init(struct hlist_node *n)$/;" f +hlist_empty cp_klist.h /^static inline int hlist_empty(const struct hlist_head *h)$/;" f +hlist_entry cp_klist.h 660;" d +hlist_for_each cp_klist.h 662;" d +hlist_for_each_entry cp_klist.h 677;" d +hlist_for_each_entry_continue cp_klist.h 689;" d +hlist_for_each_entry_from cp_klist.h 701;" d +hlist_for_each_entry_safe cp_klist.h 714;" d +hlist_for_each_safe cp_klist.h 666;" d +hlist_head cp_klist.h /^struct hlist_head {$/;" s +hlist_node cp_klist.h /^struct hlist_node {$/;" s +hlist_unhashed cp_klist.h /^static inline int hlist_unhashed(const struct hlist_node *h)$/;" f +hw cp_gprs.h /^ HW_INFO hw; \/* GPRS Hardware information *\/$/;" m struct:__MODULE_INFO +i cp_array.c /^ int i, rv = -3;$/;" l +i cp_array.c /^ int i;$/;" l +i cp_array.c /^ int i;$/;" l +i cp_atcmd.c /^ int i = 0;$/;" l +i cp_atcmd.c /^ int i = 0;$/;" l +i cp_dictionary.c /^ int i ;$/;" l +i cp_dictionary.c /^ int i ;$/;" l +i cp_fds.c /^ int i;$/;" l +i cp_fds.c /^ int i=0, nfds=0;$/;" l +i cp_fds.c /^ int i;$/;" l +i cp_gprs.c /^ int i=0;$/;" l +i cp_gprs.c /^ int i=0;$/;" l +i cp_gprs.c /^ int i;$/;" l +i cp_gprs.c /^ int i, rv = 0;$/;" l +i cp_gprs.c /^ int i;$/;" l +i cp_gprs.c /^ int i, retval = -1;$/;" l +i cp_gsmmux.h /^ unsigned int i;$/;" m struct:gsm_config +i cp_iniparser.c /^ int i ;$/;" l +i cp_iniparser.c /^ int i ;$/;" l +i cp_iniparser.c /^ int i, j ;$/;" l +i cp_proc.c /^ int i; $/;" l +i cp_ringbuf.c /^ int i;$/;" l +i cp_string.c /^ char *i, *f, ch;$/;" l +i cp_string.c /^ char *i;$/;" l +i cp_string.c /^ unsigned int i, left;$/;" l +i test/comport.c /^ int i;$/;" l +i test/test_array.c /^ int i;$/;" l +i test/test_hh.c /^ int i;$/;" l +i test/test_klist.c /^ int i;$/;" l +i test/test_queue.c /^ int i;$/;" l +i test/test_string.c /^ int i;$/;" l +i test/test_vector.c /^ int i, n;$/;" l +iCmdLen cp_atcmd.c /^ int iCmdLen = 0,$/;" l +iDay cp_time.h /^ int iDay;$/;" m struct:__DATE_TIME +iDayOfWeek cp_time.h /^ int iDayOfWeek;$/;" m struct:__DATE_TIME +iHour cp_time.h /^ int iHour;$/;" m struct:__DATE_TIME +iMinute cp_time.h /^ int iMinute;$/;" m struct:__DATE_TIME +iMonth cp_time.h /^ int iMonth;$/;" m struct:__DATE_TIME +iPtr cp_string.c /^ int *iPtr;$/;" l +iRecvLen cp_atcmd.c /^ iRecvLen = 0,$/;" l +iRecvSize cp_atcmd.c /^ iRecvSize = 0,$/;" l +iRet cp_comport.c /^ int iRet;$/;" l +iSecond cp_time.h /^ int iSecond;$/;" m struct:__DATE_TIME +iSize cp_atcmd.c /^ iSize = 0;$/;" l +iYear cp_time.h /^ int iYear;$/;" m struct:__DATE_TIME +idle_timeout cp_sock.h /^ unsigned long idle_timeout; \/* this is set to the socket idle timeout value, when timeout will disconnect *\/$/;" m struct:_CP_SOCK +idx cp_logger.c /^ int idx;$/;" l +idx cp_string.c /^ int idx;$/;" l +idx cp_string.c /^ char *idx = str;$/;" l +iemi cp_atcmd.h /^ char iemi[64]; \/* AT+CGSN check GPRS module IEMI(International Mobile station Equipment Identity) number *\/$/;" m struct:_HARDWARE_INFO +ifr cp_network.c /^ struct ifreq ifr; $/;" l +ifr cp_ppp.c /^ struct ifreq ifr;$/;" l +in cp_iniparser.c /^ FILE * in ;$/;" l +inaddr cp_sock.c /^ struct in_addr inaddr;$/;" l +index cp_sock.h /^ int index; \/* The index member position in the task array *\/$/;" m struct:_CP_SOCK +ini cp_ppp.c /^ dictionary *ini ;$/;" l +ini test/test_ini.c /^ dictionary *ini;$/;" l +iniparser_dump cp_iniparser.c /^void iniparser_dump(dictionary * d, FILE * f)$/;" f +iniparser_dump_ini cp_iniparser.c /^void iniparser_dump_ini(dictionary * d, FILE * f)$/;" f +iniparser_dumpsection_ini cp_iniparser.c /^void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f)$/;" f +iniparser_find_entry cp_iniparser.c /^int iniparser_find_entry($/;" f +iniparser_freedict cp_iniparser.c /^void iniparser_freedict(dictionary * d)$/;" f +iniparser_getboolean cp_iniparser.c /^int iniparser_getboolean(dictionary * d, const char * key, int notfound)$/;" f +iniparser_getdouble cp_iniparser.c /^double iniparser_getdouble(dictionary * d, const char * key, double notfound)$/;" f +iniparser_getint cp_iniparser.c /^int iniparser_getint(dictionary * d, const char * key, int notfound)$/;" f +iniparser_getlong cp_iniparser.c /^int iniparser_getlong(dictionary * d, const char * key, int notfound)$/;" f +iniparser_getnsec cp_iniparser.c /^int iniparser_getnsec(dictionary * d)$/;" f +iniparser_getseckeys cp_iniparser.c /^char ** iniparser_getseckeys(dictionary * d, char * s)$/;" f +iniparser_getsecname cp_iniparser.c /^char * iniparser_getsecname(dictionary * d, int n)$/;" f +iniparser_getsecnkeys cp_iniparser.c /^int iniparser_getsecnkeys(dictionary * d, char * s)$/;" f +iniparser_getstring cp_iniparser.c /^char * iniparser_getstring(dictionary * d, const char * key, char * def)$/;" f +iniparser_line cp_iniparser.c /^static line_status iniparser_line($/;" f file: +iniparser_load cp_iniparser.c /^dictionary * iniparser_load(const char * ininame)$/;" f +iniparser_set cp_iniparser.c /^int iniparser_set(dictionary * ini, const char * entry, const char * val)$/;" f +iniparser_unset cp_iniparser.c /^void iniparser_unset(dictionary * ini, const char * entry)$/;" f +init_gsm_module cp_gprs.c /^int init_gsm_module(MODULE_INFO *module)$/;" f +initiator cp_gsmmux.h /^ unsigned int initiator;$/;" m struct:gsm_config +inspect_network_status cp_ppp.c /^int inspect_network_status(PPP_CTX *ppp_ctx)$/;" f +ipc_dir cp_proc.c /^ char ipc_dir[64] = { 0 }; $/;" l +is_connted cp_comport.h /^ unsigned char databit, parity, stopbit, flowctrl, is_connted;$/;" m struct:__COM_PORT +item cp_queue.c /^ void *item;$/;" l +item cp_queue.h /^ void *item;$/;" m struct:_CP_QNODE +items cp_array.h /^ int items;$/;" m struct:_CP_ARRAY +items cp_queue.h /^ int items;$/;" m struct:_CP_QUEUE +j cp_iniparser.c /^ int j ;$/;" l +j cp_iniparser.c /^ int i, j ;$/;" l +j cp_iniparser.c /^ int j ;$/;" l +k cp_gsmmux.h /^ unsigned int k;$/;" m struct:gsm_config +kbhit cp_comport.c /^int kbhit()$/;" f +keepcnt cp_sock.h /^ int keepcnt; \/* heartbeat(keepalive) count *\/$/;" m struct:_CP_SOCK +keepintvl cp_sock.h /^ int keepintvl; \/* heartbeat(keepalive) detect interval *\/$/;" m struct:_CP_SOCK +key cp_dictionary.h /^ char ** key ; \/** List of string keys *\/$/;" m struct:_dictionary_ +key cp_iniparser.c /^ char key [ASCIILINESZ+1] ;$/;" l +keym cp_iniparser.c /^ char keym[ASCIILINESZ+1];$/;" l +keys cp_iniparser.c /^ char **keys;$/;" l +kill_pppd_process cp_ppp.c /^int kill_pppd_process(COM_PORT *comport)$/;" f +l cp_iniparser.c /^ static char l[ASCIILINESZ+1];$/;" l file: +lPtr cp_string.c /^ long *lPtr;$/;" l +laddr cp_sock.h /^ char laddr[16]; \/* local IP address*\/$/;" m struct:_CP_SOCK +last cp_iniparser.c /^ char * last ;$/;" l +last cp_iniparser.c /^ int last=0 ;$/;" l +last cp_klist.h /^ struct list_head *last = list->prev;$/;" l +last_rx_bytes cp_ppp.c /^ unsigned long long last_rx_bytes= ppp_stat->ullRx_Bytes;$/;" l +last_tx_bytes cp_ppp.c /^ unsigned long long last_tx_bytes= ppp_stat->ullTx_Bytes;$/;" l +latitude cp_atcmd.h /^ char latitude[15];$/;" m struct:_GPRS_LOCATION +lc_key cp_iniparser.c /^ char * lc_key ;$/;" l +ldisc cp_gsmmux.c /^ int ldisc = N_GSM0710;$/;" l +ldx cp_logger.c /^ int ldx = idx % CHARS_PER_LINE;$/;" l +left cp_sock.c /^ int rv, left;$/;" l +left cp_string.c /^ int left;$/;" l +left cp_string.c /^ unsigned int i, left;$/;" l +left_line cp_iniparser.c /^ static char left_line[ASCIILINESZ+1];$/;" l file: +len cp_dictionary.c /^ int len ;$/;" l +len cp_iniparser.c /^ int len, offset ;$/;" l +len cp_iniparser.c /^ int len ;$/;" l +len cp_sock.c /^ int len = sizeof(saddr); $/;" l +len cp_sock.c /^ int len = sizeof (int);$/;" l +len cp_sock.c /^ socklen_t len = sizeof(saddr);$/;" l +len cp_string.c /^ int len = str->len;$/;" l +len cp_string.h /^ int len; \/**< size used *\/$/;" m struct:_cp_string +level cp_logger.h /^ int level;$/;" m struct:_cp_logger +line cp_iniparser.c /^ char line[ASCIILINESZ+1];$/;" l +line cp_iniparser.c /^ char line [ASCIILINESZ+1] ;$/;" l +line_done cp_logger.c /^ short line_done = 1;$/;" l +line_done cp_string.c /^ short line_done = 1;$/;" l +line_status cp_iniparser.c /^} line_status ;$/;" t typeref:enum:_line_status_ file: +lineno cp_iniparser.c /^ int lineno=0 ;$/;" l +list_add cp_klist.h /^static inline void list_add(struct list_head *new, struct list_head *head)$/;" f +list_add_tail cp_klist.h /^static inline void list_add_tail(struct list_head *new, struct list_head *head)$/;" f +list_cut_position cp_klist.h /^static inline void list_cut_position(struct list_head *list,$/;" f +list_del cp_klist.h /^static inline void list_del(struct list_head *entry)$/;" f +list_del_init cp_klist.h /^static inline void list_del_init(struct list_head *entry)$/;" f +list_empty cp_klist.h /^static inline int list_empty(const struct list_head *head)$/;" f +list_empty_careful cp_klist.h /^static inline int list_empty_careful(const struct list_head *head)$/;" f +list_entry cp_klist.h 372;" d +list_first_entry cp_klist.h 383;" d +list_for_each cp_klist.h 391;" d +list_for_each_entry cp_klist.h 444;" d +list_for_each_entry_continue cp_klist.h 480;" d +list_for_each_entry_continue_reverse cp_klist.h 494;" d +list_for_each_entry_from cp_klist.h 507;" d +list_for_each_entry_reverse cp_klist.h 455;" d +list_for_each_entry_safe cp_klist.h 518;" d +list_for_each_entry_safe test/test_klist.c /^ list_for_each_entry_safe(sock, tsock, head, rlist)$/;" f +list_for_each_entry_safe_continue cp_klist.h 534;" d +list_for_each_entry_safe_from cp_klist.h 550;" d +list_for_each_entry_safe_reverse cp_klist.h 565;" d +list_for_each_prev cp_klist.h 413;" d +list_for_each_prev_safe cp_klist.h 433;" d +list_for_each_safe cp_klist.h 423;" d +list_head cp_klist.h /^struct list_head {$/;" s +list_is_last cp_klist.h /^static inline int list_is_last(const struct list_head *list,$/;" f +list_is_singular cp_klist.h /^static inline int list_is_singular(const struct list_head *head)$/;" f +list_move cp_klist.h /^static inline void list_move(struct list_head *list, struct list_head *head)$/;" f +list_move_tail cp_klist.h /^static inline void list_move_tail(struct list_head *list,$/;" f +list_prepare_entry cp_klist.h 468;" d +list_replace cp_klist.h /^static inline void list_replace(struct list_head *old,$/;" f +list_replace_init cp_klist.h /^static inline void list_replace_init(struct list_head *old,$/;" f +list_splice cp_klist.h /^static inline void list_splice(const struct list_head *list,$/;" f +list_splice_init cp_klist.h /^static inline void list_splice_init(struct list_head *list,$/;" f +list_splice_tail cp_klist.h /^static inline void list_splice_tail(struct list_head *list,$/;" f +list_splice_tail_init cp_klist.h /^static inline void list_splice_tail_init(struct list_head *list,$/;" f +lit cp_logger.c /^ char lit[CHARS_PER_LINE + 2];$/;" l +lit cp_string.c /^ char lit[CHARS_PER_LINE + 1];$/;" l +loc cp_atcmd.h /^ GPRS_LOCATION loc; \/* Location *\/$/;" m struct:_REGISTER_INFO +local cp_logger.c /^ struct tm *local;$/;" l +lock cp_gprs.c /^ static int lock = 0;$/;" l file: +lock cp_gprs.h /^ pthread_mutex_t lock; \/* Module control mutex lock *\/$/;" m struct:__MODULE_INFO +log cp_atcmd.c /^ char log[512] = {0};$/;" l +log_banner cp_logger.c /^static void log_banner(char *prefix)$/;" f file: +log_dbg cp_logger.h 102;" d +log_dbg cp_logger.h 94;" d +log_err cp_logger.h 105;" d +log_err cp_logger.h 97;" d +log_fatal cp_logger.h 106;" d +log_fatal cp_logger.h 98;" d +log_info cp_logger.h 101;" d +log_info cp_logger.h 93;" d +log_nrml cp_logger.h 103;" d +log_nrml cp_logger.h 95;" d +log_rollback_size cp_logger.c /^static unsigned long log_rollback_size = LOG_ROLLBACK_NONE;$/;" v file: +log_str cp_logger.c /^char *log_str[LOG_LEVEL_MAX + 1] = { "", "F", "E", "W", "N", "D", "I", "T", "M" };$/;" v +log_str cp_logger.h /^extern char *log_str[];$/;" x +log_trace cp_logger.h 100;" d +log_trace cp_logger.h 92;" d +log_warn cp_logger.h 104;" d +log_warn cp_logger.h 96;" d +logger cp_logger.c /^static cp_logger *logger = NULL;$/;" v file: +loglevel test/swe_tpdud.c /^ int loglevel = LOG_LEVEL_NRML;$/;" l +long_options test/comport.c /^ struct option long_options[] = {$/;" l +long_options test/swe_tpdud.c /^ struct option long_options[] = $/;" l +long_options test/test_hal.c /^ struct option long_options[] = {$/;" l +longitude cp_atcmd.h /^ char longitude[15];$/;" m struct:_GPRS_LOCATION +lost_percent cp_network.c /^ int lost_percent = 100;$/;" l +lost_percent cp_ppp.c /^ int lost_percent;$/;" l +lport cp_sock.h /^ int lport; \/* local port *\/$/;" m struct:_CP_SOCK +lport test/swe_tpdud.h /^ int lport; \/* dlink local listen port *\/$/;" m struct:_SWE_TPDU +main cp_dictionary.c /^int main(int argc, char *argv[])$/;" f +main test/comport.c /^int main(int argc, char **argv)$/;" f +main test/swe_tpdud.c /^int main (int argc, char **argv)$/;" f +main test/test_array.c /^int main (int argc, char **argv)$/;" f +main test/test_hal.c /^int main (int argc, char **argv)$/;" f +main test/test_hh.c /^int main (int argc, char **argv)$/;" f +main test/test_ini.c /^int main (int argc, char **argv)$/;" f +main test/test_klist.c /^int main (int argc, char **argv)$/;" f +main test/test_logger.c /^int main (int argc, char **argv)$/;" f +main test/test_queue.c /^int main (int argc, char **argv)$/;" f +main test/test_sock_client.c /^int main (int argc, char **argv)$/;" f +main test/test_sock_server.c /^int main (int argc, char **argv)$/;" f +main test/test_string.c /^int main (int argc, char **argv)$/;" f +main test/test_vector.c /^int main (int argc, char **argv)$/;" f +max_client cp_sock.h /^ int max_client; \/* max clients, only listen socket use it*\/$/;" m struct:_CP_SOCK +max_event cp_fds.h /^ int max_event; \/* Maximum monitor FD number *\/$/;" m struct:_CP_FDS +mcc cp_atcmd.c /^ char mcc[5];$/;" l +mcc_mnc cp_atcmd.h /^ char mcc_mnc[16];\/* Mobile Country Code, China is 460 *\/$/;" m struct:_GPRS_LOCATION +mem cp_vector.h /^ void **mem;$/;" m struct:_CP_VECTOR +mem_double cp_dictionary.c /^static void * mem_double(void * ptr, int size)$/;" f file: +micro_second_sleep cp_time.h /^static inline void micro_second_sleep(unsigned long ms)$/;" f +mnc cp_atcmd.c /^ char mnc[5];$/;" l +mode cp_proc.c /^ int mode = S_IROTH | S_IXOTH | S_IRGRP | S_IXGRP | S_IRWXU;$/;" l +mode cp_sock.h /^ int mode; \/* socket work mode: listen, accept, connect *\/$/;" m struct:_CP_SOCK +model cp_atcmd.h /^ char model[64]; \/* AT+CGMM check GPRS module model *\/$/;" m struct:_HARDWARE_INFO +module cp_gprs.c /^ MODULE_INFO *module = (MODULE_INFO *)thread_arg;$/;" l +module cp_ppp.c /^ MODULE_INFO *module = ppp_ctx->module; $/;" l +module cp_ppp.c /^ MODULE_INFO *module;$/;" l +module cp_ppp.h /^ MODULE_INFO *module;$/;" m struct:__PPP_CTX +mrev cp_atcmd.h /^ char mrev[64]; \/* AT+CGMR check GPRS module revision *\/$/;" m struct:_HARDWARE_INFO +mru cp_gsmmux.h /^ unsigned int mru;$/;" m struct:gsm_config +msg_time cp_sock.h /^ unsigned long msg_time; \/* The last time get incoming data in this socket *\/$/;" m struct:_CP_SOCK +msg_timeout cp_sock.h /^ unsigned long msg_timeout; \/* this is set to the socket recv data timeout value, *\/$/;" m struct:_CP_SOCK +mtu cp_gsmmux.h /^ unsigned int mtu;$/;" m struct:gsm_config +n cp_dictionary.h /^ int n ; \/** Number of entries in dictionary *\/$/;" m struct:_dictionary_ +n test/test_vector.c /^ int i, n;$/;" l +n2 cp_gsmmux.h /^ unsigned int n2;$/;" m struct:gsm_config +netaddr cp_ppp.h /^ char netaddr[INET_ADDRSTRLEN];$/;" m struct:__PPPD_INFO +network cp_ppp.h /^ unsigned char network; \/* PPP network status: PPP_FAIL,PPP_BAD,PPP_GOOD *\/$/;" m struct:__PPP_CTX +network_ping_test cp_network.c /^int network_ping_test(char *from, char *ping_ip)$/;" f +new_cfg cp_comport.c /^ struct termios old_cfg, new_cfg;$/;" l +new_first cp_klist.h /^ struct list_head *new_first = entry->next;$/;" l +new_sock cp_network.c /^ CP_SOCK *new_sock = NULL;$/;" l +newptr cp_dictionary.c /^ void * newptr ;$/;" l +next cp_klist.h /^ struct hlist_node *next = n->next;$/;" l +next cp_klist.h /^ struct hlist_node *next, **pprev;$/;" m struct:hlist_node typeref:struct:hlist_node::hlist_node +next cp_klist.h /^ struct list_head *next = head->next;$/;" l +next cp_klist.h /^ struct list_head *next, *prev;$/;" m struct:list_head typeref:struct:list_head::list_head +next cp_queue.h /^ struct _CP_QNODE *next;$/;" m struct:_CP_QNODE typeref:struct:_CP_QNODE::_CP_QNODE +nfds cp_fds.c /^ int i=0, nfds=0;$/;" l +nic_get_ipaddr cp_network.c /^int nic_get_ipaddr(char *nic, char *ipaddr)$/;" f +nic_get_ptpaddr cp_network.c /^int nic_get_ptpaddr(char *nic, char *ptpaddr)$/;" f +nic_network_config cp_network.c /^int nic_network_config(char *nic, char *mac, char *ip)$/;" f +nkeys cp_iniparser.c /^ int seclen, nkeys ;$/;" l +node cp_queue.c /^ CP_QNODE *node;$/;" l +node cp_queue.c /^ CP_QNODE *node, *tmp;$/;" l +node cp_queue.c /^ CP_QNODE *node;$/;" l +nonblock cp_comport.c /^void nonblock()$/;" f +now cp_logger.c /^ struct timeval now;$/;" l +now cp_time.h /^ struct timeval now; $/;" l +now cp_time.h /^ time_t now = time(NULL);$/;" l +nsec cp_iniparser.c /^ int nsec ;$/;" l +nsec cp_iniparser.c /^ int nsec ;$/;" l +offset cp_iniparser.c /^ int len, offset ;$/;" l +offsetof cp_common.h 22;" d +offsetof cp_klist.h 27;" d +offsetof cp_klist.h 28;" d +old_cfg cp_comport.c /^ struct termios old_cfg, new_cfg;$/;" l +old_flags cp_comport.c /^ int old_flags;$/;" l +olen cp_string.c /^ int olen = str->len;$/;" l +open_gsm_dataport cp_gprs.c /^int open_gsm_dataport(MODULE_INFO *module)$/;" f +opt cp_sock.c /^ int opt;$/;" l +opt cp_sock.c /^ int opt;$/;" l +opt cp_sock.c /^ int opt = 1;$/;" l +opt test/comport.c /^ int opt = 0;$/;" l +opt test/swe_tpdud.c /^ int opt;$/;" l +opt test/test_hal.c /^ int opt;$/;" l +optlen cp_sock.c /^ socklen_t optlen = sizeof(opt);$/;" l +opts cp_sock.c /^ int opts;$/;" l +p cp_string.c /^ int p = (s1->len > s2->len) ? s2->len : s1->len;$/;" l +p test/test_vector.c /^ CP_SOCK *p = NULL;$/;" l +parity cp_comport.h /^ unsigned char databit, parity, stopbit, flowctrl, is_connted;$/;" m struct:__COM_PORT +pcPtr cp_string.c /^ char *pcPtr;$/;" l +pcRecvPtr cp_atcmd.c /^ char *pcRecvPtr = NULL; $/;" l +pcStart cp_atcmd.c /^ *pcStart = NULL,$/;" l +pcTab cp_atcmd.c /^ *pcTab = NULL;$/;" l +pid cp_ppp.c /^ int pid = -1;$/;" l +pid cp_ppp.c /^ int pid = -1;$/;" l +pid cp_ppp.c /^ pid_t pid;$/;" l +pid cp_ppp.h /^ pid_t pid;$/;" m struct:__PPPD_INFO +pid cp_proc.c /^ char pid[PID_ASCII_SIZE]; $/;" l +pid cp_proc.c /^ pid_t pid = -1; $/;" l +pid cp_proc.c /^ pid_t pid; $/;" l +pid_ascii cp_proc.c /^ char pid_ascii[PID_ASCII_SIZE]; $/;" l +ping_interval cp_ppp.h /^ long ping_interval;$/;" m struct:__PPP_CTX +ping_ip cp_ppp.h /^ char ping_ip[INET_ADDRSTRLEN];$/;" m struct:__PPP_CTX +ping_time cp_ppp.h /^ unsigned long ping_time;$/;" m struct:__PPPD_INFO +power_off_module cp_gprs.c /^int power_off_module(MODULE_INFO *module)$/;" f +power_on_module cp_gprs.c /^int power_on_module(MODULE_INFO *module)$/;" f +ppp_context_init cp_ppp.c /^int ppp_context_init(PPP_CTX *ppp_ctx, MODULE_INFO *module)$/;" f +ppp_context_term cp_ppp.c /^void ppp_context_term(PPP_CTX *ppp_ctx)$/;" f +ppp_ctx cp_ppp.c /^ PPP_CTX ppp_ctx; $/;" l +ppp_stat cp_ppp.c /^ PPP_STAT *ppp_stat = &(ppp_ctx->ppp_stat);$/;" l +ppp_stat cp_ppp.h /^ PPP_STAT ppp_stat; \/* PPP network statistic *\/$/;" m struct:__PPP_CTX +ppp_thread_workbody cp_ppp.c /^void *ppp_thread_workbody(void *thread_arg)$/;" f +pppd_cmd cp_ppp.c /^ char pppd_cmd[PPPD_CMD_LEN];$/;" l +pppd_info cp_ppp.c /^ PPPD_INFO *pppd_info = &(ppp_ctx->pppd_info);$/;" l +pppd_info cp_ppp.h /^ PPPD_INFO pppd_info; \/* pppd process information *\/$/;" m struct:__PPP_CTX +pprev cp_klist.h /^ struct hlist_node **pprev = n->pprev;$/;" l +pprev cp_klist.h /^ struct hlist_node *next, **pprev;$/;" m struct:hlist_node typeref:struct:hlist_node:: +prefetch cp_klist.h /^static inline void prefetch(const void *x) {;}$/;" f +prev cp_klist.h /^ struct list_head *next, *prev;$/;" m struct:list_head typeref:struct:list_head:: +print_char cp_logger.c /^static char *print_char =$/;" v file: +print_char cp_string.c /^static char *print_char = $/;" v file: +print_usage test/swe_tpdud.c /^void print_usage(char *progname)$/;" f +print_usage test/test_hal.c /^void print_usage(char *progname)$/;" f +print_version test/comport.c /^void print_version(char *name)$/;" f +privt cp_sock.h /^ void *privt; \/* socket private data *\/$/;" m struct:_CP_SOCK +privt_free cp_sock.h /^ PRIVT_FREE privt_free; \/* private data free function if it's malloc *\/$/;" m struct:_CP_SOCK +prn cp_logger.c /^ char prn[LINELEN];$/;" l +prn cp_string.c /^ char prn[LINELEN];$/;" l +proc_uplink_event test/swe_tpdud.c /^int proc_uplink_event(CP_SOCK *ulink)$/;" f +progname test/comport.c /^ char *progname = NULL;$/;" l +progname test/test_hal.c /^ char *progname=NULL;$/;" l +ptpaddr cp_ppp.h /^ char ptpaddr[INET_ADDRSTRLEN];$/;" m struct:__PPPD_INFO +ptr cp_atcmd.c /^ char *ptr = NULL;$/;" l +ptr cp_atcmd.c /^ char *ptr = NULL;$/;" l +ptr cp_common.h /^ void *ptr;$/;" l +ptr cp_comport.c /^ char *ptr, *end;$/;" l +ptr cp_iniparser.c /^ char *ptr = NULL; $/;" l +ptr cp_ppp.c /^ char *ptr;$/;" l +ptr test/comport.c /^ char *ptr = NULL;$/;" l +pwd cp_ppp.h /^ char pwd[PWD_LEN];$/;" m struct:__APN_ACCOUNT +pwr_status cp_gprs.h /^ unsigned char pwr_status; \/* Current module power status *\/$/;" m struct:__MODULE_INFO +queue test/test_queue.c /^ CP_QUEUE *queue = NULL;$/;" l +raddr cp_sock.h /^ char raddr[16]; \/* remote IP address *\/$/;" m struct:_CP_SOCK +raddr test/swe_tpdud.h /^ char raddr[32]; \/* uplink remote listen port *\/$/;" m struct:_SWE_TPDU +rb_clear cp_ringbuf.c /^void rb_clear (struct ring_buffer *rb) {$/;" f +rb_data_size cp_ringbuf.c /^int rb_data_size (struct ring_buffer *rb) {$/;" f +rb_free_size cp_ringbuf.c /^int rb_free_size (struct ring_buffer *rb){$/;" f +rb_init cp_ringbuf.c /^void rb_init (struct ring_buffer *ring, u_char* buff, int size) {$/;" f +rb_peek cp_ringbuf.c /^u_char rb_peek(struct ring_buffer* rb, int index) {$/;" f +rb_read cp_ringbuf.c /^int rb_read (struct ring_buffer *rb, u_char * buf, int max) {$/;" f +rb_write cp_ringbuf.c /^rb_write (struct ring_buffer *rb, u_char * buf, int len)$/;" f +rbuf cp_sock.c /^ cp_string *rbuf;$/;" l +rbuf cp_sock.h /^ cp_string *rbuf; \/* receive buffer *\/$/;" m struct:_CP_SOCK +rbuf test/test_hh.c /^ unsigned char rbuf[10];$/;" l +rc cp_logger.c /^ int rc = 0;$/;" l +rc cp_logger.c /^ int rc;$/;" l +rc cp_string.c /^ int rc = $/;" l +rc cp_string.c /^ int rc = memcmp(s1->data, s2->data, p);$/;" l +rc cp_string.c /^ int rc;$/;" l +rcv test/test_string.c /^ cp_string *rcv;$/;" l +rd_pointer cp_ringbuf.h /^ int rd_pointer;$/;" m struct:ring_buffer +read cp_sock.h /^ CP_SOCK_EVENT_CALLBACK read;$/;" m struct:_CP_SOCK_CALLBACK +read_len cp_string.c /^ int read_len;$/;" l +ready cp_gprs.h /^ unsigned char ready; \/* SIM card regist and can work or not *\/$/;" m struct:__MODULE_INFO +rear cp_queue.h /^ CP_QNODE *rear;$/;" m struct:_CP_QUEUE +record_daemon_pid cp_proc.c /^int record_daemon_pid(const char *pid_file)$/;" f +recv_buf cp_atcmd.c /^ char recv_buf[ATCMD_REPLY_LEN];$/;" l +recv_buf cp_atcmd.c /^ char recv_buf[ATCMD_REPLY_LEN]; $/;" l +recv_buf cp_atcmd.c /^ char recv_buf[ATCMD_REPLY_LEN];$/;" l +recv_size test/comport.c /^ int recv_size = 0;$/;" l +reg cp_gprs.c /^ REGISTER_INFO *reg = &(module->reg); \/* SIM card Register information *\/ $/;" l +reg cp_gprs.h /^ REGISTER_INFO reg; \/* SIM card register network information *\/$/;" m struct:__MODULE_INFO +res cp_fds.c /^ struct rlimit res;$/;" l +res cp_sock.c /^ struct addrinfo *res = NULL;$/;" l +res cp_string.c /^ cp_string *res = NULL;$/;" l +res cp_string.c /^ cp_string *res;$/;" l +result cp_string.c /^ char *result;$/;" l +ret cp_iniparser.c /^ int ret ;$/;" l +retVal cp_proc.c /^ int retVal = -1; $/;" l +retval cp_atcmd.c /^ int retval = -1; $/;" l +retval cp_atcmd.c /^ int retval;$/;" l +retval cp_atcmd.c /^ int retval; $/;" l +retval cp_atcmd.c /^ int retval;$/;" l +retval cp_atcmd.c /^ int retval = 0; $/;" l +retval cp_atcmd.c /^ int retval, stat = -1;$/;" l +retval cp_atcmd.c /^ int retval;$/;" l +retval cp_atcmd.c /^ int retval=0; $/;" l +retval cp_atcmd.c /^ int retval;$/;" l +retval cp_atcmd.c /^ int retval;$/;" l +retval cp_comport.c /^ int retval = -1;$/;" l +retval cp_comport.c /^ int retval = 0; \/\/ Function return value$/;" l +retval cp_comport.c /^ int retval = 0;$/;" l +retval cp_gprs.c /^ int retval = 0;$/;" l +retval cp_gprs.c /^ int i, retval = -1;$/;" l +retval cp_ppp.c /^ int retval;$/;" l +retval cp_ppp.c /^ int retval = -1;$/;" l +retval cp_proc.c /^ int retval = 0;$/;" l +retval cp_proc.c /^ int retval, fd; $/;" l +retval test/comport.c /^ int retval = -1;$/;" l +retval test/comport.c /^ int retval = 0;$/;" l +ring_buffer cp_ringbuf.h /^struct ring_buffer {$/;" s +rlist cp_sock.h /^ struct list_head rlist; \/* The list_head member position just for the registry list *\/$/;" m struct:_CP_SOCK typeref:struct:_CP_SOCK::list_head +rp cp_sock.c /^ struct addrinfo hints, *rp;$/;" l +rport cp_sock.h /^ int rport; \/* remote port *\/$/;" m struct:_CP_SOCK +rport test/swe_tpdud.h /^ int rport; \/* uplink remote IP address *\/$/;" m struct:_SWE_TPDU +rsize cp_sock.h /^ int rsize; \/* ioctl() set socket recv buffer size *\/$/;" m struct:_CP_SOCK +rtc_tm cp_time.h /^ struct rtc_time rtc_tm; $/;" l +rv cp_array.c /^ int i, rv = -3;$/;" l +rv cp_fds.c /^ int rv = 0;$/;" l +rv cp_fds.c /^ int rv;$/;" l +rv cp_fds.c /^ int rv;$/;" l +rv cp_fds.c /^ int rv = 0;$/;" l +rv cp_gprs.c /^ int rv;$/;" l +rv cp_gprs.c /^ int i, rv = 0;$/;" l +rv cp_gprs.c /^ int rv = 0;$/;" l +rv cp_gprs.c /^ int rv;$/;" l +rv cp_gprs.c /^ int rv = 0;$/;" l +rv cp_hal.c /^ int rv = 0;$/;" l +rv cp_network.c /^ int rv = 0;$/;" l +rv cp_network.c /^ int rv = 0;$/;" l +rv cp_sock.c /^ int rv = 0;$/;" l +rv cp_sock.c /^ int rv;$/;" l +rv cp_sock.c /^ int rv = 0;$/;" l +rv cp_sock.c /^ int rv, left;$/;" l +rv cp_sock.c /^ int rv = 0;$/;" l +rv cp_time.h /^ int rv, fd = -1;$/;" l +rv test/swe_tpdud.c /^ int rv = 0;$/;" l +rv test/swe_tpdud.c /^ int rv;$/;" l +rv test/test_hal.c /^ int rv = 0;$/;" l +rv test/test_sock_client.c /^ int rv;$/;" l +rv test/test_sock_server.c /^ int rv = 0;$/;" l +rx_packets cp_network.c /^ unsigned long rx_packets = 0;$/;" l +saddr cp_sock.c /^ struct sockaddr_in *saddr = (struct sockaddr_in *)rp->ai_addr;$/;" l +saddr cp_sock.c /^ struct sockaddr_in saddr;$/;" l +saddr cp_sock.c /^ struct sockaddr_in saddr;$/;" l +saddr cp_sock.h /^ struct sockaddr saddr; \/* sockaddr for connect *\/$/;" m struct:_CP_SOCK typeref:struct:_CP_SOCK::sockaddr +save cp_vector.c /^ void *save;$/;" l +sbuf cp_sock.h /^ cp_string *sbuf; \/* send buffer *\/$/;" m struct:_CP_SOCK +sbuf test/test_hh.c /^ unsigned char sbuf[10]={0x02, 0x48, 0x32, 0x03, 0x20, 0x00, 0x00, 0xF6, 0xBE, 0x03};$/;" l +seclen cp_iniparser.c /^ int seclen ;$/;" l +seclen cp_iniparser.c /^ int seclen, nkeys ;$/;" l +secname cp_iniparser.c /^ char * secname ;$/;" l +section cp_iniparser.c /^ char section [ASCIILINESZ+1] ;$/;" l +select_apn cp_ppp.c /^int select_apn(PPP_CTX *ppp_ctx, char *key)$/;" f +send cp_comport.c /^ int send = 0;$/;" l +send_atcmd cp_atcmd.c /^int send_atcmd(COM_PORT *comport, char *atCmd, char *expect, char *error,$/;" f +send_atcmd_check_ok cp_atcmd.c /^int send_atcmd_check_ok(COM_PORT *comport, char *atcmd, unsigned long timeout)$/;" f +send_atcmd_check_request cp_atcmd.c /^int send_atcmd_check_request(COM_PORT *comport, char *atcmd, unsigned long timeout, char *buf, int buf_len)$/;" f +send_atcmd_check_value cp_atcmd.c /^int send_atcmd_check_value(COM_PORT *comport, char *atcmd, unsigned long timeout, char *buf, int buf_len)$/;" f +serv_sock cp_fds.c /^ CP_SOCK *sock, *tsock, *serv_sock;$/;" l +serv_sock cp_sock.h /^ struct _CP_SOCK *serv_sock; \/* Accept socket used to point to the server socket *\/$/;" m struct:_CP_SOCK typeref:struct:_CP_SOCK::_CP_SOCK +serv_tpdu test/swe_tpdud.c /^ SWE_TPDU *serv_tpdu;$/;" l +server_list cp_fds.h /^ struct list_head server_list; \/* a list keep all the listen sockets *\/ $/;" m struct:_CP_FDS typeref:struct:_CP_FDS::list_head +service cp_sock.c /^ char service[20];$/;" l +service_route test/test_sock_client.c /^int service_route(CP_SOCK *sock)$/;" f +service_route test/test_sock_server.c /^int service_route(CP_SOCK *sock)$/;" f +set_daemon_running cp_proc.c /^int set_daemon_running(const char *pid_file)$/;" f +set_module_event cp_gprs.c /^void set_module_event(MODULE_INFO *module, int request)$/;" f +set_module_event_power cp_gprs.c /^int set_module_event_power(MODULE_INFO *module)$/;" f +set_ppp_disconnect cp_ppp.c /^void set_ppp_disconnect(PPP_CTX *ppp_ctx)$/;" f +set_settings cp_comport.c /^void set_settings(COM_PORT * comport, const char *settings)$/;" f +settings test/comport.c /^ char *settings = "8N1N";$/;" l +sigact cp_proc.c /^ struct sigaction sigact, sigign;$/;" l +sigact test/comport.c /^ struct sigaction sigact;$/;" l +sigign cp_proc.c /^ struct sigaction sigact, sigign;$/;" l +signal cp_atcmd.c /^ int signal = -1;$/;" l +signal cp_atcmd.h /^ int signal; \/* GPRS signal *\/ $/;" m struct:_REGISTER_INFO +signal cp_proc.h /^ int signal;$/;" m struct:__CP_PROC_SIG +signal_handler test/comport.c /^void signal_handler(int i_sig)$/;" f +sin cp_network.c /^ struct sockaddr_in *sin; $/;" l +sin cp_ppp.c /^ struct sockaddr_in *sin; $/;" l +size cp_array.h /^ int size;$/;" m struct:_CP_ARRAY +size cp_dictionary.h /^ int size ; \/** Storage size *\/$/;" m struct:_dictionary_ +size cp_logger.h /^ int size;$/;" m struct:_cp_logger +size cp_queue.h /^ int size;$/;" m struct:_CP_QUEUE +size cp_ringbuf.h /^ int size;$/;" m struct:ring_buffer +size cp_string.c /^ int size;$/;" l +size cp_string.h /^ int size; \/**< size allocated *\/$/;" m struct:_cp_string +size cp_vector.h /^ int size;$/;" m struct:_CP_VECTOR +snd test/test_string.c /^ cp_string *snd;$/;" l +so_linger cp_sock.c /^ struct linger so_linger;$/;" l +sock cp_fds.c /^ CP_SOCK *sock;$/;" l +sock cp_fds.c /^ CP_SOCK *sock;$/;" l +sock cp_fds.c /^ CP_SOCK *sock = NULL, *tsock;$/;" l +sock cp_fds.c /^ CP_SOCK *sock, *tsock, *serv_sock;$/;" l +sock cp_fds.c /^ CP_SOCK *sock, *tsock;$/;" l +sock cp_fds.c /^ CP_SOCK *sock;$/;" l +sock cp_fds.c /^ CP_SOCK *sock = NULL;$/;" l +sock cp_network.c /^ CP_SOCK *sock = NULL;$/;" l +sock test/swe_tpdud.c /^ CP_SOCK *sock;$/;" l +sock test/test_array.c /^ CP_SOCK *sock = NULL;$/;" l +sock test/test_klist.c /^ CP_SOCK *sock, *tsock;$/;" l +sock test/test_queue.c /^ CP_SOCK *sock = NULL;$/;" l +sock test/test_sock_client.c /^ CP_SOCK *sock = NULL;$/;" l +sock test/test_sock_server.c /^ CP_SOCK *sock;$/;" l +sock_list test/test_klist.c /^ struct list_head sock_list;$/;" l +sock_poll cp_sock.c /^ struct pollfd sock_poll;$/;" l +split_string_to_value cp_string.c /^int split_string_to_value(char *str, char *fmt, ...)$/;" f +ssize cp_sock.h /^ int ssize; \/* ioctl() set socket send buffer size *\/$/;" m struct:_CP_SOCK +stExcpFds cp_comport.c /^ fd_set stReadFds, stExcpFds;$/;" l +stReadFds cp_comport.c /^ fd_set stReadFds, stExcpFds;$/;" l +stTime cp_comport.c /^ struct timeval stTime;$/;" l +sta cp_iniparser.c /^ line_status sta ;$/;" l +start cp_atcmd.c /^ char *start;$/;" l +start_ppp_connect cp_ppp.c /^int start_ppp_connect(PPP_CTX *ppp_ctx)$/;" f +start_ppp_dial_cmd cp_ppp.c /^int start_ppp_dial_cmd(COM_PORT *comport, APN_ACCOUNT *apn, char *ppp_dev)$/;" f +start_thread_ppp cp_ppp.c /^int start_thread_ppp(MODULE_INFO *module)$/;" f +start_time cp_gprs.c /^ static unsigned long start_time ;$/;" l file: +start_time cp_ppp.h /^ unsigned long start_time;$/;" m struct:__PPPD_INFO +stat cp_atcmd.c /^ int retval, stat = -1;$/;" l +status cp_atcmd.c /^ int status;$/;" l +status cp_hal.c /^ int status;$/;" l +status cp_ppp.h /^ unsigned char status; \/* Current PPP connection status *\/$/;" m struct:__PPP_CTX +status cp_sock.h /^ unsigned char status; \/* current socket status *\/$/;" m struct:_CP_SOCK +stop cp_proc.h /^ unsigned stop; \/* 0: Not term 1: Stop *\/$/;" m struct:__CP_PROC_SIG +stop_ppp_connect cp_ppp.c /^int stop_ppp_connect(PPP_CTX *ppp_ctx)$/;" f +stop_tpdu_service test/swe_tpdud.c /^static void stop_tpdu_service(SWE_TPDU *tpdu)$/;" f file: +stopbit cp_comport.h /^ unsigned char databit, parity, stopbit, flowctrl, is_connted;$/;" m struct:__COM_PORT +str cp_iniparser.c /^ char * str ;$/;" l +str cp_ppp.c /^ char *str;$/;" l +str cp_string.c /^ cp_string *str = t_malloc(sizeof(cp_string));$/;" l +str cp_string.c /^ cp_string *str;$/;" l +string cp_string.c /^ static char string[1024]; $/;" l file: +strlwc cp_iniparser.c /^static char * strlwc(const char * s)$/;" f file: +strstrip cp_iniparser.c /^static char * strstrip(const char * s)$/;" f file: +sval cp_iniparser.c /^ char * sval ;$/;" l +t cp_dictionary.c /^ char * t ;$/;" l +t1 cp_gsmmux.h /^ unsigned int t1;$/;" m struct:gsm_config +t2 cp_gsmmux.h /^ unsigned int t2;$/;" m struct:gsm_config +t3 cp_gsmmux.h /^ unsigned int t3;$/;" m struct:gsm_config +t_free cp_common.h 60;" d +t_free cp_common.h 63;" d +t_malloc cp_common.h 61;" d +t_malloc cp_common.h 64;" d +task_array cp_fds.h /^ CP_ARRAY *task_array; \/* an array keep all these pending\/or other special task socket *\/ $/;" m struct:_CP_FDS +test_buzzer test/test_hal.c /^ int test_buzzer = 0;$/;" l +test_buzzer_hal_api test/test_hal.c /^void test_buzzer_hal_api(void)$/;" f +test_gprs test/test_hal.c /^ int test_gprs = 0;$/;" l +test_gprs_hal_api test/test_hal.c /^void test_gprs_hal_api(void)$/;" f +test_led test/test_hal.c /^ int test_led = 0;$/;" l +test_led_hal_api test/test_hal.c /^void test_led_hal_api(void)$/;" f +thread_attr cp_proc.c /^ pthread_attr_t thread_attr; $/;" l +thread_id cp_ppp.h /^ pthread_t thread_id; \/* PPP Thread ID, RFU *\/$/;" m struct:__PPP_CTX +thread_start cp_proc.c /^int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg)$/;" f +tid cp_ppp.c /^ pthread_t tid;$/;" l +time cp_atcmd.h /^ char time[15];$/;" m struct:_GPRS_LOCATION +time_elapsed cp_time.h /^static inline unsigned long time_elapsed(unsigned long start)$/;" f +time_now cp_time.h /^static inline unsigned long time_now()$/;" f +timeout cp_fds.h /^ int timeout; \/* epoll_wait timeout value *\/$/;" m struct:_CP_FDS +timestr cp_logger.c /^ char timestr[256];$/;" l +tmp cp_atcmd.c /^ char tmp[ATCMD_REPLY_LEN];$/;" l +tmp cp_comport.c /^ long tmp;$/;" l +tmp cp_iniparser.c /^ char tmp [ASCIILINESZ+1] ;$/;" l +tmp cp_ppp.c /^ char tmp[64];$/;" l +tmp cp_ppp.c /^ char tmp[64];$/;" l +tmp cp_queue.c /^ CP_QNODE *node, *tmp;$/;" l +tmp test/test_array.c /^ CP_SOCK *tmp = NULL;$/;" l +tmp test/test_queue.c /^ CP_SOCK *tmp = NULL;$/;" l +tnow cp_time.h /^ struct tm *tnow = localtime(&now); $/;" l +total cp_ringbuf.c /^ int total;$/;" l +total cp_string.c /^ int total = 0;$/;" l +tpdu test/swe_tpdud.c /^ SWE_TPDU *tpdu;$/;" l +tpdu test/swe_tpdud.c /^ SWE_TPDU tpdu = {.lport=TPDUD_PORT, .raddr=HOSTSIM_IP, .rport=HOSTSIM_PORT};$/;" l +tpdu test/swe_tpdud.c /^ SWE_TPDU *tpdu = NULL; $/;" l +tpdu_connect_uplink test/swe_tpdud.c /^int tpdu_connect_uplink(SWE_TPDU *tpdu)$/;" f +tpdu_service_route test/swe_tpdud.c /^int tpdu_service_route(CP_SOCK *dlink)$/;" f +travel_list test/test_klist.c /^void travel_list(struct list_head *head)$/;" f +tsock cp_fds.c /^ CP_SOCK *sock = NULL, *tsock;$/;" l +tsock cp_fds.c /^ CP_SOCK *sock, *tsock, *serv_sock;$/;" l +tsock cp_fds.c /^ CP_SOCK *sock, *tsock;$/;" l +tsock test/test_klist.c /^ CP_SOCK *sock, *tsock;$/;" l +ttystate cp_comport.c /^ struct termios ttystate;$/;" l +tv cp_comport.c /^ struct timeval tv;$/;" l +tx_packets cp_network.c /^ unsigned long tx_packets = 0;$/;" l +type cp_atcmd.h /^ int type; \/* SIM card register type: REG_HOMEWORK,REG_SEARCHING... *\/$/;" m struct:_REGISTER_INFO +type cp_ppp.c /^ unsigned char type = APN_2G;$/;" l +uid cp_ppp.h /^ char uid[UID_LEN]; $/;" m struct:__APN_ACCOUNT +ulCollisions cp_ppp.h /^ unsigned long ulCollisions;$/;" m struct:__PPP_STAT +ulRx_CRC_Errors cp_ppp.h /^ unsigned long ulRx_CRC_Errors; \/\/ recved pkt with crc error$/;" m struct:__PPP_STAT +ulRx_Compressed cp_ppp.h /^ unsigned long ulRx_Compressed;$/;" m struct:__PPP_STAT +ulRx_Dropped cp_ppp.h /^ unsigned long ulRx_Dropped; \/\/ no space in linux buffers$/;" m struct:__PPP_STAT +ulRx_Errors cp_ppp.h /^ unsigned long ulRx_Errors; \/\/ bad packets received $/;" m struct:__PPP_STAT +ulRx_FIFO_Errors cp_ppp.h /^ unsigned long ulRx_FIFO_Errors; \/\/ recv'r fifo overrun $/;" m struct:__PPP_STAT +ulRx_Frame_Errors cp_ppp.h /^ unsigned long ulRx_Frame_Errors; \/\/ recv'd frame alignment error$/;" m struct:__PPP_STAT +ulRx_Length_Errors cp_ppp.h /^ unsigned long ulRx_Length_Errors;$/;" m struct:__PPP_STAT +ulRx_Missed_Errors cp_ppp.h /^ unsigned long ulRx_Missed_Errors; \/\/ receiver missed packet $/;" m struct:__PPP_STAT +ulRx_Multicast cp_ppp.h /^ unsigned long ulRx_Multicast; \/\/ multicast packets received $/;" m struct:__PPP_STAT +ulRx_Over_Errors cp_ppp.h /^ unsigned long ulRx_Over_Errors; \/\/ receiver ring buff overflow$/;" m struct:__PPP_STAT +ulStartTime cp_atcmd.c /^ unsigned long ulStartTime; $/;" l +ulTmp cp_time.h /^ unsigned long ulTmp;$/;" l +ulTx_Aborted_Errors cp_ppp.h /^ unsigned long ulTx_Aborted_Errors;$/;" m struct:__PPP_STAT +ulTx_Carrier_Errors cp_ppp.h /^ unsigned long ulTx_Carrier_Errors;$/;" m struct:__PPP_STAT +ulTx_Compressed cp_ppp.h /^ unsigned long ulTx_Compressed;$/;" m struct:__PPP_STAT +ulTx_Dropped cp_ppp.h /^ unsigned long ulTx_Dropped; \/\/ no space available in linux$/;" m struct:__PPP_STAT +ulTx_Errors cp_ppp.h /^ unsigned long ulTx_Errors; \/\/ packet transmit problems$/;" m struct:__PPP_STAT +ulTx_FIFO_Errors cp_ppp.h /^ unsigned long ulTx_FIFO_Errors;$/;" m struct:__PPP_STAT +ulTx_Heartbeat_Errors cp_ppp.h /^ unsigned long ulTx_Heartbeat_Errors;$/;" m struct:__PPP_STAT +ulTx_Window_Errors cp_ppp.h /^ unsigned long ulTx_Window_Errors;$/;" m struct:__PPP_STAT +ulink test/swe_tpdud.c /^ CP_SOCK *ulink;$/;" l +ulink test/swe_tpdud.h /^ CP_SOCK *ulink; \/* connect to hostsim socket *\/$/;" m struct:_SWE_TPDU +ullRx_Bytes cp_ppp.h /^ unsigned long long ullRx_Bytes; \/\/ total bytes received $/;" m struct:__PPP_STAT +ullRx_Packets cp_ppp.h /^ unsigned long long ullRx_Packets; \/\/ total packets received $/;" m struct:__PPP_STAT +ullTx_Bytes cp_ppp.h /^ unsigned long long ullTx_Bytes; \/\/ total bytes transmitted $/;" m struct:__PPP_STAT +ullTx_Packets cp_ppp.h /^ unsigned long long ullTx_Packets; \/\/ total packets transmitted$/;" m struct:__PPP_STAT +unused cp_gsmmux.h /^ unsigned int unused[8]; \/* Padding for expansion without breaking stuff *\/$/;" m struct:gsm_config +usage test/comport.c /^void usage(char *name)$/;" f +used cp_comport.h /^ unsigned char used; \/* This comport used or not now *\/$/;" m struct:__COM_PORT +used cp_vector.h /^ int used;$/;" m struct:_CP_VECTOR +users cp_gprs.h /^ int users; \/* How many users use the module now *\/$/;" m struct:__MODULE_INFO +v test/test_vector.c /^ CP_VECTOR *v = cp_vector_init(1024);$/;" l +val cp_dictionary.c /^ char * val ;$/;" l +val cp_dictionary.h /^ char ** val ; \/** List of string values *\/$/;" m struct:_dictionary_ +val cp_iniparser.c /^ char val [ASCIILINESZ+1] ;$/;" l +vector cp_vector.c /^ CP_VECTOR *vector = NULL;$/;" l +who cp_gprs.c /^ char *who = "atcmd_check_ready()";$/;" l +who cp_gprs.c /^ char *who = "atcmd_inspect_status()";$/;" l +wr_pointer cp_ringbuf.h /^ int wr_pointer;$/;" m struct:ring_buffer +write cp_sock.h /^ CP_SOCK_EVENT_CALLBACK write;$/;" m struct:_CP_SOCK_CALLBACK +xstrdup cp_dictionary.c /^static char * xstrdup(const char * s)$/;" f file: diff --git a/program/cp_library/test/comport.c b/program/cp_library/test/comport.c new file mode 100644 index 0000000..606f203 --- /dev/null +++ b/program/cp_library/test/comport.c @@ -0,0 +1,238 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: comport.c + * Description: This file used to do ioctl() on common device or communicate + * with serial port/TTY device. + * + * Version: 1.0.0(10/18/2011~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/18/2011 10:08:05 AM" + * + ********************************************************************************/ +#include <getopt.h> +#include <libgen.h> +#include <sys/ioctl.h> + +#include "cp_comport.h" +#include "cp_common.h" +#include "version.h" + +unsigned char g_ucProcToken = 0x01; +unsigned char g_ucCtrlZ; + +void print_version(char *name); +void usage(char *name); +int do_ioctl(char *dev_name, int cmd, int arg); +void signal_handler(int i_sig); + +int main(int argc, char **argv) +{ + int opt = 0; + int retval = 0; + int recv_size = 0; + int i; + char *dev_name = NULL; + int baudrate = 115200; + char *settings = "8N1N"; + char buf[512]; + unsigned char disp_mode = 0x00; + + struct sigaction sigact; + + struct option long_options[] = { + {"device", required_argument, NULL, 'd'}, + {"baudrate", required_argument, NULL, 'b'}, + {"settings", required_argument, NULL, 's'}, + {"ioctl", required_argument, NULL, 'i'}, + {"hex", no_argument, NULL, 'x'}, + {"version", no_argument, NULL, 'v'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} + }; + + while ((opt = getopt_long(argc, argv, "d:b:s:ivh", long_options, NULL)) != -1) + { + switch (opt) + { + case 'd': + dev_name = optarg; + break; + case 'b': + baudrate = atoi(optarg); + break; + case 's': /* Default settings as 8N1N */ + settings = optarg; + break; + case 'i': + if (5 != argc) + { + usage(argv[0]); + } + else + { + do_ioctl(argv[2], atoi(argv[3]), atoi(argv[4])); + } + return 0; + case 'x': /* Display receive data as Hex mode */ + disp_mode = 0x01; + break; + case 'v': /* version */ + print_version(argv[0]); + return 0; + case 'h': /* help */ + usage(argv[0]); + return 0; + default: + break; + } /* end of "switch(opt)" */ + } + + if (argc < 2) + { + usage(argv[0]); + return 0; + } + + COM_PORT *comport = NULL; + if (NULL == (comport = comport_init(dev_name, baudrate, settings))) + { + printf("Comport initialize failure.\n"); + return -1; + } + + if ( (retval=comport_open(comport)) < 0) + { + printf("Failed to open %s with baudrate %d, %s. RetCode [%d]\n", dev_name, baudrate, + settings, retval); + return -1; + } + + nonblock(); + + /* Process level signal handler */ + sigemptyset(&sigact.sa_mask); + sigact.sa_flags = 0; + sigact.sa_handler = signal_handler; + + sigaction(SIGTERM, &sigact, NULL); /* catch terminate signal */ + sigaction(SIGINT, &sigact, NULL); /* catch interrupt signal */ + sigaction(SIGSEGV, &sigact, NULL); /* catch segmentation faults */ + sigaction(SIGTSTP, &sigact, NULL); /* catch ctrl+Z */ + sigaction(SIGSTOP, &sigact, NULL); /* catch ctrl+Z */ + + while (0x01 == g_ucProcToken) + { + recv_size = comport_recv(comport, buf, sizeof(buf) - 1, 10); + if (recv_size > 0) + { + for (i = 0; i < recv_size; i++) + { + if (0 == disp_mode) + printf("%c", buf[i]); + else + printf("%02X ", buf[i]); + } + fflush(stdout); + } + if (0 != kbhit()) + { + retval = fgetc(stdin); + + if (0x0A == retval) + { + buf[0] = 0x0D; /* 13 == 0x0D */ + } + else + { + buf[0] = retval; + } + + comport_send(comport, buf, 1); + } + else if (0x00 != g_ucCtrlZ) + { + g_ucCtrlZ = 0x00; + buf[0] = 0x1A; + comport_send(comport, buf, 1); + } + } + + comport_term(comport); + return 0; +} /* ----- End of main() ----- */ + +void print_version(char *name) +{ + char *progname = NULL; + char *ptr = NULL; + + ptr = strdup(name); + progname = basename(ptr); + + printf("%s version: %d.%d.%d Build %04d on %s\n", progname, MAJOR, MINOR, REVER, SVNVER, DATE); + printf("Copyright (C) 2010 guowenxue <guowenxue@gmail.com>\n"); + + t_free(ptr); + return; +} + +void usage(char *name) +{ + char *progname = NULL; + char *ptr = NULL; + + ptr = strdup(name); + progname = basename(ptr); + printf("Usage1: comport -d <device> [-b <baudrate>][-s <settings>] [-x]\n"); + printf("Usage2: comport [-i <driver port> <cmd> <arg>][--help][--version]\n"); + printf(" -d[device ] device name\n"); + printf(" -b[baudrate] device baudrate (115200, 57600, 19200, 9600), default is 115200\n"); + printf(" -s[settings] device settings as like 8N1N(default setting)\n"); + printf(" - data bits: 8, 7\n"); + printf(" - parity: N=None, O=Odd, E=Even, S=Space\n"); + printf(" - stop bits: 1, 0\n"); + printf(" - flow control: N=None, H=Hardware, S=Software, B=Both\n"); + printf(" -x[hex ] display received data in hex format\n"); + printf(" -i[ioctl ] ioctl system call (cmd & arg only support int)\n"); + printf(" -v[version ] Display the program version\n"); + printf(" -h[help ] Display this help information\n"); + + print_version(progname); + + t_free(ptr); + + return; +} + +int do_ioctl(char *dev_name, int cmd, int arg) +{ + int fd = -1; + int retval = -1; + if (((fd = open(dev_name, O_RDWR)) < 0)) + { + printf("Open device \"%s\" failure: %s\n", dev_name, strerror(errno)); + return -1; + } + + retval = ioctl(fd, cmd, arg); + printf("ioctl (%s, %d, %d) returned %d\n", dev_name, cmd, arg, retval); + + close(fd); + return retval; +} + +void signal_handler(int i_sig) +{ + if (SIGTERM == i_sig || SIGINT == i_sig) + { + g_ucProcToken = 0x00; + } + else if (20 == i_sig) + { + g_ucCtrlZ = 0x01; + } +} + + diff --git a/program/cp_library/test/makefile b/program/cp_library/test/makefile new file mode 100644 index 0000000..16b401a --- /dev/null +++ b/program/cp_library/test/makefile @@ -0,0 +1,121 @@ +#********************************************************************************* +# Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> +# All rights reserved. +# +# Filename: Makefile +# Description: This Makefile used to compile all the C source code file in current +# folder to respective excutable binary files. +# +# Version: 1.0.0(10/08/2011~) +# Author: Guo Wenxue <guowenxue@gmail.com> +# ChangeLog: 1, Release initial version on "11/11/2011 01:29:33 PM" +# +#********************************************************************************/ + +PWD=$(shell pwd) +LIB_PATH=$(shell dirname ${PWD}) +LIB_NAME=$(shell basename ${LIB_PATH}) +INSTPATH=/tftp + +#ARCH ?= i386 +#ARCH?=arm926t +ARCH?=arm920t + +#LINK_MODE=STATIC +MODE=PRODUCTION +DEBUG=1 + +CFLAGS+=-Wall -Werror +#CFLAGS+=-Wno-unused + +ifeq ("${MODE}", "PRODUCTION") + CFLAGS+=-DPRODUCTION_MODE +endif +ifdef DEBUG + CFLAGS+=-g -DDEBUG +endif + +COMPILE_DATE=$(shell date -u +"%Y-%m-%d %H:%M") +VPATH= . +SRCS = $(wildcard ${VPATH}/*.c) +OBJS = $(patsubst %.c,%.o,$(SRCS)) + +TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]") +ifneq (,$(filter i386,$(TMP))) + CROSS_COMPILE= +else + CROSS_COMPILE=/opt/buildroot-2012.08/$(ARCH)/usr/bin/arm-linux- +endif + +CFLAGS+=-I${LIB_PATH} +LDFLAGS+=-L${LIB_PATH} -l${LIB_NAME} + +export CC=${CROSS_COMPILE}gcc +export CXX=${CROSS_COMPILE}g++ +export AR=${CROSS_COMPILE}ar +export AS=${CROSS_COMPILE}as +export RANLIB=${CROSS_COMPILE}ranlib +export STRIP=${CROSS_COMPILE}strip +export CFLAGS +export LDFLAGS +export ARCH +export LINK_MODE + +LDFLAGS+=-lpthread +ifeq ("${LINK_MODE}", "STATIC") + CFLAGS+=--static + LDFLAGS+=-static +else + LDFLAGS+=-ldl +endif + +SRCFILES = $(wildcard *.c) +BINARIES=$(SRCFILES:%.c=%) + +all: entry version binaries install +entry: + @echo " "; + @echo " ========================================================="; + @echo " ** Compile \"${BINARIES}\" for ${ARCH} "; + @echo " ========================================================="; + +version: + @echo "/* Generated by makefile, don't Edit it by hand */" > version.h + @echo "#define DATE \"$(COMPILE_DATE)\"" >> version.h + @echo "#define MAJOR 1" >>version.h + @echo "#define MINOR 0" >>version.h + @echo "#define REVER 0" >>version.h + @if [ -f .svn/entries ] ; then \ + echo "#define SVNVER `sed -n -e 11p .svn/entries`" >>version.h; \ + else \ + echo "#define SVNVER 0" >>version.h; \ + fi; + @echo "" >> version.h + @echo '#define version(progname) printf("%s Version %d.%d.%d Build @%05d (%s)\n", progname, MAJOR, MINOR, REVER,SVNVER, DATE)' >> version.h + @echo '#define copyright() printf("Copyright: (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com\n")' >>version.h + @echo '#define banner(progname) {version(progname); copyright(); printf("\n");}' >>version.h + @echo "" >> version.h + +binaries: ${BINARIES} + @echo " Compile over" + +%: %.c + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) + +tag: + @ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R . + @cscope -Rbq + +install: + @cp $(BINARIES) ${INSTPATH} + +clean: + @rm -f version.h + @rm -f *.o *.lo $(BINARIES) + @rm -rf *.gdb *.a *.so *.elf* + @rm -f *.log + +distclean: clean + @rm -f tags cscope* + +.PHONY: clean entry diff --git a/program/cp_library/test/sample.ini b/program/cp_library/test/sample.ini new file mode 100644 index 0000000..ebac699 --- /dev/null +++ b/program/cp_library/test/sample.ini @@ -0,0 +1,11 @@ + +[section1] +key1 = 15 +key2 = hello + + +[section2] +key1 = 30 +key2 = world + + diff --git a/program/cp_library/test/swe_tpdud.c b/program/cp_library/test/swe_tpdud.c new file mode 100644 index 0000000..39b109e --- /dev/null +++ b/program/cp_library/test/swe_tpdud.c @@ -0,0 +1,360 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: tpdud.c + * Description: This file + * + * Version: 1.0.0(10/30/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/30/2012 01:15:18 PM" + * + ********************************************************************************/ + +#include <unistd.h> +#include <getopt.h> +#include <libgen.h> + +#include "cp_common.h" +#include "cp_network.h" +#include "cp_logger.h" +#include "cp_proc.h" +#include "cp_time.h" +#include "swe_tpdud.h" +#include "version.h" + +static void stop_tpdu_service(SWE_TPDU *tpdu) +{ + if(!tpdu) + return ; + + log_dbg("release tpdu contex [%p]\n", tpdu); + + if( tpdu->dlink ) + { + log_nrml("stop tpdu service for downlink socket [%p:%d]\n", tpdu->dlink, tpdu->dlink->fd); + cp_fds_destroy_sock_clear(tpdu->dlink); + tpdu->dlink = NULL; + } + + if( tpdu->ulink ) + { + log_nrml("stop tpdu service for uplink socket [%p:%d]\n", tpdu->ulink, tpdu->ulink->fd); + cp_fds_destroy_sock_clear(tpdu->ulink); + tpdu->ulink = NULL; + } + + t_free(tpdu); +} + +int proc_uplink_event(CP_SOCK *ulink) +{ + int rv; + CP_SOCK *dlink = NULL; + SWE_TPDU *tpdu = NULL; + + if(!ulink || !(tpdu=ulink->privt) || !(dlink=tpdu->dlink)) + { + log_err("tpdu address:[%p] ulink address:[%p] dlink address:[%p]\n", tpdu, ulink, dlink); + return -1; + } + + if(ulink->status == SOCK_STAT_DISCONNECT) + { + goto stop_service; + } + + if(ulink->event.events & CP_SOCK_EVENT_READ) + { + rv = cp_sock_recv(ulink); + if( 0==rv ) + { + log_warn("Socket [%d %s:%d] remote socket [%s:%d] disconnect, remove it now\n", + ulink->fd, ulink->laddr, ulink->lport, ulink->raddr, ulink->rport); + goto stop_service; + } + else if(rv > 0) + { + log_nrml("Socket [%d %s:%d] receive %d bytes data:\n", ulink->fd, ulink->laddr, ulink->lport, rv); + cp_log_dump(LOG_LEVEL_DEBUG, ulink->rbuf->data, ulink->rbuf->len); + + if(ulink->rbuf->len > 0) + { + cp_string_move(dlink->sbuf, ulink->rbuf); + cp_sock_send(dlink); + } + } + else + { + log_err("Socket [%d %s:%d] receive data failed: %s\n", ulink->fd, ulink->laddr, ulink->lport, strerror(errno)); + } + } + else if(ulink->event.events & CP_SOCK_EVENT_IDLE_TIMEOUT) + { + log_warn("uplink socket [%d] is idle and to-do something here\n"); + } + else if(ulink->event.events & CP_SOCK_EVENT_MSG_TIMEOUT) + { + log_warn("uplink socket [%d] message is timeout and to-do something here\n"); + } + + + + return 0; + +stop_service: + stop_tpdu_service(tpdu); + return 0; +} + +/* Connect to hostsim */ +int tpdu_connect_uplink(SWE_TPDU *tpdu) +{ + CP_SOCK *ulink; + CP_SOCK *dlink; + + if(!tpdu || !(dlink=tpdu->dlink)) + { + log_err("tpdu address [%p] dlink address [%p]\n", tpdu, dlink); + return -1; + } + + ulink = tpdu->ulink; + + ulink=cp_sock_connect_regist(dlink->fds, ulink, tpdu->raddr, tpdu->rport, 0, proc_uplink_event); + if( !ulink ) /* connect failure */ + { + /* the uplink connect failure or connect already, then we should + * remove the downlink socket from task list */ + log_err("connect to remote [%s:%d] failure\n", tpdu->raddr, tpdu->rport); + tpdu->ulink = NULL; + return -1; + } + else /* connecting in progress */ + { + ulink->privt = tpdu; + tpdu->ulink = ulink; + log_info("connect to remote [%s:%d] in progress\n", tpdu->raddr, tpdu->rport); + cp_fds_add_sock_task(dlink); + dlink->event.events = 0; /* clear the events flag */ + } + + return 0; +} + +int tpdu_service_route(CP_SOCK *dlink) +{ + int rv = 0; + + SWE_TPDU *tpdu; + + if( !dlink ) + return -1; + + tpdu = dlink->privt; + + /* If it's first data incoming from the dlink, then we should + * malloc a TPDU work context now and save it */ + if( !tpdu ) + { + if( !(tpdu=t_malloc(sizeof(*tpdu))) ) + { + log_err("Malloc TPDU work contex failure\n"); + goto stop_service; + } + else + { + SWE_TPDU *serv_tpdu; + log_info("malloc TPDU work contex [%p]\n", tpdu); + + serv_tpdu = dlink->serv_sock->privt; + dlink->privt = tpdu; + tpdu->dlink = dlink; + strcpy(tpdu->raddr, serv_tpdu->raddr); + tpdu->rport = serv_tpdu->rport; + } + } + + log_dbg("Process socket [%d %s:%d] with event [%d]\n", dlink->fd, dlink->laddr, dlink->lport, dlink->event.events); + + /* If there is data incoming from this socket, now we receive the data */ + if(dlink->event.events & CP_SOCK_EVENT_READ) + { + rv = cp_sock_recv(dlink); + if( rv == 0 ) + { + log_warn("Socket [%d %s:%d] remote socket [%s:%d] disconnect, remove it now\n", + dlink->fd, dlink->laddr, dlink->lport, dlink->raddr, dlink->rport); + goto stop_service; + } + else if( rv < 0) + { + log_err("Socket [%d %s:%d] receive data failed: %s\n", dlink->fd, dlink->laddr, dlink->lport, strerror(errno)); + goto stop_service; + } + + /* Receive data OK */ + log_nrml("Socket [%d %s:%d] receive %d bytes data:\n", dlink->fd, dlink->laddr, dlink->lport, rv); + cp_log_dump(LOG_LEVEL_DEBUG, dlink->rbuf->data, dlink->rbuf->len); + } + else if(dlink->event.events & CP_SOCK_EVENT_HUP) + { + log_warn("socket [%d] remote already disconnect\n", dlink->fd); + dlink->status = SOCK_STAT_DISCONNECT; + goto stop_service; + } + else if(dlink->event.events & CP_SOCK_EVENT_IDLE_TIMEOUT) + { + log_warn("socket [%d] is idle and to-do something here\n"); + } + else if(dlink->event.events & CP_SOCK_EVENT_MSG_TIMEOUT) + { + log_warn("socket [%d] message is timeout and to-do something here\n"); + } + + /* If we have receive some data already, now we need do TPDU parser to + * get the remote server address and port */ + if( dlink->rbuf->len > 0) + { + SWE_TPDU *arg = dlink->serv_sock->privt; + /* To-Do: parser downlink data here and get the uplink IP address and port */ + tpdu->rport = arg->rport; + strncpy(tpdu->raddr, arg->raddr, sizeof(tpdu->raddr)); + } + + /* If not connect to the remote host or it's still connecting, then we do it again */ + if( !tpdu->ulink || (tpdu->ulink->status==SOCK_STAT_CONNECTING)) + { + log_nrml("tpdu dlink: %p\n", tpdu->dlink); + if( tpdu_connect_uplink(tpdu) < 0 ) + goto stop_service; + } + + /* If connect to the remote host already, now we send the data to the remote host */ + if( !tpdu->ulink || (tpdu->ulink->status==SOCK_STAT_CONNECTED)) + { + log_dbg("connect to remote [%s:%d] ok and send %d bytes data\n", tpdu->raddr, tpdu->rport, dlink->rbuf->len); + cp_fds_del_sock_task(dlink); + if(dlink->rbuf->len > 0) + { + cp_string_move(tpdu->ulink->sbuf, dlink->rbuf); + cp_sock_send(tpdu->ulink); /* send the data to the remote host */ + return 0; + } + } + + return 0; + +stop_service: + stop_tpdu_service(tpdu); + tpdu = NULL; + return 0; +} + +void print_usage(char *progname) +{ + version(progname); + printf("Usage: %s [OPTION]...\n", progname); + printf(" %s is a handle program to create a tunnel between an incoming and outgoing FD\n", progname); + + printf("\nMandatory arguments to long options are mandatory for short options too:\n"); + + printf(" -l[loglevel] To configure the logger level [0(DIS)...8(MAX)], default 4[NRML]\n"); + printf(" -p[port ] To configure the listening port, default [%d]\n", TPDUD_PORT); + printf(" -i[RemoteIP] To configure the remote/outgoing IP, default [%s]\n", HOSTSIM_IP); + printf(" -o[outgoing] To configure the remote/outgoing Port, default [%d]\n", HOSTSIM_PORT); + printf(" -h[help ] Display this help information\n"); + printf(" -v[version ] Display the program version\n"); + printf("\n"); + + return ; +} + + +/******************************************************************************** + * Description: + * Input Args: + * Output Args: + * Return Value: + ********************************************************************************/ +int main (int argc, char **argv) +{ + CP_FDS *fds; + CP_SOCK *sock; + SWE_TPDU tpdu = {.lport=TPDUD_PORT, .raddr=HOSTSIM_IP, .rport=HOSTSIM_PORT}; + int opt; + int loglevel = LOG_LEVEL_NRML; + + struct option long_options[] = + { + {"loglevel", required_argument, NULL, 'l'}, + {"port", required_argument, NULL, 'p'}, + {"host", required_argument, NULL, 'i'}, + {"outgoing", required_argument, NULL, 'o'}, + {"version", no_argument, NULL, 'v'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} + }; + + while ((opt = getopt_long(argc, argv, "l:p:i:o:vh", long_options, NULL)) != -1) + { + switch (opt) + { + case 'l': + loglevel = atoi(optarg); + break; + + case 'p': + tpdu.lport = atoi(optarg); + break; + + case 'i': + strncpy(tpdu.raddr, optarg, sizeof(tpdu.raddr)); + break; + + case 'o': + tpdu.rport = atoi(optarg); + break; + + case 'v': + version(basename(argv[0])); + return EXIT_SUCCESS; + + case 'h': + print_usage(basename(argv[0])); + return EXIT_SUCCESS; + + default: + break; + } + } + + //if (!cp_log_init(NULL, "tpdud.log", LOG_LEVEL_MAX, LOG_ROLLBACK_NONE) || cp_log_open()) + //if (!cp_log_init(NULL, "tpdud.log", loglevel, LOG_ROLLBACK_SIZE) || cp_log_open()) + if (!cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_MAX, LOG_ROLLBACK_NONE) || cp_log_open()) + //if (!cp_log_init(NULL, DBG_LOG_FILE, loglevel, LOG_ROLLBACK_NONE) || cp_log_open()) + goto cleanup; + + cp_install_proc_signal(); + + if( !(fds=cp_fds_init(NULL, CP_DEF_MAX_EVENTS, CP_DEF_FDS_TIMEOUT)) ) + goto cleanup; + + if( !(sock=cp_sock_server_regist(fds, NULL, tpdu.lport, 0, tpdu_service_route, (void *)&tpdu)) ) + goto cleanup; + + while( !g_cp_signal.stop ) + { + cp_fds_detect_event(fds); + cp_fds_proc_event(fds); + cp_sock_detect_timeout(fds); + micro_second_sleep(10); + } + +cleanup: + cp_sock_term_all_service_clear(fds); + cp_log_term(); + return 0; +} /* ----- End of main() ----- */ + + diff --git a/program/cp_library/test/swe_tpdud.h b/program/cp_library/test/swe_tpdud.h new file mode 100644 index 0000000..0e66d03 --- /dev/null +++ b/program/cp_library/test/swe_tpdud.h @@ -0,0 +1,42 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: tpdud.h + * Description: This head file + * + * Version: 1.0.0(11/19/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/19/2012 11:21:05 AM" + * + ********************************************************************************/ + +#ifndef __SWE_TPDUD_H +#define __SWE_TPDUD_H + +#include <cp_sock.h> + +#define HOSTSIM_PORT 9002 +#define HOSTSIM_IP "192.168.3.6" + +#define TPDUD_PORT 8000 +#define UPLINK_ADDR HOSTSIM_IP +#define UPLINK_PORT HOSTSIM_PORT + +#define FLAG_TPDU_INIT (1<<0) +#define FLAG_TPDU_STOP (1<<7) + +typedef struct _SWE_TPDU +{ + unsigned char flag; + char raddr[32]; /* uplink remote listen port */ + int lport; /* dlink local listen port */ + int rport; /* uplink remote IP address */ + + CP_SOCK *dlink; /* listen port accept socket */ + CP_SOCK *ulink; /* connect to hostsim socket */ +} SWE_TPDU; + + +#endif + diff --git a/program/cp_library/test/test_array.c b/program/cp_library/test/test_array.c new file mode 100644 index 0000000..d7bb2ab --- /dev/null +++ b/program/cp_library/test/test_array.c @@ -0,0 +1,82 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: test_array.c + * Description: This file used to test the array library + * + * Version: 1.0.0(08/14/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "08/14/2012 05:17:03 PM" + * + ********************************************************************************/ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +#include "cp_array.h" +#include "cp_sock.h" +#include "cp_logger.h" + +#define MAX_ITEMS 10 + +/******************************************************************************** + * Description: + * Input Args: + * Output Args: + * Return Value: + ********************************************************************************/ +int main (int argc, char **argv) +{ + int i; + + CP_SOCK *sock = NULL; + CP_SOCK *tmp = NULL; + CP_ARRAY *array = NULL; + + if (!cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_MAX, LOG_ROLLBACK_NONE) || cp_log_open()) + return 0; + + if( !(array=cp_array_init(NULL, MAX_ITEMS)) ) + return -1; + + for (i=0; i<MAX_ITEMS; i++) + { + sock = cp_sock_init(NULL, 1024, 1024, 10, 30); + if( cp_array_add(array, sock)<0 ) + { + cp_sock_term(sock); + } + else + { + if(i==3) + { + tmp = sock; + } + } + } + + printf("Array usage %d/%d \n", cp_array_count(array), cp_array_size(array)); + + cp_array_travel(array); + + if( !cp_array_rm_bydata(array, tmp) ) + { + printf("remove and terminate sock [%p] from array\n", tmp); + cp_sock_term(tmp); + } + cp_array_travel(array); + + cp_list_array_for_each(array, i, sock) + { + cp_sock_term(sock); + } + + cp_array_term(array); + cp_log_term(); + + return 0; + +} /* ----- End of main() ----- */ + diff --git a/program/cp_library/test/test_hal.c b/program/cp_library/test/test_hal.c new file mode 100644 index 0000000..1f92ee5 --- /dev/null +++ b/program/cp_library/test/test_hal.c @@ -0,0 +1,210 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: test_hal.c + * Description: This file + * + * Version: 1.0.0(12/05/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "12/05/2012 04:52:59 PM" + * + ********************************************************************************/ + +#include <libgen.h> +#include <getopt.h> +#include "cp_hal.h" + +#define HAL_LIBRARY_TEST + +void test_led_hal_api(void) +{ + printf("+------------------------------------+\n"); + printf("| Test LED HAL API |\n"); + printf("+------------------------------------+\n"); + + printf("Turn all LED off\n"); + hal_turn_led_off(LED_ALL); + sleep(2); + + printf("Turn LED blink one by one\n"); + hal_turn_led_blink(LED_SYS, MODE_FAST); + hal_turn_led_blink(LED_SIM1, MODE_FAST); + hal_turn_led_blink(LED_SIM2, MODE_FAST); + hal_turn_led_blink(LED_WIFI, MODE_FAST); + hal_turn_led_blink(LED_ETH, MODE_FAST); + sleep(4); + + printf("Turn LED off one by one\n"); + hal_turn_led_off(LED_SYS); + hal_turn_led_off(LED_SIM1); + hal_turn_led_off(LED_SIM2); + hal_turn_led_off(LED_WIFI); + hal_turn_led_off(LED_ETH); + sleep(4); + + printf("Turn LED on one by one\n"); + hal_turn_led_on(LED_SYS); + hal_turn_led_on(LED_SIM1); + hal_turn_led_on(LED_SIM2); + hal_turn_led_on(LED_WIFI); + hal_turn_led_on(LED_ETH); + sleep(4); + + printf("Turn all LED off\n"); + hal_turn_led_off(LED_ALL); + sleep(2); + + printf("Turn all LED blink\n"); + hal_turn_led_blink(LED_ALL, MODE_SLOW); + sleep(4); + + printf("Turn all LED on\n"); + hal_turn_led_on(LED_ALL); + sleep(4); + hal_turn_led_off(LED_ALL); +} + +void test_buzzer_hal_api(void) +{ + printf("+------------------------------------+\n"); + printf("| Test Buzzer HAL API |\n"); + printf("+------------------------------------+\n"); + + printf("Turn buzzer on\n"); + hal_turn_buzzer_on(); + sleep(2); + + printf("Turn buzzer off\n"); + hal_turn_buzzer_off(); + sleep(2); + + printf("Turn buzzer beep for 5 times\n"); + hal_turn_buzzer_beep(3); + sleep(4); + + printf("Turn buzzer off\n"); + hal_turn_buzzer_off(); + sleep(3); + + printf("Turn buzzer beep infinitely\n"); + hal_turn_buzzer_beep(0); + sleep(5); + + printf("Turn buzzer off\n"); + hal_turn_buzzer_off(); +} + +void test_gprs_hal_api(void) +{ + int rv = 0; + + printf("+------------------------------------+\n"); + printf("| Test GPRS HAL API |\n"); + printf("+------------------------------------+\n"); + + hal_poweron_gprs(SIM_NONE); + + rv = hal_check_simdoor(SIM_ALL); + printf("Check all SIM card present status: 0x%02x\n", rv); + + rv = hal_check_simdoor(SIM1); + printf("Check SIM1 card present status: 0x%02x\n", rv); + + rv = hal_check_simdoor(SIM2); + printf("Check SIM2 card present status: 0x%02x\n", rv); + + printf("Get current working SIM card: 0x%02x\n", hal_get_worksim()); + + hal_set_worksim(SIM2); + printf("Set current working SIM to SIM2\n"); + + printf("Get current working SIM card: 0x%02x\n", hal_get_worksim()); + + hal_set_worksim(SIM1); + printf("Set current working SIM to SIM1\n"); + + printf("Get current working SIM card: 0x%02x\n", hal_get_worksim()); + hal_poweroff_gprs(); + +} + +void print_usage(char *progname) +{ + printf("Usage: %s [OPTION]...\n", progname); + printf("\nMandatory arguments to long options are mandatory for short options too:\n"); + + printf(" -l[led ] Test LED HAL API\n"); + printf(" -b[buzzer ] Test Buzzer HAL API\n"); + printf(" -g[gprs ] Test GPRS HAL API\n"); + printf(" -h[help ] Display this help information\n"); + + +} + + +#ifdef HAL_LIBRARY_TEST +/******************************************************************************** + * Description: + * Input Args: + * Output Args: + * Return Value: + ********************************************************************************/ +int main (int argc, char **argv) +{ + int opt; + char *progname=NULL; + int test_led = 0; + int test_gprs = 0; + int test_buzzer = 0; + + struct option long_options[] = { + {"led", no_argument, NULL, 'l'}, + {"buzzer", no_argument, NULL, 'b'}, + {"gprs", no_argument, NULL, 'g'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} + }; + + progname = basename(argv[0]); + + while ((opt = getopt_long(argc, argv, "bghl", long_options, NULL)) != -1) + { + switch(opt) + { + case 'b': + test_buzzer = 1; + break; + + case 'l': + test_led = 1; + break; + + case 'g': + test_gprs = 1; + break; + + case 'h': + print_usage(progname); + + default: + break; + } + } + + if(!test_buzzer && !test_led && !test_gprs) + print_usage(progname); + + if(test_buzzer) + test_buzzer_hal_api(); + + if(test_led) + test_led_hal_api(); + + if(test_gprs) + test_gprs_hal_api(); + + return 0; +} /* ----- End of main() ----- */ + +#endif /* HAL_LIBRARY_TEST */ diff --git a/program/cp_library/test/test_hh.c b/program/cp_library/test/test_hh.c new file mode 100644 index 0000000..68e5d8f --- /dev/null +++ b/program/cp_library/test/test_hh.c @@ -0,0 +1,85 @@ +/********************************************************************************* + * Copyright: (C) 2013 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: test_hh.c + * Description: This file + * + * Version: 1.0.0(01/28/2013~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "01/28/2013 03:35:36 PM" + * + ********************************************************************************/ + +#include <libgen.h> +#include "cp_comport.h" +#define HH_DATAPORT "/dev/ttySSHHR" + +/******************************************************************************** + * Description: + * Input Args: + * Output Args: + * Return Value: + ********************************************************************************/ +int main (int argc, char **argv) +{ + int i; + COM_PORT *comport = NULL; + unsigned char sbuf[10]={0x02, 0x48, 0x32, 0x03, 0x20, 0x00, 0x00, 0xF6, 0xBE, 0x03}; + unsigned char rbuf[10]; +#if 0 + char *HH_DATAPORT = NULL; + + if(argc != 2) + { + printf("Usage: %s [device name]\n", basename(argv[0])); + return 0; + } + HH_DATAPORT = argv[1]; +#endif + + if( !(comport=comport_init(HH_DATAPORT, 115200, "8N1N")) ) + { + printf("Initialise comport %s failure\n", HH_DATAPORT); + return -1; + } + + if(comport_open(comport)<0) + { + printf("Open comport %s failure\n", HH_DATAPORT); + return -1; + } + + if(comport_send(comport, (char *)sbuf, sizeof(sbuf)) < 0) + { + printf("Send 10 bytes data to %s failure\n", HH_DATAPORT); + return -1; + } + printf("Send %d bytes data to %s:\n>>", sizeof(sbuf), HH_DATAPORT); + for(i=0; i<10; i++) + { + printf("%02x ", sbuf[i]); + } + printf("\n"); + + + memset(rbuf, 0, sizeof(rbuf)); + if((i=comport_recv(comport, (char *)rbuf, sizeof(rbuf), 5000)) < 0) + { + printf("Receive 10 bytes data to %s failure\n", HH_DATAPORT); + return -1; + } + + printf("Receive %d bytes data from %s:\n<<", i, HH_DATAPORT); + for(i=0; i<10; i++) + { + printf("%02x ", rbuf[i]); + } + printf("\n"); + + comport_term(comport); + + return 0; +} /* ----- End of main() ----- */ + + diff --git a/program/cp_library/test/test_ini.c b/program/cp_library/test/test_ini.c new file mode 100644 index 0000000..c0633e2 --- /dev/null +++ b/program/cp_library/test/test_ini.c @@ -0,0 +1,48 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: test_ini.c + * Description: This file + * + * Version: 1.0.0(12/18/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "12/18/2012 10:54:09 AM" + * + ********************************************************************************/ + +#include "cp_iniparser.h" + + +#define INI_CONF "sample.ini" + +/******************************************************************************** + * Description: + * Input Args: + * Output Args: + * Return Value: + ********************************************************************************/ +int main (int argc, char **argv) +{ + dictionary *ini; + FILE *fp; + + ini=iniparser_load(INI_CONF); + + fp=fopen(INI_CONF, "w+"); + + iniparser_set(ini, "section1:key1", "30"); + + + iniparser_dump(ini, stderr); + + iniparser_dump_ini(ini, fp); + + + iniparser_freedict(ini); + + + return 0; +} /* ----- End of main() ----- */ + + diff --git a/program/cp_library/test/test_klist.c b/program/cp_library/test/test_klist.c new file mode 100644 index 0000000..5ff09cb --- /dev/null +++ b/program/cp_library/test/test_klist.c @@ -0,0 +1,79 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: test_klist.c + * Description: This file is for test kernel space double linked list. + * + * Version: 1.0.0(11/12/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/12/2012 04:26:39 PM" + * + ********************************************************************************/ + +#include "cp_klist.h" +#include "cp_sock.h" + +//#define LIST_REVERSE + +void travel_list(struct list_head *head) +{ + CP_SOCK *sock, *tsock; + + + if( (sock=cp_sock_init(NULL, CP_SOCK_RCVBUF, CP_SOCK_SNDBUF, CP_SOCK_KEEPINTVL, CP_SOCK_KEEPCNT)) ) + { + list_add_tail(&sock->rlist, head); + printf("Add new socket %p to sock_list \n", sock); + } + + /* Use list_for_each_entry to travel the socket list, we can not remove the node in it */ + list_for_each_entry_safe(sock, tsock, head, rlist) + { + printf("Travel2 socket list on socket %p\n", sock); + } +} + + +/******************************************************************************** + * Description: + * Input Args: + * Output Args: + * Return Value: + ********************************************************************************/ +int main (int argc, char **argv) +{ + int i; + struct list_head sock_list; + CP_SOCK *sock, *tsock; + + INIT_LIST_HEAD(&sock_list); + + for(i=0; i<10; i++) + { + if( (sock=cp_sock_init(NULL, CP_SOCK_RCVBUF, CP_SOCK_SNDBUF, CP_SOCK_KEEPINTVL, CP_SOCK_KEEPCNT)) ) + { + list_add_tail(&sock->rlist, &sock_list); + printf("Add socket %p to sock_list \n", sock); + } + } + + /* Use list_for_each_entry to travel the socket list, we can not remove the node in it */ + list_for_each_entry(sock, &sock_list, rlist) + { + printf("Travel socket list on socket %p\n", sock); + } + + travel_list(&sock_list); + + /* Use list_for_each_entry_safe to travel the socket list and destroy the socket */ + list_for_each_entry_safe(sock, tsock, &sock_list, rlist) + { + list_del(&sock->rlist); + cp_sock_term(sock); + printf("Remove and destroy socket %p from socket list\n", sock); + } + + return 0; +} /* ----- End of main() ----- */ + diff --git a/program/cp_library/test/test_logger.c b/program/cp_library/test/test_logger.c new file mode 100644 index 0000000..e22b622 --- /dev/null +++ b/program/cp_library/test/test_logger.c @@ -0,0 +1,58 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: test_logger.c + * Description: This is the linux logger system test code. + * + * Version: 1.0.0(08/08/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "08/08/2012 06:51:40 PM" + * + ********************************************************************************/ + +#include <unistd.h> +#include <stdio.h> +#include <string.h> +#include <libgen.h> +#include "cp_logger.h" + + +/******************************************************************************** + * Description: + * Input Args: + * Output Args: + * Return Value: + ********************************************************************************/ +int main (int argc, char **argv) +{ + char buf[30]="Hello World!\n"; + char file[FILENAME_LEN]; + + snprintf(file, FILENAME_LEN, "%s.log", basename(argv[0]) ); + + //if (! cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_NRML, LOG_ROLLBACK_NONE) ) + //if (! cp_log_init(NULL, DEFAULT_LOGFILE, LOG_LEVEL_MAX, LOG_ROLLBACK_SIZE) ) + if(! cp_log_init(NULL, file, LOG_LEVEL_MAX, 12) || cp_log_open() ) + return 0; + + + while(1) + { + log_info("1connection.\n"); + log_dbg("2connection.\n"); + log_nrml("3connection.\n"); + log_warn("4connection.\n"); + log_err("5connection.\n"); + log_fatal("6connection.\n"); + + cp_log_dump(LOG_LEVEL_DEBUG, buf, 30); + + sleep(1); + } + + cp_log_term(); + + return 0; +} /* ----- End of main() ----- */ + diff --git a/program/cp_library/test/test_queue.c b/program/cp_library/test/test_queue.c new file mode 100644 index 0000000..aceddfb --- /dev/null +++ b/program/cp_library/test/test_queue.c @@ -0,0 +1,84 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: test_queue.c + * Description: This file used to test the queue library + * + * Version: 1.0.0(08/14/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "08/14/2012 05:17:03 PM" + * + ********************************************************************************/ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +#include "cp_queue.h" +#include "cp_sock.h" + +#define MAX_ITEMS 10 + +/******************************************************************************** + * Description: + * Input Args: + * Output Args: + * Return Value: + ********************************************************************************/ +int main (int argc, char **argv) +{ + int i; + + CP_SOCK *sock = NULL; + CP_SOCK *tmp = NULL; + + CP_QUEUE *queue = NULL; + + queue = cp_queue_init(NULL, MAX_ITEMS); + + //for (i=0; i<MAX_ITEMS; i++) + for (i=0; i<MAX_ITEMS+10; i++) + //for (i=0; i<MAX_ITEMS-3; i++) + { + sock = cp_sock_init(NULL, 1024, 1024, 10, 30); + if( NULL==cp_enqueue(queue, sock) ) + { + cp_sock_term(sock); + } + else + { + if(i==3) + { + tmp = sock; + } + printf("enqueue sock %p\n", sock); + } + } + + + printf("queue usage %d/%d \n", cp_queue_count(queue), cp_queue_size(queue)); + + cp_travel_queue(queue); + if( cp_rmqueue(queue, tmp) ) + { + printf("remove and terminate sock [%p] from queue\n", tmp); + cp_sock_term(tmp); + } + cp_travel_queue(queue); + + while(!cp_queue_is_empty(queue)) + { + if( (sock=cp_dequeue(queue)) ) + { + printf("Terminate socket: %p\n", sock); + cp_sock_term(sock); + } + } + + cp_queue_destroy(queue); + + return 0; + +} /* ----- End of main() ----- */ + diff --git a/program/cp_library/test/test_sock_client.c b/program/cp_library/test/test_sock_client.c new file mode 100644 index 0000000..028c921 --- /dev/null +++ b/program/cp_library/test/test_sock_client.c @@ -0,0 +1,110 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: test_client_sock.c + * Description: This file + * + * Version: 1.0.0(10/30/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/30/2012 01:15:18 PM" + * + ********************************************************************************/ + +#include "cp_network.h" +#include "cp_logger.h" +#include "cp_proc.h" +#include "cp_time.h" + + +//#define SERV_ADDR "192.168.1.175" +#define SERV_ADDR "192.168.1.78" +//#define SERV_ADDR "kkernel.oicp.net" +#define SERV_PORT 8880 + +int service_route(CP_SOCK *sock) +{ + int rv; + + if( !sock ) + return -1; + + printf("Client socket [%d] get event: %d\n", sock->fd, sock->event.events); + if(sock->event.events & EPOLLIN) + { + rv = cp_sock_recv(sock); + if(!rv) + { + log_nrml("Socket [%d %s:%d] remote socket [%s:%d] disconnect, remove it now\n", + sock->fd, sock->laddr, sock->lport, sock->raddr, sock->rport); + + cp_fds_destroy_sock(sock); + g_cp_signal.stop = 1; + + return 0; + } + else if(rv > 0) + { + log_nrml("Socket [%d %s:%d] receive [%d] bytes data:\n", sock->fd, sock->laddr, sock->lport, sock->rbuf->len); + cp_log_dump(LOG_LEVEL_DEBUG, sock->rbuf->data, sock->rbuf->len); + cp_string_clear_data(sock->rbuf); + } + } + + return 0; +} + + +/******************************************************************************** + * Description: + * Input Args: + * Output Args: + * Return Value: + ********************************************************************************/ +int main (int argc, char **argv) +{ + CP_FDS *fds; + CP_SOCK *sock = NULL; + + if ( !cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_NRML, LOG_ROLLBACK_NONE) || cp_log_open() ) + //if ( !cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_MAX, LOG_ROLLBACK_NONE) || cp_log_open() ) + return -1; + + cp_install_proc_signal(); + + if( !(fds=cp_fds_init(NULL, CP_DEF_MAX_EVENTS, CP_DEF_FDS_TIMEOUT)) ) + return -2; + + while( !g_cp_signal.stop ) + { + sock = cp_sock_connect_regist(fds, sock, SERV_ADDR, SERV_PORT, 0, service_route); + if( sock && sock->status==SOCK_STAT_CONNECTING) + { + /* Connect is in progress */ + sleep(1); + continue; + } + else if(!sock || sock->status!=SOCK_STAT_CONNECTED) + { + break; + } + + cp_string_cstrcpy(sock->sbuf, "Hello World!\n"); + printf("Send buffer data: %s", cp_string_data(sock->sbuf)); + cp_sock_send(sock); + + cp_fds_detect_event(fds); + + cp_fds_proc_event(fds); + + micro_second_sleep(100); + } + + cp_sock_term_all_service_clear(fds); + + cp_log_term(); + + return 0; +} /* ----- End of main() ----- */ + + diff --git a/program/cp_library/test/test_sock_server.c b/program/cp_library/test/test_sock_server.c new file mode 100644 index 0000000..f16393b --- /dev/null +++ b/program/cp_library/test/test_sock_server.c @@ -0,0 +1,98 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: test_sock_server.c + * Description: This file + * + * Version: 1.0.0(10/30/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/30/2012 01:15:18 PM" + * + ********************************************************************************/ + +#include "cp_network.h" +#include "cp_logger.h" +#include "cp_proc.h" +#include "cp_time.h" + + +#define SERV_PORT1 8880 +#define SERV_PORT2 8881 + +#define DOMAIN "kkernel.oicp.net" +#define IPADDR "192.168.1.78" + +int service_route(CP_SOCK *sock) +{ + int rv = 0; + log_nrml("Process socket [%d %s:%d] get event [%d]\n", sock->fd, sock->laddr, sock->lport, sock->event.events); + + if(sock->event.events & EPOLLIN) + { + rv = cp_sock_recv(sock); + if(0==rv) + { + log_nrml("Socket [%d %s:%d] remote socket [%s:%d] disconnect, remove it now\n", + sock->fd, sock->laddr, sock->lport, sock->raddr, sock->rport); + + cp_fds_destroy_sock(sock); + + return 0; + } + else if(rv > 0) + { + log_nrml("Socket[%d] recv buffer %d bytes data:\n", sock->fd, sock->rbuf->len); + //cp_log_dump(LOG_LEVEL_NRML, sock->rbuf->data, sock->rbuf->len); + + cp_string_move(sock->sbuf, sock->rbuf); + + log_nrml("Socket[%d] send buffer %d bytes data:\n", sock->fd, sock->sbuf->len); + cp_sock_send(sock); + cp_string_clear_data(sock->sbuf); + } + } + + return 0; +} + +/******************************************************************************** + * Description: + * Input Args: + * Output Args: + * Return Value: + ********************************************************************************/ +int main (int argc, char **argv) +{ + CP_FDS *fds; + CP_SOCK *sock; + + //if (!cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_NRML, LOG_ROLLBACK_NONE) || cp_log_open()) + if (!cp_log_init(NULL, DBG_LOG_FILE, LOG_LEVEL_MAX, LOG_ROLLBACK_NONE) || cp_log_open()) + goto cleanup; + + cp_install_proc_signal(); + + if( !(fds=cp_fds_init(NULL, CP_DEF_MAX_EVENTS, CP_DEF_FDS_TIMEOUT)) ) + goto cleanup; + + if( !(sock=cp_sock_server_regist(fds, NULL, SERV_PORT1, 0, service_route, NULL)) ) + goto cleanup; + + if( !(sock=cp_sock_server_regist(fds, NULL, SERV_PORT2, 0, service_route, NULL)) ) + goto cleanup; + + while( !g_cp_signal.stop ) + { + cp_fds_detect_event(fds); + cp_fds_proc_event(fds); + micro_second_sleep(10); + } + +cleanup: + cp_sock_term_all_service_clear(fds); + cp_log_term(); + return 0; +} /* ----- End of main() ----- */ + + diff --git a/program/cp_library/test/test_string.c b/program/cp_library/test/test_string.c new file mode 100644 index 0000000..0b8d4f3 --- /dev/null +++ b/program/cp_library/test/test_string.c @@ -0,0 +1,77 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: test_string.c + * Description: This file + * + * Version: 1.0.0(11/27/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/27/2012 01:28:39 PM" + * + ********************************************************************************/ + +#include <cp_string.h> + + +/******************************************************************************** + * Description: + * Input Args: + * Output Args: + * Return Value: + ********************************************************************************/ +int main (int argc, char **argv) +{ + int i; + cp_string *rcv; + cp_string *snd; + + rcv = cp_string_create_empty(64); + snd = cp_string_create_empty(64); + + printf("=======================\n"); + printf("Test cp_string_copy \n"); + printf("=======================\n"); + cp_string_clear_data(rcv); + cp_string_cstrcpy(rcv, "Hello world!"); + printf("Receive buffer data:\n"); + cp_string_dump(rcv); + + for(i=0; i<20; i++) + { + if( cp_string_copy(snd, rcv) > 0) + { + printf("[%d] Send buffer data:\n", i); + cp_string_dump(snd); + } + } + + printf("\n=======================\n"); + printf("Test cp_string_move \n"); + printf("=======================\n"); + + cp_string_clear_data(snd); + cp_string_clear_data(rcv); + for(i=0; i<20; i++) + { + cp_string_cstrcpy(rcv, "Hello world!"); + //printf("Set new receive buffer data [%d] bytes:\n", cp_string_len(rcv)); + cp_string_dump(rcv); + + if( cp_string_move(snd, rcv) > 0) + { + printf("[%d] Send buffer [%d] bytes data:\n", i, cp_string_len(snd)); + cp_string_dump(snd); + + printf("[%d] receive buffer [%d] bytes data:\n", i, cp_string_len(rcv)); + cp_string_dump(rcv); + } + } + + cp_string_destroy(rcv); + cp_string_destroy(snd); + + + return 0; +} /* ----- End of main() ----- */ + diff --git a/program/cp_library/test/test_vector.c b/program/cp_library/test/test_vector.c new file mode 100644 index 0000000..97231a9 --- /dev/null +++ b/program/cp_library/test/test_vector.c @@ -0,0 +1,67 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: test_vector.c + * Description: This file used to test the vector library + * + * Version: 1.0.0(08/14/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "08/14/2012 05:17:03 PM" + * + ********************************************************************************/ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +#include "cp_vector.h" +#include "cp_sock.h" + +/******************************************************************************** + * Description: + * Input Args: + * Output Args: + * Return Value: + ********************************************************************************/ +int main (int argc, char **argv) +{ + + int i, n; + CP_SOCK *p = NULL; + + CP_VECTOR *v = cp_vector_init(1024); + + for (i = 0; i < 10; i++) + { + p = cp_sock_init(NULL, 1024, 1024, 10, 30); + cp_vector_add(v, i, p); + } + + n = cp_vector_count(v); + for (i = 0; i < n; i++) + { + p = cp_vector_get(v, i); + printf("%d: %p\n", i, p); + } + + p = cp_sock_init(NULL, 1024, 1024, 10, 30); + cp_vector_add(v, 28, p); + printf("Set 28: %p\n", p); + + for (i=0; i <cp_vector_size(v); i++) + { + p = cp_vector_get(v, i); + if(p) + { + printf("Terminate socket %i: %p\n", i, p); + cp_sock_term(p); + } + } + + cp_vector_destroy(v); + + return 0; + +} /* ----- End of main() ----- */ + diff --git a/program/fwed/etc/default_apn.conf b/program/fwed/etc/default_apn.conf new file mode 100644 index 0000000..6ad590d --- /dev/null +++ b/program/fwed/etc/default_apn.conf @@ -0,0 +1,741 @@ +[202-01] carrier='Cosmote Wireless Internet' apn='internet' uid='' pwd='' +[202-05] carrier='Vf Mobile Internet' apn='internet.vodafone.gr' uid='' pwd='' +[202-10] carrier='Wind Internet' apn='gint.b-online.gr' uid='' pwd='' +[204-04] carrier='Vodafone NL' apn='live.vodafone.com' uid='vodafone' pwd='vodafone' +[204-08] carrier='KPN Internet' apn='portalmmm.nl' uid='' pwd='' +[204-12] carrier='Telfort Internet' apn='internet' uid='' pwd='' +[204-16] carrier='T-Mobile Internet' apn='internet' uid='' pwd='' +[204-20] carrier='Rabo Mobiel' apn='rabo.plus' uid='' pwd='' +[206-01] carrier='Proximus Internet' apn='internet.proximus.be' uid='' pwd='' +[206-01] carrier='Telenet Internet' apn='telenetwap.be' uid='' pwd='' +[206-05] carrier='Telenet' apn='telenetwap.be' uid='' pwd='' +[206-10] carrier='Mobistar' apn='mworld.be' uid='mobistar' pwd='mobistar' +[206-20] carrier='Base' apn='gprs.base.be' uid='base' pwd='base' +[208-01] carrier='Orange World' apn='orange' uid='orange' pwd='orange' +[208-01] carrier='Orange Entreprise' apn='orange-mib' uid='orange' pwd='orange' +[208-01] carrier='Orange Internet' apn='orange.fr' uid='orange' pwd='orange' +[208-01] carrier='Orange Internet Entreprise' apn='internet-entreprise' uid='orange' pwd='orange' +[208-10] carrier='SFR webphone' apn='sl2sfr' uid='' pwd='' +[208-10] carrier='SFR Mobile' apn='wapsfr' uid='' pwd='' +[208-10] carrier='NRJWEB' apn='fnetnrj' uid='' pwd='' +[208-01] carrier='VM WAP' apn='ofnew.fr' uid='orange' pwd='orange' +[208-01] carrier='Tele2 WAP' apn='ofnew.fr' uid='orange' pwd='orange' +[208-01] carrier='Carrefour WAP' apn='ofnew.fr' uid='orange' pwd='orange' +[208-10] carrier='Auchan WAP' apn='wap65' uid='' pwd='' +[208-01] carrier='NRJWEB' apn='ofnew.fr' uid='orange' pwd='orange' +[208-10] carrier='WAP Simplicime' apn='wapdebitel' uid='' pwd='' +[208-10] carrier='WAP LeclercMobile' apn='wap66' uid='' pwd='' +[208-10] carrier='Coriolis WAP' apn='wapcoriolis' uid='' pwd='' +[208-10] carrier='Keyyo Mobile Internet' apn='internet68' uid='' pwd='' +[208-10] carrier='WEB La Poste Mobile' apn='wapdebitel' uid='' pwd='' +[214-01] carrier='Internet movil' apn='airtelwap.es' uid='wap@wap' pwd='wap125' +[214-03] carrier='Orange Internet M�vil' apn='orangeworld' uid='orange' pwd='orange' +[214-03] carrier='Orange Internet PC' apn='internet' uid='orange' pwd='orange' +[214-04] carrier='Yoigo Navegador' apn='internet' uid='' pwd='' +[214-06] carrier='INTERNET GPRS' apn='airtelnet.es' uid='vodafone' pwd='vodafone' +[214-06] carrier='Euskaltel Internet' apn='internet.euskaltel.mobi' uid='CLIENTE' pwd='EUSKALTEL' +[214-06] carrier='Internet R' apn='internet.mundo-r.com' uid='' pwd='' +[214-06] carrier='TeleCable Internet' apn='internet.telecable.es' uid='telecable' pwd='telecable' +[214-07] carrier='Movistar' apn='telefonica.es' uid='telefonica' pwd='telefonica' +[214-07] carrier='Conexi�n compartida' apn='movistar.es' uid='MOVISTAR' pwd='MOVISTAR' +[214-08] carrier='Euskaltel Internet' apn='internet.euskaltel.mobi' uid='CLIENTE' pwd='EUSKALTEL' +[214-16] carrier='TeleCable Internet' apn='internet.telecable.es' uid='telecable' pwd='telecable' +[216-01] carrier='Telenor Online' apn='online' uid='' pwd='' +[216-30] carrier='Web' apn='wnw' uid='' pwd='' +[216-70] carrier='VF internet' apn='internet.vodafone.net' uid='' pwd='' +[216-70] carrier='VMAX Internet' apn='vitamax.internet.vodafone.net' uid='' pwd='' +[218-03] carrier='HT Eronet' apn='wap.eronet.ba' uid='' pwd='' +[218-05] carrier='m:tel' apn='3g1' uid='' pwd='' +[218-90] carrier='Bh Mobile' apn='active.bhmobile.ba' uid='' pwd='' +[219-01] carrier='T-Mobile' apn='web.htgprs' uid='' pwd='' +[219-02] carrier='Tele2' apn='internet.tele2.hr' uid='' pwd='' +[219-10] carrier='Broadband' apn='data.vip.hr' uid='38591' pwd='38591' +[220-01] carrier='Telenor WAP' apn='internet' uid='telenor' pwd='gprs' +[220-02] carrier='Telenor MNE internet' apn='internet' uid='gprs' pwd='gprs' +[220-03] carrier='mt:s wap' apn='gprswap' uid='mts' pwd='64' +[220-04] carrier='T-Mobile Internet' apn='tmcg-wnw' uid='38267' pwd='38267' +[220-05] carrier='Vip GPRS' apn='vipmobile' uid='vipmobile' pwd='vipmobile' +[222-01] carrier='TIM WAP' apn='wap.tim.it' uid='WAPTIM' pwd='WAPTIM' +[222-01] carrier='TIM WEB' apn='ibox.tim.it' uid='' pwd='' +[222-10] carrier='Vodafone Internet' apn='mobile.vodafone.it' uid='' pwd='' +[222-10] carrier='Vodafone WEB' apn='web.omnitel.it' uid='' pwd='' +[222-88] carrier='WIND WEB' apn='internet.wind' uid='' pwd='' +[222-88] carrier='WIND BIZ WEB' apn='internet.wind.biz' uid='' pwd='' +[222-99] carrier='3' apn='tre.it' uid='' pwd='' +[222-99] carrier='Fastweb WEB' apn=' apn.fastweb.it' uid='' pwd='' +[226-01] carrier='Vodafone live!' apn='live.vodafone.com' uid='live' pwd='vodafone' +[226-01] carrier='Vodafone live! PRE' apn='live.pre.vodafone.com' uid='live' pwd='vodafone' +[226-03] carrier='Cosmote Internet' apn='internet' uid='' pwd='' +[226-03] carrier='web'n'walk' apn='wnw' uid='wnw' pwd='wnw' +[226-06] carrier='web'n'walk' apn='wnw' uid='wnw' pwd='wnw' +[226-10] carrier='Orange WAP' apn='wap' uid='' pwd='' +[226-10] carrier='Orange Internet' apn='net' uid='' pwd='' +[228-01] carrier='Swisscom Services' apn='gprs.swisscom.ch' uid='' pwd='' +[228-02] carrier='Sunrise live' apn='internet' uid='' pwd='' +[228-03] carrier='Orange Internet' apn='internet' uid='' pwd='' +[230-01] carrier='T-Mobile CZ' apn='internet.t-mobile.cz' uid='wap' pwd='wap' +[230-02] carrier='O2 internet' apn='internet' uid='' pwd='' +[230-03] carrier='GPRS Web' apn='internet' uid='' pwd='' +[231-01] carrier='Orange SK' apn='internet' uid='' pwd='' +[231-01] carrier='Orange World' apn='orangewap' uid='wap' pwd='wap' +[231-02] carrier='T-Mobile internet' apn='internet' uid='' pwd='' +[231-06] carrier='O2 internet' apn='o2internet' uid='' pwd='' +[232-01] carrier='A1' apn='a1.net' uid='ppp@a1plus.at' pwd='ppp' +[232-01] carrier='aonMobil' apn='aon.at' uid='mobil@aon.at' pwd='ppp' +[232-03] carrier='T-Mobile Internet' apn='gprsinternet' uid='t-mobile' pwd='tm' +[232-05] carrier='Orange Smartphone' apn='orange.smartphone' uid='web' pwd='web' +[232-07] carrier='tele.ring web' apn='web' uid='web@telering.at' pwd='web' +[232-10] carrier='Planet3' apn='drei.at' uid='' pwd='' +[232-11] carrier='data.bob' apn='bob.at' uid='data@bob.at' pwd='ppp' +[232-12] carrier='YESSS! GPRS' apn='web.yesss.at' uid='' pwd='' +[234-01] carrier='UBIQUISYS' apn='internet' uid='' pwd='' +[234-02] carrier='O2 MOBILE WEB' apn='mobile.o2.co.uk' uid='O2web' pwd='O2web' +[234-10] carrier='O2 Mobile Web' apn='mobile.o2.co.uk' uid='o2web' pwd='password' +[234-10] carrier='O2 PREPAY' apn='payandgo.o2.co.uk' uid='payandgo' pwd='password' +[234-10] carrier='TESCO' apn='prepay.tesco-mobile.com' uid='tescowap' pwd='password' +[234-11] carrier='O2 MOBILE WEB' apn='mobile.o2.co.uk' uid='O2web' pwd='O2web' +[234-11] carrier='O2 MOBILE WEB' apn='mobile.o2.co.uk' uid='O2web' pwd='O2web' +[234-15] carrier='Vodafone UK' apn='wap.vodafone.co.uk' uid='wap' pwd='wap' +[234-15] carrier='Vodafone UK Prepay' apn='pp.vodafone.co.uk' uid='wap' pwd='wap' +[234-20] carrier='3' apn='three.co.uk' uid='' pwd='' +[234-30] carrier='T-Mobile UK' apn='general.t-mobile.uk' uid='t-mobile' pwd='tm' +[234-30] carrier='Virgin Media' apn='goto.virginmobile.uk' uid='user' pwd='' +[234-31] carrier='T-Mobile Internet' apn='general.t-mobile.uk' uid='t-mobile' pwd='tm' +[234-31] carrier='T-Mobile Picture Message' apn='general.t-mobile.uk' uid='t-mobile' pwd='tm' +[234-32] carrier='T-Mobile Internet' apn='general.t-mobile.uk' uid='t-mobile' pwd='tm' +[234-32] carrier='T-Mobile Picture Message' apn='general.t-mobile.uk' uid='t-mobile' pwd='tm' +[234-33] carrier='Orange Internet' apn='orangeinternet' uid='' pwd='' +[234-33] carrier='Consumer Broadband' apn='consumerbroadband' uid='' pwd='' +[234-34] carrier='Orange internet' apn='orangeinternet' uid='' pwd='' +[234-50] carrier='pepperWEB (Jersey)' apn='pepper' uid='' pwd='' +[234-55] carrier='C&W Guernsey Internet' apn='internet' uid='' pwd='' +[234-58] carrier='3G HSDPA' apn='3gpronto' uid='' pwd='' +[234-58] carrier='Manx Telecom Contract WEB' apn='web.manxpronto.net' uid='gprs' pwd='gprs' +[234-86] carrier='Orange internet' apn='orangeinternet' uid='' pwd='' +[238-01] carrier='TDC' apn='internet' uid='' pwd='' +[238-01] carrier='TDC Song WAP' apn='internet.no' uid='' pwd='' +[238-01] carrier='TDC WAP' apn='wap' uid='' pwd='' +[238-01] carrier='Telmore Wap' apn='wap' uid='' pwd='' +[238-02] carrier='Telenor Internet' apn='Internet' uid='' pwd='' +[238-06] carrier='3' apn='data.tre.dk' uid='' pwd='' +[238-20] carrier='Internet' apn='websp' uid='' pwd='' +[238-20] carrier='Telia Internet' apn='www.internet.mtelia.dk' uid='' pwd='' +[238-77] carrier='Telenor Internet' apn='Internet' uid='' pwd='' +[240-01] carrier='Telia SE WAP' apn='online.telia.se' uid='' pwd='' +[240-17] carrier='Halebop Internet' apn='halebop.telia.se' uid='' pwd='' +[240-02] carrier='3' apn='data.tre.se' uid='' pwd='' +[240-04] carrier='Telenor Mobilsurf' apn='services.telenor.se' uid='' pwd='' +[240-06] carrier='Telenor Mobilsurf' apn='services.telenor.se' uid='' pwd='' +[240-07] carrier='Tele2' apn='internet.tele2.no' uid='' pwd='' +[240-07] carrier='Tele2' apn='internet.tele2.se' uid='' pwd='' +[240-08] carrier='Telenor Mobilsurf' apn='services.telenor.se' uid='' pwd='' +[240-09] carrier='TelenorMobilsurf' apn='services.telenor.se' uid='' pwd='' +[240-10] carrier='Spring data' apn='data.springmobil.se' uid='' pwd='' +[242-01] carrier='Ventelo Internett' apn='internet.ventelo.no' uid='' pwd='' +[242-01] carrier='Telenor' apn='telenor' uid='' pwd='' +[242-02] carrier='NetCom Internett' apn='wap' uid='' pwd='' +[242-04] carrier='Tele2 Internett' apn='internet.tele2.no' uid='' pwd='' +[242-05] carrier='NwN Internet' apn='internet' uid='' pwd='' +[244-03] carrier='DNA Internet' apn='internet' uid='' pwd='' +[244-04] carrier='DNA Internet' apn='internet' uid='' pwd='' +[244-05] carrier='Elisa Internet' apn='internet' uid='' pwd='' +[244-10] carrier='TDC Internet' apn='internet.song.fi' uid='song@internet' pwd='songnet' +[244-12] carrier='DNA Pro Internet' apn='dnapro.fi' uid='' pwd='' +[244-12] carrier='TDC Internet Finland' apn='inet.tdc.fi' uid='' pwd='' +[244-13] carrier='DNA Internet' apn='internet' uid='' pwd='' +[244-21] carrier='Saunalahti Internet' apn='internet.saunalahti' uid='' pwd='' +[244-91] carrier='SONERA Internet' apn='internet' uid='' pwd='' +[246-01] carrier='Omnitel Internet' apn='omnitel' uid='omni' pwd='omni' +[246-02] carrier='Bite LT WAP' apn='wap' uid='' pwd='' +[246-03] carrier='Tele2 Internet LT' apn='internet.tele2.lt' uid='wap' pwd='wap' +[247-01] carrier='LMT Internet' apn='internet.lmt.lv' uid='' pwd='' +[247-02] carrier='Tele2 LV Internet' apn='internet.tele2.lv' uid='wap' pwd='wap' +[247-05] carrier='Bite LV Internet' apn='internet' uid='' pwd='' +[247-05] carrier='Bite LV WAP' apn='wap' uid='' pwd='' +[248-01] carrier='EMT Internet' apn='internet.emt.ee' uid='' pwd='' +[248-01] carrier='EMT WAP' apn='wap.emt.ee' uid='' pwd='' +[248-02] carrier='Elisa Internet' apn='internet' uid='' pwd='' +[248-02] carrier='Elisa WAP' apn='wap' uid='' pwd='' +[248-03] carrier='Tele2 Internet' apn='internet.tele2.ee' uid='' pwd='' +[250-01] carrier='MTS Internet' apn='internet.mts.ru' uid='mts' pwd='mts' +[250-02] carrier='Megafon Internet' apn='internet' uid='gdata' pwd='gdata' +[250-99] carrier='Beeline Internet' apn='internet.beeline.ru' uid='beeline' pwd='beeline' +[250-20] carrier='TELE2 Internet' apn='internet.tele2.ru' uid='' pwd='' +[255-01] carrier='MTS-internet' apn='internet' uid='' pwd='' +[255-02] carrier='Beeline-internet' apn='internet.beeline.ua' uid='' pwd='' +[255-03] carrier='Kyivstar Internet' apn='www.kyivstar.net' uid='' pwd='' +[255-06] carrier='life:) internet' apn='internet' uid='' pwd='' +[255-07] carrier='Utel Internet' apn='3g.utel.ua' uid='' pwd='' +[260-01] carrier='Plus Internet' apn='internet' uid='' pwd='' +[260-02] carrier='T-mobile.pl' apn='internet' uid='' pwd='' +[260-02] carrier='heyahinternet' apn='heyah.pl' uid='' pwd='' +[260-03] carrier='Internet' apn='Internet' uid='internet' pwd='internet' +[260-06] carrier='P4 Internet' apn='internet' uid='' pwd='' +[262-01] carrier='T-Mobile Internet' apn='internet.t-mobile' uid='t-mobile' pwd='tm' +[262-02] carrier='Vodafone DE' apn='web.vodafone.de' uid='' pwd='' +[262-03] carrier='E-Plus Web GPRS' apn='internet.eplus.de' uid='eplus' pwd='internet' +[262-07] carrier='o2' apn='internet' uid='' pwd='' +[262-07] carrier='o2 Internet Prepaid' apn='pinternet.interkom.de' uid='' pwd='' +[268-01] carrier='Vodafone Net2' apn='net2.vodafone.pt' uid='vodafone' pwd='vodafone' +[268-03] carrier='Optimus Internet' apn='umts' uid='' pwd='' +[268-06] carrier='tmn internet' apn='internet' uid='' pwd='' +[270-01] carrier='LUXGSM WAP' apn='wap.pt.lu' uid='wap' pwd='wap' +[270-77] carrier='Tango WAP' apn='internet' uid='tango' pwd='tango' +[270-99] carrier='Vox Mobile' apn='vox.lu' uid='' pwd='' +[272-01] carrier='Vodafone IE' apn='live.vodafone.com' uid='' pwd='' +[272-02] carrier='O2 Ireland' apn='internet' uid='' pwd='' +[272-03] carrier='Meteor Data' apn='data.mymeteor.ie' uid='' pwd='' +[272-05] carrier='3' apn='3ireland.ie' uid='' pwd='' +[272-11] carrier='Tesco' apn='tescomobile.liffeytelecom.com' uid='' pwd='' +[274-01] carrier='Siminn Internet' apn='internet' uid='' pwd='' +[274-02] carrier='Vodafone Internet' apn='gprs.is' uid='' pwd='' +[274-11] carrier='Net Nova' apn='net.nova.is' uid='' pwd='' +[278-01] carrier='Vodafone MT' apn='internet' uid='internet' pwd='internet' +[280-01] carrier='CYTA' apn='cytamobile' uid='user' pwd='pass' +[280-10] carrier='MTN Wap' apn='wap' uid='wap' pwd='wap' +[284-01] carrier='M-Tel' apn='wap-gprs.mtel.bg' uid='' pwd='' +[284-03] carrier='Vivacom WAP' apn='wap.vivacom.bg' uid='wap' pwd='wap' +[284-05] carrier='GPRS GLOBUL' apn='globul' uid='' pwd='' +[286-01] carrier='Turkcell Internet' apn='internet' uid='gprs' pwd='gprs' +[286-02] carrier='Vodafone Internet' apn='internet' uid='vodafone' pwd='vodafone' +[286-03] carrier='Avea Internet' apn='internet' uid='wap' pwd='wap' +[290-01] carrier='Tele Internet' apn='internet' uid='' pwd='' +[293-40] carrier='Vodafone live!' apn='internet.simobil.si' uid='simobil' pwd='internet' +[293-41] carrier='Planet' apn='internet' uid='mobitel' pwd='internet' +[294-01] carrier='T-Mobile MK Internet' apn='internet' uid='internet' pwd='t-mobile' +[294-02] carrier='Cosmofon' apn='Internet' uid='Internet' pwd='Internet' +[294-03] carrier='Internet' apn='vipoperator' uid='vipoperator' pwd='vipoperator' +[297-02] carrier='T-Mobile Internet' apn='tmcg-wnw' uid='38267' pwd='38267' +[302-220] carrier='TELUS' apn='sp.telus.com' uid='' pwd='' +[302-320] carrier='MOWAP' apn='wap.davewireless.com' uid='' pwd='' +[302-370] carrier='Fido Internet' apn='fido-core-appl1.apn' uid='' pwd='' +[302-370] carrier='Fido Tethering' apn='isp.fido.apn' uid='' pwd='' +[302-720] carrier='Chatr Internet' apn='chatrweb.apn' uid='' pwd='' +[302-490] carrier='Wind CA' apn='internet.windmobile.ca' uid='' pwd='' +[302-500] carrier='Videotron' apn='media.videotron' uid='' pwd='' +[302-610] carrier='Bell Internet' apn='pda.bell.ca' uid='' pwd='' +[302-720] carrier='Rogers Tethering' apn='isp.apn' uid='' pwd='' +[302-720] carrier='Rogers' apn='rogers-core-appl1.apn' uid='' pwd='' +[302-780] carrier='SaskTel' apn='pda.stm.sk.ca' uid='' pwd='' +[310-30] carrier='Internet' apn='private.centennialwireless.com' uid='privuser' pwd='priv' +[310-90] carrier='Internet' apn='isp' uid='' pwd='' +[310-100] carrier='PLATWEB' apn='plateauweb' uid='' pwd='' +[310-160] carrier='T-Mobile US 160' apn='epc.tmobile.com' uid='' pwd='' +[310-170] carrier='DataConnect' apn='isp.cingular' uid='' pwd='' +[310-200] carrier='T-Mobile US 200' apn='epc.tmobile.com' uid='' pwd='' +[310-210] carrier='T-Mobile US 210' apn='epc.tmobile.com' uid='' pwd='' +[310-220] carrier='T-Mobile US 220' apn='epc.tmobile.com' uid='' pwd='' +[310-230] carrier='T-Mobile US 230' apn='epc.tmobile.com' uid='' pwd='' +[310-240] carrier='T-Mobile US 240' apn='epc.tmobile.com' uid='' pwd='' +[310-250] carrier='T-Mobile US 250' apn='epc.tmobile.com' uid='' pwd='' +[310-260] carrier='T-Mobile US' apn='epc.tmobile.com' uid='' pwd='' +[310-270] carrier='T-Mobile US 270' apn='epc.tmobile.com' uid='' pwd='' +[310-310] carrier='T-Mobile US 310' apn='epc.tmobile.com' uid='' pwd='' +[310-380] carrier='Cingular 380 ATT' apn='proxy' uid='' pwd='' +[310-410] carrier='Cingular 410' apn='wap.cingular' uid='WAP@CINGULARGPRS.COM' pwd='CINGULAR1' +[310-470] carrier='DataConnect' apn='isp.cingular' uid='' pwd='' +[310-470] carrier='MediaNet' apn='wap.cingular' uid='WAP@CINGULARGPRS.COM' pwd='CINGULAR1' +[310-480] carrier='DataConnect' apn='isp.cingular' uid='' pwd='' +[310-480] carrier='MediaNet' apn='wap.cingular' uid='WAP@CINGULARGPRS.COM' pwd='CINGULAR1' +[310-490] carrier='T-Mobile US 490' apn='epc.tmobile.com' uid='' pwd='' +[310-490] carrier='GoodCall Picture Message' apn='good.call' uid='' pwd='' +[310-580] carrier='T-Mobile US 580' apn='epc.tmobile.com' uid='' pwd='' +[310-610] carrier='EpicINT' apn='internet.epictouch' uid='' pwd='' +[310-660] carrier='T-Mobile US 660' apn='epc.tmobile.com' uid='' pwd='' +[310-770] carrier='WEB 2' apn='i2.iwireless.com' uid='' pwd='' +[310-770] carrier='Picture Messaging' apn='wap1.iwireless.com' uid='' pwd='' +[310-770] carrier='PIAPicture Messaging' apn='wap9.iwireless.com' uid='' pwd='' +[310-800] carrier='T-Mobile US 800' apn='epc.tmobile.com' uid='' pwd='' +[310-840] carrier='Internet' apn='isp' uid='' pwd='' +[310-910] carrier='WOW_WAP' apn='wap.firstcellular.com' uid='' pwd='' +[311-210] carrier='Farmers GPRS' apn='internet.farmerswireless.com' uid='' pwd='' +[330-110] carrier='INTERNET CLARO' apn='internet.claropr.com' uid='' pwd='' +[334-20] carrier='Internet' apn='internet.itelcel.com' uid='webgprs' pwd='webgprs2002' +[334-03] carrier='movistar Internet' apn='internet.movistar.mx' uid='movistar' pwd='movistar' +[334-30] carrier='movistar Internet' apn='internet.movistar.mx' uid='movistar' pwd='movistar' +[334-50] carrier='Iusacell Internet' apn='web.iusacellgsm.mx' uid='Iusacellgsm' pwd='Iusacellgsm' +[338-50] carrier='INTERNET Digicel' apn='web.digiceljamaica.com' uid='' pwd='' +[338-18] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[338-70] carrier='Claro Web' apn='internet.ideasclaro.com.jm' uid='' pwd='' +[338-180] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[340-01] carrier='Orange World Cara�be' apn='orangewap' uid='orange' pwd='wap' +[340-20] carrier='Digicel FR' apn='wap.digicelfr.com' uid='wap' pwd='wap' +[342-60] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[344-92] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[346-14] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[348-17] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[352-11] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[354-86] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[356-11] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[358-11] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[360-11] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[363-02] carrier='INTERNET Aruba' apn='web.digicelaruba.com' uid='' pwd='' +[363-20] carrier='INTERNET Aruba' apn='web.digicelaruba.com' uid='' pwd='' +[365-84] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[366-11] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[368-01] carrier='Internet' apn='internet' uid='' pwd='' +[370-01] carrier='Orange net' apn='orangenet.com.do' uid='' pwd='' +[370-02] carrier='INTERNET CLARO' apn='internet.ideasclaro.com.do' uid='' pwd='' +[370-04] carrier='Viva Edge' apn='edge.viva.net.do' uid='viva' pwd='viva' +[374-12] carrier='Bmobile internet' apn='internet' uid='' pwd='' +[374-120] carrier='Bmobile internet' apn='internet' uid='' pwd='' +[374-121] carrier='Bmobile internet' apn='internet' uid='' pwd='' +[374-122] carrier='Bmobile internet' apn='internet' uid='' pwd='' +[374-123] carrier='Bmobile internet' apn='internet' uid='' pwd='' +[374-124] carrier='Bmobile internet' apn='internet' uid='' pwd='' +[374-125] carrier='Bmobile internet' apn='internet' uid='' pwd='' +[374-126] carrier='Bmobile internet' apn='internet' uid='' pwd='' +[374-127] carrier='Bmobile internet' apn='internet' uid='' pwd='' +[374-128] carrier='Bmobile internet' apn='internet' uid='' pwd='' +[374-129] carrier='Bmobile internet' apn='internet' uid='' pwd='' +[374-13] carrier='INTERNET Trinidad' apn='web.digiceltt.com' uid='' pwd='' +[374-130] carrier='INTERNET Trinidad' apn='web.digiceltt.com' uid='' pwd='' +[376-35] carrier='Lime Internet Postpaid' apn='internet' uid='' pwd='' +[401-01] carrier='Beeline Internet' apn='internet.beeline.kz' uid='@internet.beeline' pwd='beeline' +[401-02] carrier='Kcell Internet' apn='internet' uid='' pwd='' +[401-77] carrier='Tele2 Internet' apn='internet' uid='' pwd='' +[404-01] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-02] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-03] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-04] carrier='IDEA' apn='internet' uid='' pwd='' +[404-05] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-07] carrier='IDEA' apn='internet' uid='' pwd='' +[404-09] carrier='Reliance RTel' apn='SMARTNET' uid='' pwd='' +[404-10] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-11] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-12] carrier='IDEA' apn='internet' uid='' pwd='' +[404-13] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-14] carrier='IDEA Punjab' apn='spicegprs' uid='' pwd='' +[404-15] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-16] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-17] carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd='' +[404-18] carrier='Reliance RTel' apn='SMARTNET' uid='' pwd='' +[404-19] carrier='IDEA' apn='internet' uid='' pwd='' +[404-20] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-21] carrier='Loop Mobile' apn='www' uid='' pwd='' +[404-22] carrier='IDEA' apn='internet' uid='' pwd='' +[404-24] carrier='IDEA' apn='internet' uid='' pwd='' +[404-25] carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd='' +[404-27] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-28] carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd='' +[404-29] carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd='' +[404-30] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-31] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-33] carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd='' +[404-34] carrier='Cellone_North' apn='bsnlnet' uid='' pwd='' +[404-35] carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd='' +[404-36] carrier='Reliance RTel' apn='SMARTNET' uid='' pwd='' +[404-37] carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd='' +[404-38] carrier='CellOne_Kolkata' apn='bsnlnet' uid='' pwd='' +[404-40] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-41] carrier='AIRCEL TN' apn='aircelgprs.po' uid='' pwd='' +[404-42] carrier='AIRCEL TN' apn='aircelgprs.po' uid='' pwd='' +[404-43] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-44] carrier='IDEA Karnataka' apn='simplyinternet' uid='' pwd='' +[404-45] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-46] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-49] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-50] carrier='Reliance RTel' apn='SMARTNET' uid='' pwd='' +[404-51] carrier='Cellone_North' apn='bsnlnet' uid='' pwd='' +[404-52] carrier='Reliance RTel' apn='SMARTNET' uid='' pwd='' +[404-53] carrier='Cellone_North' apn='bsnlnet' uid='' pwd='' +[404-54] carrier='Cellone_North' apn='bsnlnet' uid='' pwd='' +[404-55] carrier='Cellone_North' apn='bsnlnet' uid='' pwd='' +[404-56] carrier='IDEA' apn='internet' uid='' pwd='' +[404-57] carrier='Cellone_West' apn='bsnlnet' uid='' pwd='' +[404-58] carrier='Cellone_West' apn='bsnlnet' uid='' pwd='' +[404-59] carrier='Cellone_North' apn='bsnlnet' uid='' pwd='' +[404-60] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-62] carrier='Cellone_North' apn='bsnlnet' uid='' pwd='' +[404-64] carrier='CellOne_South' apn='bsnlnet' uid='' pwd='' +[404-66] carrier='Cellone_West' apn='bsnlnet' uid='' pwd='' +[404-67] carrier='Reliance RTel' apn='SMARTNET' uid='' pwd='' +[404-68] carrier='Dolphin_Delhi' apn='gprsmtnldel' uid='mtnl' pwd='mtnl123' +[404-68] carrier='Dolphin_Delhi_3G' apn='mtnl3g' uid='mtnl' pwd='mtnl123' +[404-69] carrier='Dolphin_Mumbai' apn='gprsmtnlmum' uid='mtnl' pwd='mtnl123' +[404-69] carrier='Dolphin_Mumbai_3G' apn='mtnl3g' uid='mtnl' pwd='mtnl123' +[404-70] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-71] carrier='CellOne_South' apn='bsnlnet' uid='' pwd='' +[404-72] carrier='CellOne_South' apn='bsnlnet' uid='' pwd='' +[404-73] carrier='CellOne_South' apn='bsnlnet' uid='' pwd='' +[404-74] carrier='CellOne_Kolkata' apn='bsnlnet' uid='' pwd='' +[404-75] carrier='CellOne_Kolkata' apn='bsnlnet' uid='' pwd='' +[404-76] carrier='CellOne_Kolkata' apn='bsnlnet' uid='' pwd='' +[404-77] carrier='CellOne_Kolkata' apn='bsnlnet' uid='' pwd='' +[404-78] carrier='IDEA' apn='internet' uid='' pwd='' +[404-79] carrier='CellOne_South' apn='bsnlnet' uid='' pwd='' +[404-80] carrier='CellOne_South' apn='bsnlnet' uid='' pwd='' +[404-81] carrier='CellOne_Kolkata' apn='bsnlnet' uid='' pwd='' +[404-82] carrier='IDEA' apn='internet' uid='' pwd='' +[404-83] carrier='Reliance RTel' apn='SMARTNET' uid='' pwd='' +[404-84] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-85] carrier='Reliance RTel' apn='SMARTNET' uid='' pwd='' +[404-86] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-87] carrier='IDEA' apn='internet' uid='' pwd='' +[404-88] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[404-89] carrier='IDEA' apn='internet' uid='' pwd='' +[404-90] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-91] carrier='AIRCEL NE' apn='aircelwebpost' uid='' pwd='' +[404-92] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-93] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-94] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-95] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-96] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-97] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[404-98] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[405-01] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-03] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-04] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-05] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-06] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-07] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-08] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-09] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-10] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-11] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-12] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-13] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-14] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-15] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-17] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-18] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-19] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-20] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-21] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-22] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-23] carrier='Reliance RCOM' apn='rcomnet' uid='' pwd='' +[405-25] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-26] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-27] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-28] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-29] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-30] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-31] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-32] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-33] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-34] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-35] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-36] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-37] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-38] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-39] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-40] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-41] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-42] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-43] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-44] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-45] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-46] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-47] carrier='TataDOCOMO' apn='TATA.DOCOMO.INTERNET' uid='' pwd='' +[405-51] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[405-52] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[405-53] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[405-54] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[405-55] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[405-56] carrier='Airtel' apn='airtelgprs.com' uid='' pwd='' +[405-66] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[405-67] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[405-70] carrier='IDEA' apn='internet' uid='' pwd='' +[405-750] carrier='Vodafone Connect' apn='jkgprs' uid='' pwd='' +[405-750] carrier='VodafoneLive!' apn='vodafonelivejk' uid='' pwd='' +[405-751] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[405-752] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[405-753] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[405-754] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[405-755] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[405-756] carrier='Vodafone Connect' apn='www' uid='' pwd='' +[405-799] carrier='IDEA' apn='internet' uid='' pwd='' +[405-800] carrier='AIRCEL ROI' apn='aircelgprs' uid='' pwd='' +[405-801] carrier='AIRCEL South' apn='aircelgprs' uid='' pwd='' +[405-802] carrier='AIRCEL Central' apn='aircelgprs' uid='' pwd='' +[405-803] carrier='AIRCEL South' apn='aircelgprs' uid='' pwd='' +[405-804] carrier='AIRCEL ROI' apn='aircelgprs' uid='' pwd='' +[405-805] carrier='AIRCEL ROI' apn='aircelgprs' uid='' pwd='' +[405-806] carrier='AIRCEL Central' apn='aircelgprs' uid='' pwd='' +[405-807] carrier='AIRCEL Central' apn='aircelgprs' uid='' pwd='' +[405-808] carrier='AIRCEL Central' apn='aircelgprs' uid='' pwd='' +[405-809] carrier='AIRCEL South' apn='aircelgprs' uid='' pwd='' +[405-810] carrier='AIRCEL ROI' apn='aircelgprs' uid='' pwd='' +[405-811] carrier='AIRCEL ROI' apn='aircelgprs' uid='' pwd='' +[405-812] carrier='AIRCEL Central' apn='aircelgprs' uid='' pwd='' +[405-813] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-814] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-815] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-816] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-817] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-818] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-819] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-820] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-821] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-822] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-823] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-824] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-825] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-826] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-827] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-828] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-829] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-830] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-831] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-832] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-833] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-834] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-835] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-836] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-837] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-838] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-839] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-840] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-841] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-842] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-843] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[405-844] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-845] carrier='IDEA' apn='internet' uid='' pwd='' +[405-846] carrier='IDEA' apn='internet' uid='' pwd='' +[405-847] carrier='IDEA' apn='internet' uid='' pwd='' +[405-848] carrier='IDEA' apn='internet' uid='' pwd='' +[405-849] carrier='IDEA' apn='internet' uid='' pwd='' +[405-850] carrier='IDEA' apn='internet' uid='' pwd='' +[405-851] carrier='IDEA' apn='internet' uid='' pwd='' +[405-852] carrier='IDEA' apn='internet' uid='' pwd='' +[405-853] carrier='IDEA' apn='internet' uid='' pwd='' +[405-875] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-876] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-877] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-878] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-879] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-880] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-881] carrier='STEL' apn='gprs.stel.in' uid='' pwd='' +[405-882] carrier='STEL' apn='gprs.stel.in' uid='' pwd='' +[405-883] carrier='STEL' apn='gprs.stel.in' uid='' pwd='' +[405-884] carrier='STEL' apn='gprs.stel.in' uid='' pwd='' +[405-885] carrier='STEL' apn='gprs.stel.in' uid='' pwd='' +[405-886] carrier='STEL' apn='gprs.stel.in' uid='' pwd='' +[405-908] carrier='IDEA' apn='internet' uid='' pwd='' +[405-909] carrier='IDEA' apn='internet' uid='' pwd='' +[405-910] carrier='IDEA' apn='internet' uid='' pwd='' +[405-911] carrier='IDEA' apn='internet' uid='' pwd='' +[405-925] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-926] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-927] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-928] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-929] carrier='Uninor GPRS' apn='uninor' uid='' pwd='' +[405-932] carrier='Videocon' apn='vinternet.com' uid='' pwd='' +[410-01] carrier='Mobilink WAP GPRS' apn='connect.mobilinkworld.com' uid='Mobilink' pwd='Mobilink' +[410-03] carrier='Ufone WAP' apn='Ufone.internet' uid='' pwd='' +[410-04] carrier='ZONG WAP' apn='zonginternet' uid='' pwd='' +[410-06] carrier='Telenor WAP' apn='internet' uid='' pwd='' +[410-07] carrier='Warid WAP' apn='Wap.warid' uid='' pwd='' +[415-01] carrier='Alfa Internet' apn='internet.mic1.com.lb' uid='mic1' pwd='mic1' +[415-03] carrier='MTC Touch GPRS' apn='gprs.mtctouch.com.lb' uid='' pwd='' +[416-01] carrier='Zain JO Internet Postpaid' apn='internet' uid='' pwd='' +[416-01] carrier='Zain JO Internet Prepaid' apn='internetpre' uid='zain' pwd='zain' +[416-03] carrier='umniahinternet Postpaid' apn='internet' uid='' pwd='' +[416-03] carrier='umniah Prepaid' apn='net' uid='' pwd='' +[416-77] carrier='Orange Internet' apn='net.orange.jo' uid='net' pwd='net' +[419-02] carrier='ZAIN MI' apn='pps' uid='pps' pwd='pps' +[419-03] carrier='INTERNET ACTION' apn='action.wataniya.com' uid='' pwd='' +[419-04] carrier='VIVA Internet' apn='VIVA' uid='' pwd='' +[420-01] carrier='JAWALNet' apn='jawalnet.com.sa' uid='' pwd='' +[420-03] carrier='mobily Net Prepaid' apn='web2' uid='' pwd='' +[420-03] carrier='mobily Net Postpaid' apn='web1' uid='' pwd='' +[420-04] carrier='zain-gprs' apn='zain' uid='' pwd='' +[422-02] carrier='Oman Mobile Internet' apn='taif' uid='taif' pwd='taif' +[422-03] carrier='Nawras GPRS' apn='isp.nawras.com.om' uid='' pwd='' +[424-02] carrier='DATA Package' apn='etisalat.ae' uid='' pwd='' +[424-03] carrier='du' apn='du' uid='' pwd='' +[425-01] carrier='3G Portal' apn='uwap.orange.co.il' uid='' pwd='' +[425-01] carrier='Internet 3G' apn='modem.orange.net.il' uid='' pwd='' +[425-02] carrier='Cellcom Internet' apn='Sphone' uid='' pwd='' +[425-03] carrier='Sphone Pelephone' apn='sphone.pelephone.net.il' uid='pcl@3g' pwd='pcl' +[426-01] carrier='Internet' apn='internet.batelco.com' uid='' pwd='' +[426-02] carrier='Zain Internet' apn='connect.mobilinkworld.com' uid='Mobilink' pwd='Mobilink' +[426-04] carrier='VIVAGPRS' apn='viva.bh' uid='' pwd='' +[427-01] carrier='Qtel GPRS' apn='gprs.qtel' uid='gprs' pwd='gprs' +[427-02] carrier='VFQ Mobile Internet' apn='web.vodafone.com.qa' uid='' pwd='' +[440-10] carrier='sp???' apn='spmode.ne.jp' uid='' pwd='' +[440-10] carrier='mopera U(?????????)' apn='mpr2.bizho.net' uid='' pwd='' +[440-10] carrier='mopera U??' apn='0120.mopera.net' uid='' pwd='' +[450-05] carrier='SK Telecom (Roaming)' apn='roaming.sktelecom.com' uid='' pwd='' +[450-05] carrier='SK Telecom' apn='web.sktelecom.com' uid='' pwd='' +[450-08] carrier='KT-HSDPA' apn='alwayson-r6.ktfwing.com' uid='' pwd='' +[452-04] carrier='Viettel Email' apn='v-internet' uid='' pwd='' +[452-05] carrier='Vietnamobile Email' apn='internet' uid='' pwd='' +[452-07] carrier='BEELINE Email' apn='internet' uid='' pwd='' +[452-08] carrier='EVNTelecom Email' apn='e-internet' uid='' pwd='' +[454-00] carrier='CSL Data' apn='hkcsl' uid='' pwd='' +[454-02] carrier='CSL Data' apn='hkcsl' uid='' pwd='' +[454-03] carrier='3' apn='mobile.three.com.hk' uid='' pwd='' +[454-04] carrier='3-DB-GPRS' apn='web-g.three.com.hk' uid='' pwd='' +[454-06] carrier='SmarTone HK' apn='SmarTone' uid='' pwd='' +[454-10] carrier='CSL Data' apn='hkcsl' uid='' pwd='' +[454-12] carrier='CMHK GPRS' apn='peoples.net' uid='' pwd='' +[454-16] carrier='PCCW_GPRS' apn='pccwdata' uid='' pwd='' +[454-18] carrier='CSL Data' apn='hkcsl' uid='' pwd='' +[454-19] carrier='PCCW 3G' apn='pccw' uid='' pwd='' +[455-00] carrier='SmarTone MAC' apn='smartgprs' uid='' pwd='' +[455-01] carrier='CTM' apn='ctm-mobile' uid='' pwd='' +[455-03] carrier='3 Macau' apn='web-g.three.com.hk' uid='hutchison' pwd='1234' +[455-04] carrier='CTM' apn='ctm-mobile' uid='' pwd='' +[460-00] carrier='China Mobile' apn='cmnet' uid='' pwd='' +[460-01] carrier='China Unicom' 3g_apn='3gnet' 3g_uid='' 3g_pwd='' apn='uninet' uid='' pwd='' +[460-02] carrier='China Mobile' apn='cmnet' uid='' pwd='' +[460-03] carrier='China Telecom' apn='ctnet' uid='' pwd='' +[460-07] carrier='China Mobile' apn='cmnet' uid='' pwd='' +[466-01] carrier='????(Far EasTone) (Internet)' apn='internet' uid='' pwd='' +[466-88] carrier='????(KGT-Online) (Internet)' apn='internet' uid='' pwd='' +[466-89] carrier='????(VIBO)' apn='vibo' uid='' pwd='' +[466-92] carrier='????(Chunghwa) (Internet)' apn='internet' uid='' pwd='' +[466-92] carrier='????(Chunghwa)' apn='emome' uid='' pwd='' +[466-93] carrier='?????(TW Mobile) (Internet)' apn='internet' uid='' pwd='' +[466-93] carrier='?????(TW Mobile) (twm)' apn='TWM' uid='' pwd='' +[466-97] carrier='?????(TW Mobile) (Internet)' apn='internet' uid='' pwd='' +[466-97] carrier='?????(TW Mobile) (twm)' apn='TWM' uid='' pwd='' +[466-99] carrier='?????(TW Mobile) (Internet)' apn='internet' uid='' pwd='' +[466-99] carrier='?????(TW Mobile) (twm)' apn='TWM' uid='' pwd='' +[502-12] carrier='Maxis 3G Internet' 3g_apn='unet' 3g_uid='maxis' 3g_pwd='wap' apn='net' uid='maxis' pwd='wap' +[502-16] carrier='DiGi Internet' 3g_apn='diginet' 3g_uid='' 3g_pwd='' apn='diginet' uid='' pwd='' +[502-18] carrier='U Mobile Internet' 3g_apn='my3g' 3g_uid='' 3g_pwd='' apn='my3g' uid='' pwd='' +[502-19] carrier='Celcom 3G Internet' 3g_apn='celcom3g' 3g_uid='' 3g_pwd='' apn='celcom.net.my' uid='' pwd='' +[505-01] carrier='Telstra Internet' apn='telstra.wap' uid='' pwd='' +[505-02] carrier='Optus Yes Internet' apn='yesinternet' uid='' pwd='' +[505-03] carrier='Vodafone live!' apn='live.vodafone.com' uid='' pwd='' +[505-06] carrier='Planet 3' apn='3services' uid='' pwd='' +[505-07] carrier='VF AU PXT' apn='live.vodafone.com' uid='' pwd='' +[505-07] carrier='VF Internet' apn='vfinternet.au' uid='' pwd='' +[505-11] carrier='Telstra Internet' apn='Telstra.wap' uid='' pwd='' +[505-12] carrier='3Internet' apn='3netaccess' uid='' pwd='' +[505-12] carrier='3' apn='3services' uid='' pwd='' +[505-71] carrier='Telstra Internet' apn='Telstra.wap' uid='' pwd='' +[505-72] carrier='Telstra Internet' apn='Telstra.wap' uid='' pwd='' +[505-88] carrier='VF AU PXT' apn='live.vodafone.com' uid='' pwd='' +[505-88] carrier='VF Internet' apn='vfinternet.au' uid='' pwd='' +[505-90] carrier='Optus Internet' apn='internet' uid='' pwd='' +[510-01] carrier='ISAT BB INTERNET' apn='indosat3g' uid='indosat' pwd='indosat' +[510-01] carrier='ISAT WAP' apn='indosatgprs' uid='indosat' pwd='indosat' +[510-08] carrier='AXISinternet' apn='AXIS' uid='AXIS' pwd='123456' +[510-10] carrier='Telkomsel GPRS WEB' apn='internet' uid='wap' pwd='wap123' +[510-11] carrier='XL GPRS' apn='www.xlgprs.net' uid='xlgprs' pwd='proxl' +[510-11] carrier='XL Unlimited' apn='xlunlimited' uid='' pwd='' +[510-21] carrier='ISAT M3 INTERNET' apn='indosatgprs' uid='indosat' pwd='indosat' +[510-89] carrier='3 GPRS' apn='3gprs' uid='3gprs' pwd='3gprs' +[515-02] carrier='myGlobe Internet Postpaid' apn='internet.globe.com.ph' uid='' pwd='' +[515-02] carrier='myGlobe Internet Prepaid' apn='http.globe.com.ph' uid='' pwd='' +[515-03] carrier='Smart Internet' apn='internet' uid='' pwd='' +[515-05] carrier='SUN INTERNET' apn='minternet' uid='' pwd='' +[515-18] carrier='RED INTERNET' apn='redinternet' uid='' pwd='' +[520-01] carrier='AIS Internet' apn='internet' uid='' pwd='' +[520-18] carrier='DTAC Internet' apn='www.dtac.co.th' uid='' pwd='' +[520-99] carrier='True GPRS Inet' apn='internet' uid='TRUE' pwd='TRUE' +[525-01] carrier='IDEAS E-mail' apn='e-ideas' uid='' pwd='' +[525-02] carrier='IDEAS E-mail' apn='e-ideas' uid='' pwd='' +[525-03] carrier='M1 E-mail' apn='sunsurf' uid='65' pwd='' +[525-05] carrier='StarHub' apn='internet' uid='' pwd='' +[525-05] carrier='Gee!' apn='shwap' uid='star' pwd='hub' +[525-05] carrier='StarHub E-mail' apn='shwap' uid='' pwd='' +[530-01] carrier='VFNZ PXT' apn='live.vodafone.com' uid='' pwd='' +[530-01] carrier='VFNZ Internet' apn='www.vodafone.net.nz' uid='' pwd='' +[530-05] carrier='TelecomDefault' apn='wap.telecom.co.nz' uid='' pwd='' +[530-24] carrier='2degrees Internet' apn='internet' uid='' pwd='' +[602-01] carrier='Mobinil Web' apn='MobinilWeb' uid='' pwd='' +[602-02] carrier='VF internet' apn='internet.vodafone.net' uid='internet' pwd='internet' +[602-03] carrier='Etisalat internet' apn='Etisalat' uid='' pwd='' +[605-01] carrier='weborange' apn='weborange' uid='' pwd='' +[605-02] carrier='mobinet' apn='gprs.tn' uid='gprs' pwd='gprs' +[605-03] carrier='internet Tunisiana' apn='internet.tunisiana.com' uid='internet' pwd='internet' +[621-20] carrier='Zain Mobile Internet' apn='internet.ng.Zain.com' uid='' pwd='' +[621-30] carrier='MTN GPRS' apn='web.gprs.mtnnigeria.net' uid='web' pwd='web' +[621-50] carrier='glo direct' apn='glosecure' uid='gprs' pwd='gprs' +[621-60] carrier='Etisalat Internet' apn='etisalat' uid='' pwd='' +[639-02] carrier='SafaricomBrowse' apn='Safaricom' uid='saf' pwd='data' +[639-03] carrier='Zain WAP' apn='wap.ke.celtel.com' uid='wap' pwd='wap' +[639-07] carrier='Orange Internet' apn='wap.orange.co.ke' uid='' pwd='' +[640-04] carrier='Vodacom WAP' apn='Wap' uid='' pwd='' +[647-00] carrier='Orange World re' apn='orangerun' uid='orange' pwd='orange' +[647-10] carrier='GPRS SRR' apn='wapsfr' uid='wap' pwd='wap' +[651-01] carrier='VCL Internet GPRS' apn='internet' uid='' pwd='' +[655-01] carrier='Vodacom' apn='internet' uid='' pwd='' +[655-02] carrier='8.ta internet' apn='internet' uid='' pwd='' +[655-07] carrier='Smartdata' apn='internet' uid='' pwd='' +[655-07] carrier='virgin_internet' apn='vdata' uid='' pwd='' +[655-10] carrier='MTN Data' apn='myMTN' uid='mtn' pwd='' +[704-01] carrier='INTERNET CLARO' apn='internet.ideasclaro' uid='' pwd='' +[704-02] carrier='BROADBAND TIGO' apn='broadband.tigo.gt' uid='' pwd='' +[704-03] carrier='Internet GT' apn='internet.movistar.gt' uid='movistargt' pwd='movistargt' +[704-30] carrier='Internet GT' apn='internet.movistar.gt' uid='movistargt' pwd='movistargt' +[706-01] carrier='INTERNET CLARO' apn='internet.ideasclaro' uid='' pwd='' +[706-02] carrier='El Salvaldor Digicel' apn='web.digicelsv.com' uid='' pwd='' +[706-03] carrier='BROADBAND TIGO' apn='broadband.tigo.sv' uid='' pwd='' +[706-04] carrier='Internet SV' apn='internet.movistar.sv' uid='movistarsv' pwd='movistarsv' +[706-40] carrier='Internet SV' apn='internet.movistar.sv' uid='movistarsv' pwd='movistarsv' +[708-01] carrier='Internet Claro' apn='web.megatel.hn' uid='webmegatel' pwd='webmegatel' +[708-02] carrier='INTERNET TIGO' apn='internet.tigo.hn' uid='' pwd='' +[708-20] carrier='INTERNET TIGO' apn='internet.tigo.hn' uid='' pwd='' +[710-21] carrier='INTERNET' apn='web.emovil' uid='webemovil' pwd='webemovil' +[710-300] carrier='Internet GPRS' apn='internet.movistar.ni' uid='movistarni' pwd='movistarni' +[710-730] carrier='INTERNET' apn='web.emovil' uid='webemovil' pwd='webemovil' +[712-01] carrier='Kolbi' apn='kolbi3g' uid='' pwd='' +[712-01] carrier='Multimedia' apn='kolbi3g' uid='' pwd='' +[712-02] carrier='Kolbi' apn='kolbi3g' uid='' pwd='' +[712-02] carrier='Multimedia' apn='kolbi3g' uid='' pwd='' +[712-03] carrier='INTERNET CLARO' apn='internet.ideasclaro' uid='' pwd='' +[712-04] carrier='movistar INTERNET' apn='internet.movistar.cr' uid='movistarcr' pwd='movistarcr' +[714-01] carrier='Wap' apn=' apn01.cwpanama.com.pa' uid='' pwd='' +[714-01] carrier='Mms' apn=' apn02.cwpanama.com.pa' uid='' pwd='' +[714-20] carrier='movistar INTERNET' apn='internet.movistar.pa' uid='movistarpa' pwd='movistarpa' +[714-03] carrier='WEB Claro' apn='web.claro.com.pa' uid='CLAROWEB' pwd='CLAROWEB' +[714-04] carrier='INTERNET Panama' apn='web.digicelpanama.com' uid='' pwd='' +[716-06] carrier='movistar Internet' apn='movistar.pe' uid='movistar@datos' pwd='movistar' +[716-10] carrier='CLARO DATOS' apn='claro.pe' uid='claro' pwd='claro' +[722-07] carrier='Movistar Emoci�n' apn='wap.gprs.unifon.com.ar' uid='wap' pwd='wap' +[722-31] carrier='Claro AR' apn='igprs.claro.com.ar' uid='ctigprs' pwd='ctigprs999' +[722-310] carrier='Claro AR' apn='igprs.claro.com.ar' uid='ctigprs' pwd='ctigprs999' +[722-34] carrier='Personal Datos' apn='datos.personal.com' uid='gprs' pwd='adgj' +[722-341] carrier='Personal Datos' apn='datos.personal.com' uid='gprs' pwd='adgj' +[724-02] carrier='TIM Connect' apn='timbrasil.br' uid='tim' pwd='tim' +[724-03] carrier='TIM Connect' apn='timbrasil.br' uid='tim' pwd='tim' +[724-04] carrier='TIM Connect' apn='timbrasil.br' uid='tim' pwd='tim' +[724-05] carrier='Java Session' apn='java.claro.com.br' uid='claro' pwd='claro' +[724-06] carrier='Vivo Internet' apn='zap.vivo.com.br' uid='vivo' pwd='vivo' +[724-07] carrier='SCTL GPRS' apn='sercomtel.com.br' uid='sercomtel' pwd='sercomtel' +[724-10] carrier='Vivo Internet' apn='zap.vivo.com.br' uid='vivo' pwd='vivo' +[724-11] carrier='Vivo Internet' apn='zap.vivo.com.br' uid='vivo' pwd='vivo' +[724-16] carrier='BrT Modem' apn='brt.br' uid='brt' pwd='brt' +[724-19] carrier='TelemigC GPRS' apn='gprs.telemigcelular.com.br' uid='celular' pwd='celular' +[724-23] carrier='Vivo Internet' apn='zap.vivo.com.br' uid='vivo' pwd='vivo' +[724-24] carrier='Amaz�niaC GPRS' apn='gprs.amazoniacelular.com.br' uid='celular' pwd='celular' +[724-31] carrier='OI GPRS' apn='gprs.oi.com.br' uid='' pwd='' +[730-01] carrier='Internet Movil' apn='bam.entelpcs.cl' uid='entelpcs' pwd='entelpcs' +[730-10] carrier='Internet Movil' apn='bam.entelpcs.cl' uid='entelpcs' pwd='entelpcs' +[730-02] carrier='NEM' apn='wap.tmovil.cl' uid='wap' pwd='wap' +[730-03] carrier='BAM Claro' apn='bam.clarochile.cl' uid='clarochile' pwd='clarochile' +[730-07] carrier='web' apn='web.gtdmovil.cl' uid='webgtd' pwd='webgtd' +[730-08] carrier='Internet' apn='movil.vtr.com' uid='vtrmovil' pwd='vtrmovil' +[730-08] carrier='Wap' apn='wap.vtr.com' uid='' pwd='' +[730-08] carrier='Bam' apn='bam.vtr.com' uid='vtr' pwd='vtr' +[730-10] carrier='Internet Movil' apn='bam.entelpcs.cl' uid='entelpcs' pwd='entelpcs' +[732-101] carrier='WEB Comcel 3GSM' apn='internet.comcel.com.co' uid='COMCELWEB' pwd='COMCELWEB' +[732-103] carrier='TIGO WEB' apn='web.colombiamovil.com.co' uid='' pwd='' +[732-111] carrier='TIGO WEB' apn='web.colombiamovil.com.co' uid='' pwd='' +[732-123] carrier='movistar INTERNET' apn='internet.movistar.com.co' uid='movistar' pwd='movistar' +[734-01] carrier='Digitel GSM' apn='gprsweb.digitel.ve' uid='' pwd='' +[734-02] carrier='Digitel GSM' apn='gprsweb.digitel.ve' uid='' pwd='' +[734-03] carrier='Digitel GSM' apn='gprsweb.digitel.ve' uid='' pwd='' +[734-04] carrier='movistar INTERNET' apn='internet.movistar.ve' uid='' pwd='' +[734-04] carrier='movistar WAP' apn='wap.movistar.ve' uid='' pwd='' +[734-06] carrier='MODEM' apn='int.movilnet.com.ve' uid='' pwd='' +[736-01] carrier='VIVA3G' apn='internet.nuevatel.com' uid='' pwd='' +[736-02] carrier='ENTEL WAP GPRS' apn='wap.movil.com.bo' uid='' pwd='' +[736-03] carrier='WAPTIGO' apn='wap.tigo.bo' uid='' pwd='' +[740-00] carrier='movistar INTERNET' apn='internet.movistar.com.ec' uid='movistar' pwd='movistar' +[740-01] carrier='Claro Internet' apn='internet.porta.com.ec' uid='' pwd='' +[740-10] carrier='Claro Internet' apn='internet.porta.com.ec' uid='' pwd='' +[740-02] carrier='ALEGRO 3G' apn='internet3gsp.alegro.net.ec' uid='' pwd='' +[744-01] carrier='VOX INTERNET' apn='vox.internet' uid='' pwd='' +[744-02] carrier='Claro PY' apn='igprs.claro.com.py' uid='ctigprs' pwd='ctigprs999' +[744-04] carrier='TIGO PY' apn='internet.tigo.py' uid='' pwd='' +[744-05] carrier='Personal Datos Py' apn='internet' uid='personal' pwd='personal' +[748-01] carrier='wapANCEL' apn='wap' uid='' pwd='' +[748-01] carrier='gprsANCEL' apn='gprs.ancel' uid='' pwd='' +[748-07] carrier='Movistar Emoci�n' apn='webapn.movistar.com.uy' uid='movistar' pwd='movistar' +[748-10] carrier='Claro UY' apn='igprs.claro.com.uy' uid='ctigprs' pwd='ctigprs999' diff --git a/program/fwed/fwe_entry.c b/program/fwed/fwe_entry.c new file mode 100644 index 0000000..a4fc006 --- /dev/null +++ b/program/fwed/fwe_entry.c @@ -0,0 +1,96 @@ +/********************************************************************************* + * Copyright: (C) Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: fw_entry.c + * Description: This is the FWE(FL2440 Worker Engine) applets(such as gsmd, + * gpsd, zigbeed) main entry point function. + * + * Version: 1.0.0(01/13/2013~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "01/13/2013 02:40:36 PM" + * + ********************************************************************************/ + +#include "fwe_entry.h" +#include "gsmd.h" +#include "gpsd.h" +#include "zigd.h" + +FWE_APPLET applets_list[] = +{ + {"gsmd", gsmd_main}, + {"gpsd", gpsd_main}, + {"zigd", zigd_main}, + {0, 0} +}; + +static void entry_usage(void); +static void print_applist(void); + +int main(int argc, char **argv) +{ + FWE_APPLET *app = NULL; + const char *applet_name = NULL; + int ind = 0; + + applet_name = basename(argv[0]); + + /* Run command like "FWE gsmd" */ + if( !strncmp(applet_name, FWE_ENTRY_NAME, 4) ) + { + if(argv[1] && argv[1][0]!='-') + { + applet_name = basename(argv[1]); + ind = 1; + } + else + { + entry_usage(); + return 0; + } + } + + for(app=(FWE_APPLET *)&applets_list; app->name; app++) + { + if(!strcmp (app->name, applet_name) && app->main) + { + return app->main(argc-ind, argv+ind); + } + } + + printf("%s: applet not found\n\n", applet_name); + print_applist(); + + return 0; +} + +static void print_applist(void) +{ + FWE_APPLET *app; + + printf("Currently defined applets:\n"); + for(app=(FWE_APPLET *)&applets_list; app->name; app++) + { + printf("%s ", app->name); + } + printf("\n"); +} + +/* Just print the help information */ +static void entry_usage(void) +{ + banner(FWE_ENTRY_NAME); + + printf("Usage: %s [applet] [arguments]...\n", FWE_ENTRY_NAME); + printf(" or: applet [arguments]...\n"); + + printf("\n\t%s is a multi-call binary that combines many FL2440 Work Engine(FWE) applets\n", FWE_ENTRY_NAME); + printf("\tinto a single executable. We can create a symbolic link to %s for each applet\n",FWE_ENTRY_NAME); + printf("\tlike busybox work.\n\n"); + + print_applist(); + printf("\n"); + + return ; +} diff --git a/program/fwed/fwe_entry.h b/program/fwed/fwe_entry.h new file mode 100644 index 0000000..e40efa3 --- /dev/null +++ b/program/fwed/fwe_entry.h @@ -0,0 +1,39 @@ +/******************************************************************************** + * Copyright: (C) 2013 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: fwe_entry.h + * Description: This head file + * + * Version: 1.0.0(01/13/2013~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "01/13/2013 02:53:41 PM" + * + ********************************************************************************/ + +#ifndef __FWE_ENTRY_H_ +#define __FWE_ENTRY_H_ + +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> +#include <stdarg.h> +#include <stddef.h> +#include <string.h> +#include <pthread.h> + +#include "version.h" + +#define FWE_ENTRY_NAME "fwed" + +typedef int (APPLET_MAIN)(int argc, char **argv); + +typedef struct __FWE_APPLET +{ + char *name; + APPLET_MAIN *main; +} FWE_APPLET; + + + +#endif /* end of __FWE_ENTRY_H_ */ diff --git a/program/fwed/gpsd/gpsd.c b/program/fwed/gpsd/gpsd.c new file mode 100644 index 0000000..7183167 --- /dev/null +++ b/program/fwed/gpsd/gpsd.c @@ -0,0 +1,211 @@ +/********************************************************************************* + * Copyright: (C) Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: gpsd.c + * Description: This is the RWME(Radiation Monitor Works Engine) gpsd applet entry point + * + * Version: 1.0.0(01/13/2013~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "01/13/2013 02:40:36 PM" + * + ********************************************************************************/ +#include "gpsd.h" +#include "cp_hal.h" +#include "cp_time.h" + +static void usage_gpsd(const char *progname) +{ + banner(progname); + + printf("Usage: %s [OPTION]...\n", progname); + printf(" %s is a daemon program running on the device to locate the device\n", progname); + + printf("\nMandatory arguments to long options are mandatory for short options too:\n"); + printf(" -d[debug ] Running in debug mode\n"); + printf(" -l[level ] Set the log level as [0..%d]\n", LOG_LEVEL_MAX-1); + printf(" -h[help ] Display this help information\n"); + printf(" -v[version ] Display the program version\n"); + + return; +} + +int init_gpsd_context(GPSD_CONTEX *gps) +{ + log_info("Initialize gpsd context.\n"); + + gps->pwr_status = POWER_OFF; + + nmea_zero_INFO(&(gps->info)); + + /* Initialize the GPS dataport pointer */ + gps->comport = comport_init(GPS_DATAPORT, 9600, "8N1N"); + if(NULL == gps->comport) + { + log_err("Initialise GPS data port %s on 9600 with 8N1N failure\n", GPS_DATAPORT); + return -1; + } + + if( comport_open(gps->comport) < 0) + { + log_err("Open GPS data port %s on 9600 with 8N1N failure\n", GPS_DATAPORT); + return -2; + } + + log_dbg("Open GPS data port %s on 9600 with 8N1N successfully\n", GPS_DATAPORT); + return 0; +} + +void term_gpsd_context(GPSD_CONTEX *gps) +{ + comport_term(gps->comport); + +#if 0 + if( ON== hal_get_gps_power()) + { + hal_turn_gps_power(OFF); + } +#endif + + return ; +} + + + +int start_gpsd_service(GPSD_CONTEX *gps) +{ + int len; + char buf[1024]; + + while( !g_cp_signal.stop ) + { + if( OFF== (gps->pwr_status=hal_get_gps_power()) ) + { + hal_turn_gps_power(ON); + continue; + } + + memset(buf, 0, sizeof(buf)); + if( (len=comport_recv(gps->comport, buf, sizeof(buf), 3000)) > 0) + { + /* Data sample: + * $GPGGA,081803.000,3029.9100,N,11423.2012,E,1,05,1.6,38.7,M,-13.7,M,,0000*4C + * $GPGSA,A,3,18,24,21,22,15,,,,,,,,3.1,1.6,2.7*3A + * $GPRMC,081803.000,A,3029.9100,N,11423.2012,E,1.14,126.38,210113,,,A*62 + */ + nmea_parse(buf, len, &(gps->info)); + log_nrml("GPS get UTC time: %d-%d-%d %d:%d:%d.%d\n", gps->info.utc.year+1900, gps->info.utc.mon+1, gps->info.utc.day, + gps->info.utc.hour+8, gps->info.utc.min, gps->info.utc.sec, gps->info.utc.hsec); + log_nrml("GPS Sig[%d] Latitude:[%f] Longitude:[%f]\n", gps->info.sig, gps->info.lat, gps->info.lon); + } + + micro_second_sleep(100); + } + + return 0; +} + +int gpsd_main(int argc, char **argv) +{ + int opt; + int rv = 0; + int debug = 0; + char pid_file[64] = { 0 }; /* The file used to record the PID */ + const char *progname=NULL; + char *log_file = GPSD_DEF_LOG_FILE; + int log_level = GPSD_DEF_LOG_LEVEL; + cp_logger *logger = NULL; + GPSD_CONTEX gpsd_ctx; + + struct option long_options[] = { + {"debug", no_argument, NULL, 'd'}, + {"level", required_argument, NULL, 'l'}, + {"version", no_argument, NULL, 'v'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} + }; + + progname = basename(argv[0]); + + /* Parser the command line parameters */ + while ((opt = getopt_long(argc, argv, "dl:vh", long_options, NULL)) != -1) + { + switch (opt) + { + case 'd': /* Set debug running */ + debug = 1; + log_file = DBG_LOG_FILE; + break; + + case 'l': /* Set the log level */ + log_level = atoi(optarg); + break; + + case 'v': /* Get software version */ + banner(progname); /* Defined in version.h */ + return EXIT_SUCCESS; + + case 'h': /* Get help information */ + usage_gpsd(progname); + return 0; + + default: + break; + } /* end of "switch(opt)" */ + } + + if( !debug ) + { + snprintf(pid_file, sizeof(pid_file), "%s/%s.pid", PID_FILE_PATH, progname); + if( check_daemon_running(pid_file) ) + { + printf("Programe already running, exit now.\n"); + return -1; + } + } + + if ( !(logger=cp_log_init(NULL, log_file, log_level, GPSD_LOG_FILE_SIZE)) ) + { + printf("Logger initialize failure with file: %s\n", logger->file); + return -1; + } + + if ( cp_log_open() ) + { + printf("Logger initialize failure with file: %s\n", logger->file); + return -1; + } + + if( !debug ) + { + if( set_daemon_running(pid_file) ) + { + log_fatal("Set program \"%s\" running as daemon failure.\n", progname); + goto CleanUp; + } + } + + cp_install_proc_signal(); + + if( init_gpsd_context(&gpsd_ctx) < 0 ) + { + log_fatal("Initialise gpsd work context failure, rv=%d\n", rv); + goto CleanUp; + } + + /* Start the GPS thread to locate the device */ + if( (rv=start_gpsd_service(&gpsd_ctx)) < 0) + { + log_fatal("Start PPP thread failure, rv=%d\n", rv); + goto CleanUp; + } + +CleanUp: + log_nrml("Terminate program \"%s\".\n", progname); + term_gpsd_context(&gpsd_ctx); + unlink(pid_file); + cp_log_term(); + return rv; +} + + diff --git a/program/fwed/gpsd/gpsd.h b/program/fwed/gpsd/gpsd.h new file mode 100644 index 0000000..d9d2407 --- /dev/null +++ b/program/fwed/gpsd/gpsd.h @@ -0,0 +1,52 @@ +/******************************************************************************** + * Copyright: (C) guowenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: gpsd.h + * Description: This is the rmwe(Radiation Moniter Worker Engine) gpsd applet head file + * + * Version: 1.0.0(02/02/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "02/02/2012 11:33:33 AM" + * + ********************************************************************************/ + +#ifndef __GPSD_H_ +#define __GPSD_H_ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <getopt.h> +#include <sys/types.h> +#include <signal.h> + +#include "cp_comport.h" +#include "cp_logger.h" +#include "cp_proc.h" +#include "nmea_info.h" +#include "version.h" + +#ifndef PID_FILE_PATH +#define PID_FILE_PATH "/var/run/" +#endif + +#define GPSD_DEF_LOG_FILE "/logs/gpsd.log" +#define GPSD_DEF_LOG_LEVEL LOG_LEVEL_NRML +#define GPSD_LOG_FILE_SIZE 12 /* Unit KiByte */ + +#define GPS_DATAPORT "/dev/ttyS4" + +#define POWER_OFF 0 +#define POWER_ON 1 + +typedef struct __GPSD_CONTEX +{ + unsigned char pwr_status; + nmeaINFO info; + COM_PORT *comport; +} GPSD_CONTEX; + +extern int gpsd_main(int argc, char **argv); + +#endif /* End of __GPSD_H_ */ diff --git a/program/fwed/gpsd/makefile b/program/fwed/gpsd/makefile new file mode 100644 index 0000000..8b3dcbf --- /dev/null +++ b/program/fwed/gpsd/makefile @@ -0,0 +1,95 @@ +#********************************************************************************* +# Copyright: (C) Guo Wenxue<guowenxue@gmail.com> +# All rights reserved. +# +# Filename: Makefile +# Description: This is the common subdir Makefile which to compile all the C +# source code to object files and then generate the shared or +# static library named lib$(FOLDER_NAME).a orlib $(FOLDER_NAME).so, +# which depends on the variable $LINK_MODE. +# +# Version: 1.0.0(01/13/2013~) +# Author: Guo Wenxue <guowenxue@gmail.com> +# ChangeLog: 1, Release initial version on "Sun Jan 13 14:44:36 CST 2013" +# +#********************************************************************************/ + +PWD=$(shell pwd) + +#If wanna compile in the subdir, not called by top makefile, uncomment it +ifneq (${TOP_COMPILE}, YES) +LOCAL_COMPILE=YES +endif + +LIBNAME=$(shell basename ${PWD}) +STALIB=lib${LIBNAME}.a +DYNLIB=lib${LIBNAME}.so + +VPATH= . +SRCS = $(wildcard ${VPATH}/*.c) +OBJS = $(patsubst %.c,%.o,$(SRCS)) + +#====================================================== +# ---> Doesn't call by top makefile, compile by local +#====================================================== +ifeq (${LOCAL_COMPILE}, YES) +#ARCH?=arm926t +ARCH?=i386 +CFLAGS+=-fPIC +TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]") +ifneq (,$(filter i386,$(TMP))) + CROSS_COMPILE= +else + CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux- +endif + +PRJDIR?=$(shell dirname ${PWD}) +CFLAGS+=-I${PRJDIR} +CC = ${CROSS_COMPILE}gcc +AR = ${CROSS_COMPILE}ar + +endif #End local compile + +ifeq ("${LINK_MODE}", "STATIC") + LIBS = ${STALIB} +else + LIBS=${DYNLIB} +endif + +all: entry ${LIBS} install + +entry: + @echo " "; + @echo " ========================================================="; + @echo " ** Compile subdir ${LIBNAME} for ${ARCH} "; + @echo " ========================================================="; + +#$(LD) -g --relocatable $(OBJS) -o lib${LIBNAME}.o +${STALIB}: $(OBJS) + $(AR) -rcu $@ $(OBJS) + +${DYNLIB}: $(OBJS) + $(CC) -fPIC -shared -o $@ $(OBJS) + +%.o : %.c + $(CC) -c $< $(CFLAGS) + +tag: + @ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R . + @cscope -Rbq + +install: + @if [ ! -z "${LIBS_PATH}" ] ; then \ + mkdir -p ${LIBS_PATH} ; \ + cp ${LIBS} ${LIBS_PATH}; \ + fi; + + +clean: + @rm -f *.o + @rm -rf *.gdb *.a *.so + +distclean: clean + @rm -f tags cscope* + +.PHONY: clean entry diff --git a/program/fwed/gpsd/nmea_info.c b/program/fwed/gpsd/nmea_info.c new file mode 100644 index 0000000..5214e3b --- /dev/null +++ b/program/fwed/gpsd/nmea_info.c @@ -0,0 +1,195 @@ +/* + * + * NMEA library + * URL: http://nmea.sourceforge.net + * Author: Tim (xtimor@gmail.com) + * Licence: http://www.gnu.org/licenses/lgpl.html + * $Id: sentence.c 17 2008-03-11 11:56:11Z xtimor $ + * + */ + +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <stdio.h> + +#include "nmea_parse.h" +#include "nmea_info.h" +#include "cp_logger.h" + +void nmea_zero_GPGGA(nmeaGPGGA *pack) +{ + memset(pack, 0, sizeof(nmeaGPGGA)); + nmea_time_now(&pack->utc); + pack->ns = 'N'; + pack->ew = 'E'; + pack->elv_units = 'M'; + pack->diff_units = 'M'; +} + +void nmea_zero_GPGSA(nmeaGPGSA *pack) +{ + memset(pack, 0, sizeof(nmeaGPGSA)); + pack->fix_mode = 'A'; + pack->fix_type = NMEA_FIX_BAD; +} + +void nmea_zero_GPGSV(nmeaGPGSV *pack) +{ + memset(pack, 0, sizeof(nmeaGPGSV)); +} + +void nmea_zero_GPRMC(nmeaGPRMC *pack) +{ + memset(pack, 0, sizeof(nmeaGPRMC)); + nmea_time_now(&pack->utc); + pack->status = 'V'; + pack->ns = 'N'; + pack->ew = 'E'; + pack->declin_ew = 'E'; +} + +void nmea_zero_GPVTG(nmeaGPVTG *pack) +{ + memset(pack, 0, sizeof(nmeaGPVTG)); + pack->dir_t = 'T'; + pack->dec_m = 'M'; + pack->spn_n = 'N'; + pack->spk_k = 'K'; +} + +void nmea_zero_INFO(nmeaINFO *info) +{ + memset(info, 0, sizeof(nmeaINFO)); + nmea_time_now(&info->utc); + info->sig = NMEA_SIG_BAD; + info->fix = NMEA_FIX_BAD; +} + +void nmea_time_now(nmeaTIME *stm) +{ + time_t lt; + struct tm *tt; + + time(<); + tt = gmtime(<); + + stm->year = tt->tm_year; + stm->mon = tt->tm_mon; + stm->day = tt->tm_mday; + stm->hour = tt->tm_hour; + stm->min = tt->tm_min; + stm->sec = tt->tm_sec; + stm->hsec = 0; +} + +/* buf sample: "$GPRMC,134325.000,A,3029.8871,N,11423.1932,E,0.26,258.74,210113,,,A*" */ +int nmea_parse_line(char *buf, int buf_sz, nmeaINFO *info) +{ + int type; + void *pack; + + type = nmea_pack_type(buf+1, buf_sz); /* Skip '$' */ + switch (type) + { + case GPGGA: + if( !(pack = malloc(sizeof(nmeaGPGGA))) ) + { + goto mem_fail; + } + + if( nmea_parse_GPGGA(buf, buf_sz, (nmeaGPGGA *)pack) ) + { + nmea_GPGGA2info(pack, info); + } + free(pack); + break; + + case GPGSA: + if( !(pack = malloc(sizeof(nmeaGPGSA))) ) + { + goto mem_fail; + } + + if( nmea_parse_GPGSA(buf, buf_sz, (nmeaGPGSA *)pack) ) + { + nmea_GPGSA2info(pack, info); + } + free(pack); + break; + + case GPGSV: + if( !(pack = malloc(sizeof(nmeaGPGSV))) ) + { + goto mem_fail; + } + + if( nmea_parse_GPGSV(buf, buf_sz, (nmeaGPGSV *)pack) ) + { + nmea_GPGSV2info(pack, info); + } + free(pack); + break; + + case GPRMC: + if( !(pack = malloc(sizeof(nmeaGPRMC))) ) + { + goto mem_fail; + } + + if( nmea_parse_GPRMC(buf, buf_sz, (nmeaGPRMC *)pack) ) + { + nmea_GPRMC2info(pack, info); + } + free(pack); + break; + + case GPVTG: + if( !(pack = malloc(sizeof(nmeaGPVTG))) ) + { + goto mem_fail; + } + + if( nmea_parse_GPVTG(buf, buf_sz, (nmeaGPVTG *)pack) ) + { + nmea_GPVTG2info(pack, info); + } + free(pack); + break; + + default: + break; + } + + return 0; + +mem_fail: + log_err("Insufficient memory!\n"); + return -1; +} + +int nmea_parse(char *data, int len, nmeaINFO *info) +{ + int line_len, nbytes; + char line[512]; + + while(len > 0) + { + memset(line, 0, sizeof(line)); + nbytes = nmea_get_item_line(data, len, line, &line_len); + + /* Not a integrated line */ + if( line_len< 0 ) + break; + + if( line_len > 0 ) + { + nmea_parse_line(line, line_len, info); + } + + data += nbytes; + len -= nbytes; + } + + return 0; +} diff --git a/program/fwed/gpsd/nmea_info.h b/program/fwed/gpsd/nmea_info.h new file mode 100644 index 0000000..573ca11 --- /dev/null +++ b/program/fwed/gpsd/nmea_info.h @@ -0,0 +1,234 @@ +/* + * + * NMEA library + * URL: http://nmea.sourceforge.net + * Author: Tim (xtimor@gmail.com) + * Licence: http://www.gnu.org/licenses/lgpl.html + * $Id: sentence.h 17 2008-03-11 11:56:11Z xtimor $ + * + */ + +/*! \file */ + +#ifndef __NMEA_INFO_H__ +#define __NMEA_INFO_H__ + +#define NMEA_SIG_BAD (0) +#define NMEA_SIG_LOW (1) +#define NMEA_SIG_MID (2) +#define NMEA_SIG_HIGH (3) + +#define NMEA_FIX_BAD (1) +#define NMEA_FIX_2D (2) +#define NMEA_FIX_3D (3) + +#define NMEA_MAXSAT (12) +#define NMEA_SATINPACK (4) +#define NMEA_NSATPACKS (NMEA_MAXSAT / NMEA_SATINPACK) + +#define NMEA_DEF_LAT (5001.2621) +#define NMEA_DEF_LON (3613.0595) + + + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Date and time data + * @see nmea_time_now + */ +typedef struct _nmeaTIME +{ + int year; /**< Years since 1900 */ + int mon; /**< Months since January - [0,11] */ + int day; /**< Day of the month - [1,31] */ + int hour; /**< Hours since midnight - [0,23] */ + int min; /**< Minutes after the hour - [0,59] */ + int sec; /**< Seconds after the minute - [0,59] */ + int hsec; /**< Hundredth part of second - [0,99] */ + +} nmeaTIME; + + +/** + * Position data in fractional degrees or radians + */ +typedef struct _nmeaPOS +{ + double lat; /**< Latitude */ + double lon; /**< Longitude */ + +} nmeaPOS; + +/** + * Information about satellite + * @see nmeaSATINFO + * @see nmeaGPGSV + */ +typedef struct _nmeaSATELLITE +{ + int id; /**< Satellite PRN number */ + int in_use; /**< Used in position fix */ + int elv; /**< Elevation in degrees, 90 maximum */ + int azimuth; /**< Azimuth, degrees from true north, 000 to 359 */ + int sig; /**< Signal, 00-99 dB */ + +} nmeaSATELLITE; + +/** + * Information about all satellites in view + * @see nmeaINFO + * @see nmeaGPGSV + */ +typedef struct _nmeaSATINFO +{ + int inuse; /**< Number of satellites in use (not those in view) */ + int inview; /**< Total number of satellites in view */ + nmeaSATELLITE sat[NMEA_MAXSAT]; /**< Satellites information */ + +} nmeaSATINFO; + +/** + * Summary GPS information from all parsed packets, + * used also for generating NMEA stream + * @see nmea_parse + * @see nmea_GPGGA2info, nmea_...2info + */ +typedef struct _nmeaINFO +{ + int smask; /**< Mask specifying types of packages from which data have been obtained */ + + nmeaTIME utc; /**< UTC of position */ + + int sig; /**< GPS quality indicator (0 = Invalid; 1 = Fix; 2 = Differential, 3 = Sensitive) */ + int fix; /**< Operating mode, used for navigation (1 = Fix not available; 2 = 2D; 3 = 3D) */ + + double PDOP; /**< Position Dilution Of Precision */ + double HDOP; /**< Horizontal Dilution Of Precision */ + double VDOP; /**< Vertical Dilution Of Precision */ + + double lat; /**< Latitude in NDEG - +/-[degree][min].[sec/60] */ + double lon; /**< Longitude in NDEG - +/-[degree][min].[sec/60] */ + double elv; /**< Antenna altitude above/below mean sea level (geoid) in meters */ + double speed; /**< Speed over the ground in kilometers/hour */ + double direction; /**< Track angle in degrees True */ + double declination; /**< Magnetic variation degrees (Easterly var. subtracts from true course) */ + + nmeaSATINFO satinfo; /**< Satellites information */ + +} nmeaINFO; + + + +/** + * NMEA packets type which parsed and generated by library + */ +enum nmeaPACKTYPE +{ + GPNON = 0x0000, /**< Unknown packet type. */ + GPGGA = 0x0001, /**< GGA - Essential fix data which provide 3D location and accuracy data. */ + GPGSA = 0x0002, /**< GSA - GPS receiver operating mode, SVs used for navigation, and DOP values. */ + GPGSV = 0x0004, /**< GSV - Number of SVs in view, PRN numbers, elevation, azimuth & SNR values. */ + GPRMC = 0x0008, /**< RMC - Recommended Minimum Specific GPS/TRANSIT Data. */ + GPVTG = 0x0010 /**< VTG - Actual track made good and speed over ground. */ +}; + +/** + * GGA packet information structure (Global Positioning System Fix Data) + */ +typedef struct _nmeaGPGGA +{ + nmeaTIME utc; /**< UTC of position (just time) */ + double lat; /**< Latitude in NDEG - [degree][min].[sec/60] */ + char ns; /**< [N]orth or [S]outh */ + double lon; /**< Longitude in NDEG - [degree][min].[sec/60] */ + char ew; /**< [E]ast or [W]est */ + int sig; /**< GPS quality indicator (0 = Invalid; 1 = Fix; 2 = Differential, 3 = Sensitive) */ + int satinuse; /**< Number of satellites in use (not those in view) */ + double HDOP; /**< Horizontal dilution of precision */ + double elv; /**< Antenna altitude above/below mean sea level (geoid) */ + char elv_units; /**< [M]eters (Antenna height unit) */ + double diff; /**< Geoidal separation (Diff. between WGS-84 earth ellipsoid and mean sea level. '-' = geoid is below WGS-84 ellipsoid) */ + char diff_units; /**< [M]eters (Units of geoidal separation) */ + double dgps_age; /**< Time in seconds since last DGPS update */ + int dgps_sid; /**< DGPS station ID number */ + +} nmeaGPGGA; + +/** + * GSA packet information structure (Satellite status) + */ +typedef struct _nmeaGPGSA +{ + char fix_mode; /**< Mode (M = Manual, forced to operate in 2D or 3D; A = Automatic, 3D/2D) */ + int fix_type; /**< Type, used for navigation (1 = Fix not available; 2 = 2D; 3 = 3D) */ + int sat_prn[NMEA_MAXSAT]; /**< PRNs of satellites used in position fix (null for unused fields) */ + double PDOP; /**< Dilution of precision */ + double HDOP; /**< Horizontal dilution of precision */ + double VDOP; /**< Vertical dilution of precision */ + +} nmeaGPGSA; + +/** + * GSV packet information structure (Satellites in view) + */ +typedef struct _nmeaGPGSV +{ + int pack_count; /**< Total number of messages of this type in this cycle */ + int pack_index; /**< Message number */ + int sat_count; /**< Total number of satellites in view */ + nmeaSATELLITE sat_data[NMEA_SATINPACK]; + +} nmeaGPGSV; + +/** + * RMC packet information structure (Recommended Minimum sentence C) + */ +typedef struct _nmeaGPRMC +{ + nmeaTIME utc; /**< UTC of position */ + char status; /**< Status (A = active or V = void) */ + double lat; /**< Latitude in NDEG - [degree][min].[sec/60] */ + char ns; /**< [N]orth or [S]outh */ + double lon; /**< Longitude in NDEG - [degree][min].[sec/60] */ + char ew; /**< [E]ast or [W]est */ + double speed; /**< Speed over the ground in knots */ + double direction; /**< Track angle in degrees True */ + double declination; /**< Magnetic variation degrees (Easterly var. subtracts from true course) */ + char declin_ew; /**< [E]ast or [W]est */ + char mode; /**< Mode indicator of fix type (A = autonomous, D = differential, E = estimated, N = not valid, S = simulator) */ + +} nmeaGPRMC; + +/** + * VTG packet information structure (Track made good and ground speed) + */ +typedef struct _nmeaGPVTG +{ + double dir; /**< True track made good (degrees) */ + char dir_t; /**< Fixed text 'T' indicates that track made good is relative to true north */ + double dec; /**< Magnetic track made good */ + char dec_m; /**< Fixed text 'M' */ + double spn; /**< Ground speed, knots */ + char spn_n; /**< Fixed text 'N' indicates that speed over ground is in knots */ + double spk; /**< Ground speed, kilometers per hour */ + char spk_k; /**< Fixed text 'K' indicates that speed over ground is in kilometers/hour */ + +} nmeaGPVTG; + +void nmea_zero_INFO(nmeaINFO *info); +void nmea_zero_GPGGA(nmeaGPGGA *pack); +void nmea_zero_GPGSA(nmeaGPGSA *pack); +void nmea_zero_GPGSV(nmeaGPGSV *pack); +void nmea_zero_GPRMC(nmeaGPRMC *pack); +void nmea_zero_GPVTG(nmeaGPVTG *pack); +void nmea_time_now(nmeaTIME *t); +int nmea_parse(char *buf, int len, nmeaINFO *info); + +#ifdef __cplusplus +} +#endif + +#endif /* __NMEA_INFO_H__ */ diff --git a/program/fwed/gpsd/nmea_parse.c b/program/fwed/gpsd/nmea_parse.c new file mode 100644 index 0000000..cdd3a83 --- /dev/null +++ b/program/fwed/gpsd/nmea_parse.c @@ -0,0 +1,681 @@ +/* + * + * NMEA library + * URL: http://nmea.sourceforge.net + * Author: Tim (xtimor@gmail.com) + * Licence: http://www.gnu.org/licenses/lgpl.html + * $Id: context.c 17 2008-03-11 11:56:11Z xtimor $ + * + */ +#include "nmea_parse.h" +#include "cp_logger.h" + +#include <assert.h> +#include <stdarg.h> +#include <stdlib.h> +#include <stdio.h> +#include <ctype.h> +#include <string.h> +#include <limits.h> + +#define NMEA_TOKS_COMPARE (1) +#define NMEA_TOKS_PERCENT (2) +#define NMEA_TOKS_WIDTH (3) +#define NMEA_TOKS_TYPE (4) + +/** + * \brief Convert string to number + */ +int nmea_atoi(const char *str, int str_sz, int radix) +{ + char *tmp_ptr; + char buff[NMEA_CONVSTR_BUF]; + int res = 0; + + if(str_sz < NMEA_CONVSTR_BUF) + { + memcpy(&buff[0], str, str_sz); + buff[str_sz] = '\0'; + res = strtol(&buff[0], &tmp_ptr, radix); + } + + return res; +} + +/** + * \brief Convert string to fraction number + */ +double nmea_atof(const char *str, int str_sz) +{ + char *tmp_ptr; + char buff[NMEA_CONVSTR_BUF]; + double res = 0; + + if(str_sz < NMEA_CONVSTR_BUF) + { + memcpy(&buff[0], str, str_sz); + buff[str_sz] = '\0'; + res = strtod(&buff[0], &tmp_ptr); + } + + return res; +} + +/** + * \brief Analyse string (specificate for NMEA sentences) + */ +int nmea_scanf(const char *buff, int buff_sz, const char *format, ...) +{ + const char *beg_tok; + const char *end_buf = buff + buff_sz; + + va_list arg_ptr; + int tok_type = NMEA_TOKS_COMPARE; + int width = 0; + const char *beg_fmt = 0; + int snum = 0, unum = 0; + + int tok_count = 0; + void *parg_target; + + va_start(arg_ptr, format); + + for(; *format && buff < end_buf; ++format) + { + switch(tok_type) + { + case NMEA_TOKS_COMPARE: + if('%' == *format) + tok_type = NMEA_TOKS_PERCENT; + else if(*buff++ != *format) + goto fail; + break; + case NMEA_TOKS_PERCENT: + width = 0; + beg_fmt = format; + tok_type = NMEA_TOKS_WIDTH; + case NMEA_TOKS_WIDTH: + if(isdigit(*format)) + break; + { + tok_type = NMEA_TOKS_TYPE; + if(format > beg_fmt) + width = nmea_atoi(beg_fmt, (int)(format - beg_fmt), 10); + } + case NMEA_TOKS_TYPE: + beg_tok = buff; + + if(!width && ('c' == *format || 'C' == *format) && *buff != format[1]) + width = 1; + + if(width) + { + if(buff + width <= end_buf) + buff += width; + else + goto fail; + } + else + { + if(!format[1] || (0 == (buff = (char *)memchr(buff, format[1], end_buf - buff)))) + buff = end_buf; + } + + if(buff > end_buf) + goto fail; + + tok_type = NMEA_TOKS_COMPARE; + tok_count++; + + parg_target = 0; width = (int)(buff - beg_tok); + + switch(*format) + { + case 'c': + case 'C': + parg_target = (void *)va_arg(arg_ptr, char *); + if(width && 0 != (parg_target)) + *((char *)parg_target) = *beg_tok; + break; + case 's': + case 'S': + parg_target = (void *)va_arg(arg_ptr, char *); + if(width && 0 != (parg_target)) + { + memcpy(parg_target, beg_tok, width); + ((char *)parg_target)[width] = '\0'; + } + break; + case 'f': + case 'g': + case 'G': + case 'e': + case 'E': + parg_target = (void *)va_arg(arg_ptr, double *); + if(width && 0 != (parg_target)) + *((double *)parg_target) = nmea_atof(beg_tok, width); + break; + }; + + if(parg_target) + break; + if(0 == (parg_target = (void *)va_arg(arg_ptr, int *))) + break; + if(!width) + break; + + switch(*format) + { + case 'd': + case 'i': + snum = nmea_atoi(beg_tok, width, 10); + memcpy(parg_target, &snum, sizeof(int)); + break; + case 'u': + unum = nmea_atoi(beg_tok, width, 10); + memcpy(parg_target, &unum, sizeof(unsigned int)); + break; + case 'x': + case 'X': + unum = nmea_atoi(beg_tok, width, 16); + memcpy(parg_target, &unum, sizeof(unsigned int)); + break; + case 'o': + unum = nmea_atoi(beg_tok, width, 8); + memcpy(parg_target, &unum, sizeof(unsigned int)); + break; + default: + goto fail; + }; + + break; + }; + } + +fail: + + va_end(arg_ptr); + + return tok_count; +} + +int nmea_parse_time(const char *buff, int buff_sz, nmeaTIME *res) +{ + int success = 0; + + switch(buff_sz) + { + case sizeof("hhmmss") - 1: + success = (3 == nmea_scanf(buff, buff_sz, + "%2d%2d%2d", &(res->hour), &(res->min), &(res->sec) + )); + break; + case sizeof("hhmmss.s") - 1: + case sizeof("hhmmss.ss") - 1: + case sizeof("hhmmss.sss") - 1: + success = (4 == nmea_scanf(buff, buff_sz, + "%2d%2d%2d.%d", &(res->hour), &(res->min), &(res->sec), &(res->hsec) + )); + break; + default: + log_err("Parse of time error (format error)!\n"); + success = 0; + break; + } + + return (success?0:-1); +} + +/** + * \brief Define packet type by header (nmeaPACKTYPE). + * @param buff a constant character pointer of packet buffer. + * @param buff_sz buffer size. + * @return The defined packet type + * @see nmeaPACKTYPE + */ +int nmea_pack_type(const char *buff, int buff_sz) +{ + static const char *pheads[] = { + "GPGGA", + "GPGSA", + "GPGSV", + "GPRMC", + "GPVTG", + }; + + assert(buff); + + if(buff_sz < 5) + return GPNON; + else if(0 == memcmp(buff, pheads[0], 5)) + return GPGGA; + else if(0 == memcmp(buff, pheads[1], 5)) + return GPGSA; + else if(0 == memcmp(buff, pheads[2], 5)) + return GPGSV; + else if(0 == memcmp(buff, pheads[3], 5)) + return GPRMC; + else if(0 == memcmp(buff, pheads[4], 5)) + return GPVTG; + + return GPNON; +} + +/** + * \brief Get the first line in buffer and check control sum (CRC). + * @param buff a constant character pointer of packets buffer. + * @param buff_sz buffer size. + * @param line pointer output for a line in the packet + * @param line_len a integer pointer for return the line length (must be defined). + * @return already read bytes to a line end from buff. + */ +int nmea_get_item_line(const char *buff, int buff_sz, char *line, int *line_len) +{ + static const int tail_sz = 3 /* *[CRC] */ + 2 /* \r\n */; + char *start, *star; + int nread = 0; + + *line_len = -1; + + /* Data sample: + * $GPGGA,081803.000,3029.9100,N,11423.2012,E,1,05,1.6,38.7,M,-13.7,M,,0000*4C + * $GPGSA,A,3,18,24,21,22,15,,,,,,,,3.1,1.6,2.7*3A + * $GPRMC,081803.000,A,3029.9100,N,11423.2012,E,1.14,126.38,210113,,,A*62 + */ + start = strchr(buff, '$'); + if(!start) + { + /* Can not find the line start flag '$', means can not find an integrated line */ + return buff_sz; + } + + star = strchr(start, '*'); + if(!star) + { + /* Can not find the line CRC start flag '*', means can not find an integrated line */ + return buff_sz; + } + + *line_len = star - start + 1; /* include '*' */ + strncpy(line, start, *line_len); + + nread = (star-buff) + tail_sz ; + + return nread>buff_sz ? buff_sz : nread; +} + +/** + * \brief Find tail of packet ("\r\n") in buffer and check control sum (CRC). + * @param buff a constant character pointer of packets buffer. + * @param buff_sz buffer size. + * @param res_crc a integer pointer for return CRC of packet (must be defined). + * @return Number of bytes to packet tail. + */ +int nmea_find_tail(const char *buff, int buff_sz, int *res_crc) +{ + static const int tail_sz = 3 /* *[CRC] */ + 2 /* \r\n */; + + const char *end_buff = buff + buff_sz; + int nread = 0; + int crc = 0; + + assert(buff && res_crc); + + *res_crc = -1; + + for(;buff < end_buff; ++buff, ++nread) + { + if(('$' == *buff) && nread) + { + buff = 0; + break; + } + else if('*' == *buff) + { + if(buff + tail_sz <= end_buff && '\r' == buff[3] && '\n' == buff[4]) + { + *res_crc = nmea_atoi(buff + 1, 2, 16); + nread = buff_sz - (int)(end_buff - (buff + tail_sz)); + if(*res_crc != crc) + { + *res_crc = -1; + buff = 0; + } + } + + break; + } + else if(nread) + crc ^= (int)*buff; + } + + if(*res_crc < 0 && buff) + nread = 0; + + return nread; +} + +/** + * \brief Parse GGA packet from buffer. + * @param buff a constant character pointer of packet buffer. + * @param buff_sz buffer size. + * @param pack a pointer of packet which will filled by function. + * @return 1 (true) - if parsed successfully or 0 (false) - if fail. + */ +int nmea_parse_GPGGA(const char *buff, int buff_sz, nmeaGPGGA *pack) +{ + char time_buff[NMEA_TIMEPARSE_BUF]; + + assert(buff && pack); + + memset(pack, 0, sizeof(nmeaGPGGA)); + + log_dbg("parse_GPGGA: %s\n", buff); + + if(14 != nmea_scanf(buff, buff_sz, + "$GPGGA,%s,%f,%C,%f,%C,%d,%d,%f,%f,%C,%f,%C,%f,%d*", + &(time_buff[0]), + &(pack->lat), &(pack->ns), &(pack->lon), &(pack->ew), + &(pack->sig), &(pack->satinuse), &(pack->HDOP), &(pack->elv), &(pack->elv_units), + &(pack->diff), &(pack->diff_units), &(pack->dgps_age), &(pack->dgps_sid))) + { + log_err("GPGGA parse error!\n"); + return 0; + } + + if(0 != nmea_parse_time(&time_buff[0], (int)strlen(&time_buff[0]), &(pack->utc))) + { + log_err("GPGGA time parse error!\n"); + return 0; + } + + return 1; +} + +/** + * \brief Parse GSA packet from buffer. + * @param buff a constant character pointer of packet buffer. + * @param buff_sz buffer size. + * @param pack a pointer of packet which will filled by function. + * @return 1 (true) - if parsed successfully or 0 (false) - if fail. + */ +int nmea_parse_GPGSA(const char *buff, int buff_sz, nmeaGPGSA *pack) +{ + assert(buff && pack); + + memset(pack, 0, sizeof(nmeaGPGSA)); + + log_dbg("parse_GPGSA: %s\n", buff); + + if(17 != nmea_scanf(buff, buff_sz, + "$GPGSA,%C,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f,%f*", + &(pack->fix_mode), &(pack->fix_type), + &(pack->sat_prn[0]), &(pack->sat_prn[1]), &(pack->sat_prn[2]), &(pack->sat_prn[3]), &(pack->sat_prn[4]), &(pack->sat_prn[5]), + &(pack->sat_prn[6]), &(pack->sat_prn[7]), &(pack->sat_prn[8]), &(pack->sat_prn[9]), &(pack->sat_prn[10]), &(pack->sat_prn[11]), + &(pack->PDOP), &(pack->HDOP), &(pack->VDOP))) + { + log_err("GPGSA parse error!\n"); + return 0; + } + + return 1; +} + +/** + * \brief Parse GSV packet from buffer. + * @param buff a constant character pointer of packet buffer. + * @param buff_sz buffer size. + * @param pack a pointer of packet which will filled by function. + * @return 1 (true) - if parsed successfully or 0 (false) - if fail. + */ +int nmea_parse_GPGSV(const char *buff, int buff_sz, nmeaGPGSV *pack) +{ + int nsen, nsat; + + assert(buff && pack); + + memset(pack, 0, sizeof(nmeaGPGSV)); + + log_dbg("parse_GPGSV: %s\n", buff); + + nsen = nmea_scanf(buff, buff_sz, + "$GPGSV,%d,%d,%d," + "%d,%d,%d,%d," + "%d,%d,%d,%d," + "%d,%d,%d,%d," + "%d,%d,%d,%d*", + &(pack->pack_count), &(pack->pack_index), &(pack->sat_count), + &(pack->sat_data[0].id), &(pack->sat_data[0].elv), &(pack->sat_data[0].azimuth), &(pack->sat_data[0].sig), + &(pack->sat_data[1].id), &(pack->sat_data[1].elv), &(pack->sat_data[1].azimuth), &(pack->sat_data[1].sig), + &(pack->sat_data[2].id), &(pack->sat_data[2].elv), &(pack->sat_data[2].azimuth), &(pack->sat_data[2].sig), + &(pack->sat_data[3].id), &(pack->sat_data[3].elv), &(pack->sat_data[3].azimuth), &(pack->sat_data[3].sig)); + + nsat = (pack->pack_index - 1) * NMEA_SATINPACK; + nsat = (nsat + NMEA_SATINPACK > pack->sat_count)?pack->sat_count - nsat:NMEA_SATINPACK; + nsat = nsat * 4 + 3 /* first three sentence`s */; + + if(nsen < nsat || nsen > (NMEA_SATINPACK * 4 + 3)) + { + log_err("GPGSV parse error!\n"); + return 0; + } + + return 1; +} + +/** + * \brief Parse RMC packet from buffer. + * @param buff a constant character pointer of packet buffer. + * @param buff_sz buffer size. + * @param pack a pointer of packet which will filled by function. + * @return 1 (true) - if parsed successfully or 0 (false) - if fail. + */ +int nmea_parse_GPRMC(const char *buff, int buff_sz, nmeaGPRMC *pack) +{ + int nsen; + char time_buff[NMEA_TIMEPARSE_BUF]; + + assert(buff && pack); + + memset(pack, 0, sizeof(nmeaGPRMC)); + + log_dbg("parse_GPGRMC: %s\n", buff); + + nsen = nmea_scanf(buff, buff_sz, + "$GPRMC,%s,%C,%f,%C,%f,%C,%f,%f,%2d%2d%2d,%f,%C,%C*", + &(time_buff[0]), + &(pack->status), &(pack->lat), &(pack->ns), &(pack->lon), &(pack->ew), + &(pack->speed), &(pack->direction), + &(pack->utc.day), &(pack->utc.mon), &(pack->utc.year), + &(pack->declination), &(pack->declin_ew), &(pack->mode)); + + if(nsen != 13 && nsen != 14) + { + log_err("GPRMC parse error!\n"); + return 0; + } + + if(0 != nmea_parse_time(&time_buff[0], (int)strlen(&time_buff[0]), &(pack->utc))) + { + log_err("GPRMC time parse error!\n"); + return 0; + } + + if(pack->utc.year < 90) + pack->utc.year += 100; + pack->utc.mon -= 1; + + return 1; +} + +/** + * \brief Parse VTG packet from buffer. + * @param buff a constant character pointer of packet buffer. + * @param buff_sz buffer size. + * @param pack a pointer of packet which will filled by function. + * @return 1 (true) - if parsed successfully or 0 (false) - if fail. + */ +int nmea_parse_GPVTG(const char *buff, int buff_sz, nmeaGPVTG *pack) +{ + assert(buff && pack); + + memset(pack, 0, sizeof(nmeaGPVTG)); + + log_dbg("parse_GPVTG: %s\n", buff); + + if(8 != nmea_scanf(buff, buff_sz, + "$GPVTG,%f,%C,%f,%C,%f,%C,%f,%C*", + &(pack->dir), &(pack->dir_t), + &(pack->dec), &(pack->dec_m), + &(pack->spn), &(pack->spn_n), + &(pack->spk), &(pack->spk_k))) + { + log_err("GPVTG parse error!\n"); + return 0; + } + + if( pack->dir_t != 'T' || + pack->dec_m != 'M' || + pack->spn_n != 'N' || + pack->spk_k != 'K') + { + log_err("GPVTG parse error (format error)!\n"); + return 0; + } + + return 1; +} + +/** + * \brief Fill nmeaINFO structure by GGA packet data. + * @param pack a pointer of packet structure. + * @param info a pointer of summary information structure. + */ +void nmea_GPGGA2info(nmeaGPGGA *pack, nmeaINFO *info) +{ + assert(pack && info); + + info->utc.hour = pack->utc.hour; + info->utc.min = pack->utc.min; + info->utc.sec = pack->utc.sec; + info->utc.hsec = pack->utc.hsec; + info->sig = pack->sig; + info->HDOP = pack->HDOP; + info->elv = pack->elv; + info->lat = ((pack->ns == 'N')?pack->lat:-(pack->lat)); + info->lon = ((pack->ew == 'E')?pack->lon:-(pack->lon)); + info->smask |= GPGGA; +} + +/** + * \brief Fill nmeaINFO structure by GSA packet data. + * @param pack a pointer of packet structure. + * @param info a pointer of summary information structure. + */ +void nmea_GPGSA2info(nmeaGPGSA *pack, nmeaINFO *info) +{ + int i, j, nuse = 0; + + assert(pack && info); + + info->fix = pack->fix_type; + info->PDOP = pack->PDOP; + info->HDOP = pack->HDOP; + info->VDOP = pack->VDOP; + + for(i = 0; i < NMEA_MAXSAT; ++i) + { + for(j = 0; j < info->satinfo.inview; ++j) + { + if(pack->sat_prn[i] && pack->sat_prn[i] == info->satinfo.sat[j].id) + { + info->satinfo.sat[j].in_use = 1; + nuse++; + } + } + } + + info->satinfo.inuse = nuse; + info->smask |= GPGSA; +} + +/** + * \brief Fill nmeaINFO structure by GSV packet data. + * @param pack a pointer of packet structure. + * @param info a pointer of summary information structure. + */ +void nmea_GPGSV2info(nmeaGPGSV *pack, nmeaINFO *info) +{ + int isat, isi, nsat; + + assert(pack && info); + + if(pack->pack_index > pack->pack_count || + pack->pack_index * NMEA_SATINPACK > NMEA_MAXSAT) + return; + + if(pack->pack_index < 1) + pack->pack_index = 1; + + info->satinfo.inview = pack->sat_count; + + nsat = (pack->pack_index - 1) * NMEA_SATINPACK; + nsat = (nsat + NMEA_SATINPACK > pack->sat_count)?pack->sat_count - nsat:NMEA_SATINPACK; + + for(isat = 0; isat < nsat; ++isat) + { + isi = (pack->pack_index - 1) * NMEA_SATINPACK + isat; + info->satinfo.sat[isi].id = pack->sat_data[isat].id; + info->satinfo.sat[isi].elv = pack->sat_data[isat].elv; + info->satinfo.sat[isi].azimuth = pack->sat_data[isat].azimuth; + info->satinfo.sat[isi].sig = pack->sat_data[isat].sig; + } + + info->smask |= GPGSV; +} + +/** + * \brief Fill nmeaINFO structure by RMC packet data. + * @param pack a pointer of packet structure. + * @param info a pointer of summary information structure. + */ +void nmea_GPRMC2info(nmeaGPRMC *pack, nmeaINFO *info) +{ + assert(pack && info); + + if('A' == pack->status) + { + if(NMEA_SIG_BAD == info->sig) + info->sig = NMEA_SIG_MID; + if(NMEA_FIX_BAD == info->fix) + info->fix = NMEA_FIX_2D; + } + else if('V' == pack->status) + { + info->sig = NMEA_SIG_BAD; + info->fix = NMEA_FIX_BAD; + } + + info->utc = pack->utc; + info->lat = ((pack->ns == 'N')?pack->lat:-(pack->lat)); + info->lon = ((pack->ew == 'E')?pack->lon:-(pack->lon)); + info->speed = pack->speed * NMEA_TUD_KNOTS; + info->direction = pack->direction; + info->smask |= GPRMC; +} + +/** + * \brief Fill nmeaINFO structure by VTG packet data. + * @param pack a pointer of packet structure. + * @param info a pointer of summary information structure. + */ +void nmea_GPVTG2info(nmeaGPVTG *pack, nmeaINFO *info) +{ + assert(pack && info); + + info->direction = pack->dir; + info->declination = pack->dec; + info->speed = pack->spk; + info->smask |= GPVTG; +} + diff --git a/program/fwed/gpsd/nmea_parse.h b/program/fwed/gpsd/nmea_parse.h new file mode 100644 index 0000000..f783e02 --- /dev/null +++ b/program/fwed/gpsd/nmea_parse.h @@ -0,0 +1,65 @@ +/* + * + * NMEA library + * URL: http://nmea.sourceforge.net + * Author: Tim (xtimor@gmail.com) + * Licence: http://www.gnu.org/licenses/lgpl.html + * $Id: parse.h 4 2007-08-27 13:11:03Z xtimor $ + * + */ + +#ifndef __NMEA_PARSE_H__ +#define __NMEA_PARSE_H__ + +#include "nmea_info.h" + +#define NMEA_DEF_PARSEBUFF (1024) +#define NMEA_MIN_PARSEBUFF (256) + +#define NMEA_CONVSTR_BUF (256) +#define NMEA_TIMEPARSE_BUF (256) + +/* + * Distance units + */ + +#define NMEA_TUD_YARDS (1.0936) /* *< Yeards, meter * NMEA_TUD_YARDS = yard */ +#define NMEA_TUD_KNOTS (1.852) /* *< Knots, kilometer / NMEA_TUD_KNOTS = knot */ +#define NMEA_TUD_MILES (1.609) /* *< Miles, kilometer / NMEA_TUD_MILES = mile */ + +/* + * Speed units + */ + +#define NMEA_TUS_MS (3.6) /* *< Meters per seconds, (k/h) / NMEA_TUS_MS= (m/s) */ + + +#ifdef __cplusplus +extern "C" { +#endif + +int nmea_atoi(const char *str, int str_sz, int radix); +double nmea_atof(const char *str, int str_sz); +int nmea_scanf(const char *buff, int buff_sz, const char *format, ...); + +int nmea_pack_type(const char *buff, int buff_sz); +int nmea_find_tail(const char *buff, int buff_sz, int *res_crc); +int nmea_get_item_line(const char *buff, int buff_sz, char *line, int *line_len); + +int nmea_parse_GPGGA(const char *buff, int buff_sz, nmeaGPGGA *pack); +int nmea_parse_GPGSA(const char *buff, int buff_sz, nmeaGPGSA *pack); +int nmea_parse_GPGSV(const char *buff, int buff_sz, nmeaGPGSV *pack); +int nmea_parse_GPRMC(const char *buff, int buff_sz, nmeaGPRMC *pack); +int nmea_parse_GPVTG(const char *buff, int buff_sz, nmeaGPVTG *pack); + +void nmea_GPGGA2info(nmeaGPGGA *pack, nmeaINFO *info); +void nmea_GPGSA2info(nmeaGPGSA *pack, nmeaINFO *info); +void nmea_GPGSV2info(nmeaGPGSV *pack, nmeaINFO *info); +void nmea_GPRMC2info(nmeaGPRMC *pack, nmeaINFO *info); +void nmea_GPVTG2info(nmeaGPVTG *pack, nmeaINFO *info); + +#ifdef __cplusplus +} +#endif + +#endif /* __NMEA_PARSE_H__ */ diff --git a/program/fwed/gsmd/gsmd.c b/program/fwed/gsmd/gsmd.c new file mode 100644 index 0000000..9846a24 --- /dev/null +++ b/program/fwed/gsmd/gsmd.c @@ -0,0 +1,153 @@ +/********************************************************************************* + * Copyright: (C) Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: gsmd.c + * Description: This is the RWME(Radiation Monitor Works Engine) gsmd applet entry point + * + * Version: 1.0.0(01/13/2013~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "01/13/2013 02:40:36 PM" + * + ********************************************************************************/ +#include "gsmd.h" + +static void usage_gsmd(const char *progname) +{ + banner(progname); + + printf("Usage: %s [OPTION]...\n", progname); + printf(" %s is a daemon program running on the device, which used to\n", progname); + printf("auto start ppp connection and receive/send SMS by GPRS module.\n"); + + printf("\nMandatory arguments to long options are mandatory for short options too:\n"); + printf(" -d[debug ] Running in debug mode\n"); + printf(" -l[level ] Set the log level as [0..%d]\n", LOG_LEVEL_MAX-1); + printf(" -h[help ] Display this help information\n"); + printf(" -v[version ] Display the program version\n"); + + return; +} + + +int gsmd_main(int argc, char **argv) +{ + int opt; + int rv = 0; + int debug = 0; + char pid_file[64] = { 0 }; /* The file used to record the PID */ + char *conf_file = GSMD_DEF_CONF_FILE; + const char *progname=NULL; + char *log_file = GSMD_DEF_LOG_FILE; + int log_level = GSMD_DEF_LOG_LEVEL; + cp_logger *logger = NULL; + MODULE_INFO module; + + struct option long_options[] = { + {"conf", required_argument, NULL, 'c'}, + {"debug", no_argument, NULL, 'd'}, + {"level", required_argument, NULL, 'l'}, + {"version", no_argument, NULL, 'v'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} + }; + + progname = basename(argv[0]); + + /* Parser the command line parameters */ + while ((opt = getopt_long(argc, argv, "c:dl:vh", long_options, NULL)) != -1) + { + switch (opt) + { + case 'c': /* Set configure file */ + conf_file = optarg; + break; + + case 'd': /* Set debug running */ + debug = 1; + log_file = DBG_LOG_FILE; + break; + + case 'l': /* Set the log level */ + log_level = atoi(optarg); + break; + + case 'v': /* Get software version */ + banner(progname); /* Defined in version.h */ + return EXIT_SUCCESS; + + case 'h': /* Get help information */ + usage_gsmd(progname); + return 0; + + default: + break; + } /* end of "switch(opt)" */ + } + + if( !debug ) + { + snprintf(pid_file, sizeof(pid_file), "%s/%s.pid", PID_FILE_PATH, progname); + if( check_daemon_running(pid_file) ) + { + printf("Programe already running, exit now.\n"); + return -1; + } + } + + if ( !(logger=cp_log_init(NULL, log_file, log_level, GSMD_LOG_FILE_SIZE)) ) + { + printf("Logger initialize failure with file: %s\n", logger->file); + return -1; + } + + if ( cp_log_open() ) + { + printf("Logger initialize failure with file: %s\n", logger->file); + return -1; + } + + if( !debug ) + { + if( set_daemon_running(pid_file) ) + { + log_fatal("Set program \"%s\" running as daemon failure.\n", progname); + goto CleanUp; + } + } + + cp_install_proc_signal(); + + if( init_gsm_module(&module) < 0 ) + { + log_fatal("Initialise gsmd work context failure, rv=%d\n", rv); + goto CleanUp; + } + + /* Start the PPP thread to do PPP dial up */ + if( ( rv=start_thread_ppp(&module)) < 0) + { + log_fatal("Start PPP thread failure, rv=%d\n", rv); + goto CleanUp; + } + +#ifdef CONFIG_SMS + /* Create the SMS thread to receive the SMS */ + if( (rv=start_thread_sms(&module)) < 0) + { + log_fatal("Start SMS thread failure, rv=%d\n", rv); + goto CleanUp; + } +#endif + + ctrl_thread_start(&module); + +CleanUp: + + log_nrml("Terminate program \"%s\".\n", progname); + unlink(pid_file); + cp_log_term(); + return rv; +} + + diff --git a/program/fwed/gsmd/gsmd.h b/program/fwed/gsmd/gsmd.h new file mode 100644 index 0000000..3eaffa6 --- /dev/null +++ b/program/fwed/gsmd/gsmd.h @@ -0,0 +1,43 @@ +/******************************************************************************** + * Copyright: (C) guowenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: gsmd.h + * Description: This is the rmwe(Radiation Moniter Worker Engine) gsmd applet head file + * + * Version: 1.0.0(02/02/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "02/02/2012 11:33:33 AM" + * + ********************************************************************************/ + +#ifndef __GSMD_H_ +#define __GSMD_H_ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <getopt.h> +#include <sys/types.h> +#include <signal.h> + +#include "cp_logger.h" +#include "cp_string.h" +#include "cp_proc.h" +#include "version.h" +#include "cp_ppp.h" +#include "cp_gprs.h" + +#ifndef PID_FILE_PATH +#define PID_FILE_PATH "/var/run/" +#endif + +#define GSMD_DEF_CONF_FILE "/apps/rmwe/etc/gsmd.conf" +#define GSMD_DEF_LOG_FILE "/logs/gsmd.log" + +#define GSMD_DEF_LOG_LEVEL LOG_LEVEL_NRML +#define GSMD_LOG_FILE_SIZE 12 /* Unit KiByte */ + +extern int gsmd_main(int argc, char **argv); + +#endif /* End of __GSMD_H_ */ diff --git a/program/fwed/gsmd/makefile b/program/fwed/gsmd/makefile new file mode 100644 index 0000000..8b3dcbf --- /dev/null +++ b/program/fwed/gsmd/makefile @@ -0,0 +1,95 @@ +#********************************************************************************* +# Copyright: (C) Guo Wenxue<guowenxue@gmail.com> +# All rights reserved. +# +# Filename: Makefile +# Description: This is the common subdir Makefile which to compile all the C +# source code to object files and then generate the shared or +# static library named lib$(FOLDER_NAME).a orlib $(FOLDER_NAME).so, +# which depends on the variable $LINK_MODE. +# +# Version: 1.0.0(01/13/2013~) +# Author: Guo Wenxue <guowenxue@gmail.com> +# ChangeLog: 1, Release initial version on "Sun Jan 13 14:44:36 CST 2013" +# +#********************************************************************************/ + +PWD=$(shell pwd) + +#If wanna compile in the subdir, not called by top makefile, uncomment it +ifneq (${TOP_COMPILE}, YES) +LOCAL_COMPILE=YES +endif + +LIBNAME=$(shell basename ${PWD}) +STALIB=lib${LIBNAME}.a +DYNLIB=lib${LIBNAME}.so + +VPATH= . +SRCS = $(wildcard ${VPATH}/*.c) +OBJS = $(patsubst %.c,%.o,$(SRCS)) + +#====================================================== +# ---> Doesn't call by top makefile, compile by local +#====================================================== +ifeq (${LOCAL_COMPILE}, YES) +#ARCH?=arm926t +ARCH?=i386 +CFLAGS+=-fPIC +TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]") +ifneq (,$(filter i386,$(TMP))) + CROSS_COMPILE= +else + CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux- +endif + +PRJDIR?=$(shell dirname ${PWD}) +CFLAGS+=-I${PRJDIR} +CC = ${CROSS_COMPILE}gcc +AR = ${CROSS_COMPILE}ar + +endif #End local compile + +ifeq ("${LINK_MODE}", "STATIC") + LIBS = ${STALIB} +else + LIBS=${DYNLIB} +endif + +all: entry ${LIBS} install + +entry: + @echo " "; + @echo " ========================================================="; + @echo " ** Compile subdir ${LIBNAME} for ${ARCH} "; + @echo " ========================================================="; + +#$(LD) -g --relocatable $(OBJS) -o lib${LIBNAME}.o +${STALIB}: $(OBJS) + $(AR) -rcu $@ $(OBJS) + +${DYNLIB}: $(OBJS) + $(CC) -fPIC -shared -o $@ $(OBJS) + +%.o : %.c + $(CC) -c $< $(CFLAGS) + +tag: + @ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R . + @cscope -Rbq + +install: + @if [ ! -z "${LIBS_PATH}" ] ; then \ + mkdir -p ${LIBS_PATH} ; \ + cp ${LIBS} ${LIBS_PATH}; \ + fi; + + +clean: + @rm -f *.o + @rm -rf *.gdb *.a *.so + +distclean: clean + @rm -f tags cscope* + +.PHONY: clean entry diff --git a/program/fwed/makefile b/program/fwed/makefile new file mode 100644 index 0000000..6594eb9 --- /dev/null +++ b/program/fwed/makefile @@ -0,0 +1,201 @@ +#********************************************************************************* +# Copyright: (C) 2012 CoherentPlus Sdn. Bhd. +# All rights reserved. +# +# Filename: Makefile +# Description: This is the common top Makefile which used to call function to +# Cross compile the subdir source code and link all the libs to +# excutable binary file. +# +# Version: 1.0.0(10/08/2011~) +# Author: Guo Wenxue <guowenxue@gmail.com> +# ChangeLog: 1, Release initial version on "10/08/2011 01:29:33 AM" +# +#********************************************************************************/ + +APP_BINARY_NAME = fwed +INST_PATH = /tftp +TOP_PATH = $(shell pwd) +LIBS_PATH=${TOP_PATH}/.libs +COMPILE_DATE=$(shell date +"%Y-%m-%d %H:%M:%S %Z") + +#Excutable binary file runs on platform +ARCH?=arm920t +#ARCH?=i386 + +#Static linked or Dynamic link +LINK_MODE=STATIC +MODE=PRODUCTION +DEBUG=1 + +CFLAGS+=-Werror -Wall +CFLAGS+=-DLINUX -DIS_LITTLE_ENDIAN -D_GNU_SOURCE -D_REENTRANT -D_LARGE_THREADS -D_THREAD_SAFE +CFLAGS+=-DAPP_BINARY_NAME="${APP_BINARY_NAME}" + +#Compile Modules +CFLAGS+=-DSWE_GSMD +CFLAGS+=-DSWE_ROUTED + +CFLAGS+=-DCONFIG_PPP + +ifeq ("${MODE}", "PRODUCTION") + CFLAGS+=-DPRODUCTION_MODE +endif +ifdef DEBUG + CFLAGS+=-g -DDEBUG +endif + +ifeq ("${LINK_MODE}", "STATIC") + CFLAGS+=--static + LDFLAGS+=-static +else + LDFLAGS+=-ldl +endif + +# ================================== +# ** Cross Compiler Setting ** +# ================================== + +TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]") +ifneq (,$(filter i386,$(TMP))) + CROSS_COMPILE= +else + CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux- +endif +TOP_COMPILE=YES + + +# Get alll the source code folder, all the source code in the subdir will be compiled and +# archive to a static library, named lib${subdir_name}.a +OBJFILES = $(patsubst %.c,%,$(wildcard *.c)) +SUBSRCS = $(shell find . -follow -maxdepth 1 -type d|sed -n 's/.\///p'|grep -v 'libs' \ + |grep -v 'etc' | grep -v '.svn'|grep -v '.git'|grep -v 'include'|grep -v 'bin') + +# Add the subdir compiled static library into LDFLAGS +#LDFLAGS+=$(patsubst %,-L%,$(SUBSRCS)) +#LDFLAGS+=$(patsubst %,-l%,$(SUBSRCS)) + +LDFLAGS+=-L${LIBS_PATH} +LDFLAGS+=$(patsubst %,-l%,$(SUBSRCS)) +LIBS=$(patsubst %,${LIBS_PATH}/lib%.a,$(SUBSRCS)) +LDFLAGS+=-Xlinker "-(" $(LIBS) -Xlinker "-)" + +CFLAGS+=$(patsubst %,-I${TOP_PATH}/%,$(SUBSRCS)) +CFLAGS+=-I$(TOP_PATH) +LDFLAGS+=-lpthread + +export CC=${CROSS_COMPILE}gcc +export CXX=${CROSS_COMPILE}gcc +export AR=${CROSS_COMPILE}ar +export AS=${CROSS_COMPILE}as +export LD=${CROSS_COMPILE}ld +export RANLIB=${CROSS_COMPILE}ranlib +export STRIP=${CROSS_COMPILE}strip +export CFLAGS +export LDFLAGS +export ARCH +export LINK_MODE +export LIBS_PATH + +#A function used to goes into the sub-folder to compile +MAKEFUNC = @MakeSubDir() \ + { \ + for DIR in ${SUBSRCS}; do \ + if [ -d $${DIR} ] ; then \ + cd $${DIR}; \ + MakeSubDir; \ + if [ -f makefile -o -f Makefile ]; then \ + pwd; \ + make $(1); \ + if [ "$$?" != "0" ]; then \ + exit 1; \ + fi; \ + fi; \ + cd ..; \ + fi; \ + done; \ + if [ -f makefile -o -f Makefile ]; then \ + make $(1); \ + if [ "$$?" != "0" ]; then \ + exit 1; \ + fi; \ + fi; \ + }; \ + +MAKEME = cd $(2); MakeSubDir $(1); cd ..; +LOOPMAKEFUNC = $(MAKEFUNC) $(foreach dir,$(SUBSRCS),$(call MAKEME,$(1),$(dir))) + +.PHONY: all + +all: entry version prepare binary install + +prepare: + @if [ ! -L cp_library ] ; then \ + ln -s ../cp_library; \ + fi + +entry: + @echo $(SUBSRCS) + @echo " "; + @echo " ========================================================="; + @echo " ** Come into compile ${APP_BINARY_NAME} for ARCH $(ARCH) "; + @echo " ========================================================="; + @echo " "; + @make clean + +version: + @echo "/* Generated by makefile, don't Edit it by hand */" > version.h + @echo '#define DATE "$(COMPILE_DATE)"' >> version.h + @echo "#define MAJOR 1" >>version.h + @echo "#define MINOR 0" >>version.h + @echo "#define REVER 0" >>version.h + @if [ -f .svn/entries ] ; then \ + echo "#define SVNVER `sed -n -e 4p .svn/entries`" >>version.h; \ + else \ + echo "#define SVNVER 0" >>version.h; \ + fi; + @echo "" >> version.h + @echo '#define version(progname) printf("%s Version %d.%d.%d Build @%05d (%s)\\n", progname, MAJOR, MINOR, REVER,SVNVER, DATE)' >> version.h + @echo '#define copyright() printf("Copyright (C) 2012 CoherentPlus Sdn. Bhd.\\n")' >>version.h + @echo '#define banner(progname) {version(progname); copyright(); printf("\\n");}' >>version.h + @echo "" >> version.h + +subdir: + @$(call LOOPMAKEFUNC,all) + @echo " "; + @echo " ========================================================="; + @echo " ** Compile and linking ${APP_BINARY_NAME} for ${ARCH} now"; + @echo " ========================================================="; + +%: %.c + $(CC) $< $(CFLAGS) -c -o $@.o + +binary: subdir $(OBJFILES) + $(CC) $(CFLAGS) -o $(APP_BINARY_NAME) *.o $(LDFLAGS) + $(STRIP) $(APP_BINARY_NAME) + +tag: + @cscope -Rbq + @ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R . + +install: + cp $(APP_BINARY_NAME) ${INST_PATH} + +uninstall: + rm -f ${INST_PATH}/$(APP_BINARY_NAME) + +clean: + @$(call LOOPMAKEFUNC,clean) + @rm -rf ${LIBS_PATH} + @rm -f version.h + @rm -f *.o $(APP_BINARY_NAME) + @rm -f *.elf* + @rm -f *.gdb + @rm -f cp_library + +distclean: clean + @$(call LOOPMAKEFUNC,distclean) + +clear: distclean + @rm -f tags cscope* + diff --git a/program/fwed/zigd/makefile b/program/fwed/zigd/makefile new file mode 100644 index 0000000..8b3dcbf --- /dev/null +++ b/program/fwed/zigd/makefile @@ -0,0 +1,95 @@ +#********************************************************************************* +# Copyright: (C) Guo Wenxue<guowenxue@gmail.com> +# All rights reserved. +# +# Filename: Makefile +# Description: This is the common subdir Makefile which to compile all the C +# source code to object files and then generate the shared or +# static library named lib$(FOLDER_NAME).a orlib $(FOLDER_NAME).so, +# which depends on the variable $LINK_MODE. +# +# Version: 1.0.0(01/13/2013~) +# Author: Guo Wenxue <guowenxue@gmail.com> +# ChangeLog: 1, Release initial version on "Sun Jan 13 14:44:36 CST 2013" +# +#********************************************************************************/ + +PWD=$(shell pwd) + +#If wanna compile in the subdir, not called by top makefile, uncomment it +ifneq (${TOP_COMPILE}, YES) +LOCAL_COMPILE=YES +endif + +LIBNAME=$(shell basename ${PWD}) +STALIB=lib${LIBNAME}.a +DYNLIB=lib${LIBNAME}.so + +VPATH= . +SRCS = $(wildcard ${VPATH}/*.c) +OBJS = $(patsubst %.c,%.o,$(SRCS)) + +#====================================================== +# ---> Doesn't call by top makefile, compile by local +#====================================================== +ifeq (${LOCAL_COMPILE}, YES) +#ARCH?=arm926t +ARCH?=i386 +CFLAGS+=-fPIC +TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]") +ifneq (,$(filter i386,$(TMP))) + CROSS_COMPILE= +else + CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux- +endif + +PRJDIR?=$(shell dirname ${PWD}) +CFLAGS+=-I${PRJDIR} +CC = ${CROSS_COMPILE}gcc +AR = ${CROSS_COMPILE}ar + +endif #End local compile + +ifeq ("${LINK_MODE}", "STATIC") + LIBS = ${STALIB} +else + LIBS=${DYNLIB} +endif + +all: entry ${LIBS} install + +entry: + @echo " "; + @echo " ========================================================="; + @echo " ** Compile subdir ${LIBNAME} for ${ARCH} "; + @echo " ========================================================="; + +#$(LD) -g --relocatable $(OBJS) -o lib${LIBNAME}.o +${STALIB}: $(OBJS) + $(AR) -rcu $@ $(OBJS) + +${DYNLIB}: $(OBJS) + $(CC) -fPIC -shared -o $@ $(OBJS) + +%.o : %.c + $(CC) -c $< $(CFLAGS) + +tag: + @ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R . + @cscope -Rbq + +install: + @if [ ! -z "${LIBS_PATH}" ] ; then \ + mkdir -p ${LIBS_PATH} ; \ + cp ${LIBS} ${LIBS_PATH}; \ + fi; + + +clean: + @rm -f *.o + @rm -rf *.gdb *.a *.so + +distclean: clean + @rm -f tags cscope* + +.PHONY: clean entry diff --git a/program/fwed/zigd/zigd.c b/program/fwed/zigd/zigd.c new file mode 100644 index 0000000..c040989 --- /dev/null +++ b/program/fwed/zigd/zigd.c @@ -0,0 +1,152 @@ +/********************************************************************************* + * Copyright: (C) Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: zigd.c + * Description: This is the RWME(Radiation Monitor Works Engine) zigd applet entry point + * + * Version: 1.0.0(01/13/2013~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "01/13/2013 02:40:36 PM" + * + ********************************************************************************/ +#include "zigd.h" + +static void usage_zigd(const char *progname) +{ + banner(progname); + + printf("Usage: %s [OPTION]...\n", progname); + printf(" %s is a daemon program running on the device to locate the device\n", progname); + + printf("\nMandatory arguments to long options are mandatory for short options too:\n"); + printf(" -d[debug ] Running in debug mode\n"); + printf(" -l[level ] Set the log level as [0..%d]\n", LOG_LEVEL_MAX-1); + printf(" -h[help ] Display this help information\n"); + printf(" -v[version ] Display the program version\n"); + + return; +} + +int init_zigd_context(ZIGD_CONTEX *ctx) +{ + log_info("Initialize zigd context.\n"); + + ctx->pwr_status = POWER_OFF; + + /* Initialize the zig dataport pointer */ + ctx->comport = comport_init(ZIGD_DATAPORT, 9600, "8N1N"); + if(NULL == ctx->comport) + return -1; + + return 0; +} + + +int zigd_main(int argc, char **argv) +{ + int opt; + int rv = 0; + int debug = 0; + char pid_file[64] = { 0 }; /* The file used to record the PID */ + const char *progname=NULL; + char *log_file = ZIGD_DEF_LOG_FILE; + int log_level = ZIGD_DEF_LOG_LEVEL; + cp_logger *logger = NULL; + ZIGD_CONTEX zigd_ctx; + + struct option long_options[] = { + {"debug", no_argument, NULL, 'd'}, + {"level", required_argument, NULL, 'l'}, + {"version", no_argument, NULL, 'v'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} + }; + + progname = basename(argv[0]); + + /* Parser the command line parameters */ + while ((opt = getopt_long(argc, argv, "dl:vh", long_options, NULL)) != -1) + { + switch (opt) + { + case 'd': /* Set debug running */ + debug = 1; + log_file = DBG_LOG_FILE; + break; + + case 'l': /* Set the log level */ + log_level = atoi(optarg); + break; + + case 'v': /* Get software version */ + banner(progname); /* Defined in version.h */ + return EXIT_SUCCESS; + + case 'h': /* Get help information */ + usage_zigd(progname); + return 0; + + default: + break; + } /* end of "switch(opt)" */ + } + + if( !debug ) + { + snprintf(pid_file, sizeof(pid_file), "%s/%s.pid", PID_FILE_PATH, progname); + if( check_daemon_running(pid_file) ) + { + printf("Programe already running, exit now.\n"); + return -1; + } + } + + if ( !(logger=cp_log_init(NULL, log_file, log_level, ZIGD_LOG_FILE_SIZE)) ) + { + printf("Logger initialize failure with file: %s\n", logger->file); + return -1; + } + + if ( cp_log_open() ) + { + printf("Logger initialize failure with file: %s\n", logger->file); + return -1; + } + + if( !debug ) + { + if( set_daemon_running(pid_file) ) + { + log_fatal("Set program \"%s\" running as daemon failure.\n", progname); + goto CleanUp; + } + } + + cp_install_proc_signal(); + + if( init_zigd_context(&zigd_ctx) < 0 ) + { + log_fatal("Initialise zigd work context failure, rv=%d\n", rv); + goto CleanUp; + } + +#if 0 + /* Start the zig thread to locate the device */ + if( (rv=start_thread_zigd(&(zigd_ctx))) < 0) + { + log_fatal("Start PPP thread failure, rv=%d\n", rv); + goto CleanUp; + } + + ctrl_thread_start( &zigd_ctx); +#endif + +CleanUp: + log_nrml("Terminate program \"%s\".\n", progname); + unlink(pid_file); + cp_log_term(); + return rv; +} + + diff --git a/program/fwed/zigd/zigd.h b/program/fwed/zigd/zigd.h new file mode 100644 index 0000000..f05db03 --- /dev/null +++ b/program/fwed/zigd/zigd.h @@ -0,0 +1,51 @@ +/******************************************************************************** + * Copyright: (C) guowenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: zigd.h + * Description: This is the rmwe(Radiation Moniter Worker Engine) zigd applet head file + * + * Version: 1.0.0(02/02/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "02/02/2012 11:33:33 AM" + * + ********************************************************************************/ + +#ifndef __ZIGD_H_ +#define __ZIGD_H_ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <getopt.h> +#include <sys/types.h> +#include <signal.h> + +#include "cp_comport.h" +#include "cp_logger.h" +#include "cp_string.h" +#include "cp_proc.h" +#include "version.h" + +#ifndef PID_FILE_PATH +#define PID_FILE_PATH "/var/run/" +#endif + +#define ZIGD_DEF_LOG_FILE "/logs/zigd.log" +#define ZIGD_DEF_LOG_LEVEL LOG_LEVEL_NRML +#define ZIGD_LOG_FILE_SIZE 12 /* Unit KiByte */ + +#define ZIGD_DATAPORT "/dev/ttyS1" + +#define POWER_OFF 0 +#define POWER_ON 1 + +typedef struct __ZIGD_CONTEX +{ + unsigned char pwr_status; + COM_PORT *comport; +} ZIGD_CONTEX; + +extern int zigd_main(int argc, char **argv); + +#endif /* End of __ZIGD_H_ */ diff --git a/program/serial2socket/thread_mode/cp_comport.c b/program/serial2socket/thread_mode/cp_comport.c new file mode 100644 index 0000000..8363cb2 --- /dev/null +++ b/program/serial2socket/thread_mode/cp_comport.c @@ -0,0 +1,600 @@ +/* ******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_comport.c + * Description: It's the comport operate library. + * + * Version: 1.0.0(10/17/2011~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/17/2011 03:33:25 PM" + * + ********************************************************************************/ + +#include "cp_comport.h" + +/************************************************************************************** + * Description: Set the comport structure + * Input Args: dev_name: The comport device name path, such as '/dev/ttyS3' + * baudrate: The baudrate, such as 115200 + * settings: The databit,parity,stopbit,flowctrl settings, such as '8N1N' + * Output Args: NONE + * Return Value: The cp_comport_t structure pointer. + *************************************************************************************/ +cp_comport_t *comport_init(const char *dev_name, int baudrate, const char *settings) +{ + cp_comport_t *comport = NULL; + if (NULL == (comport = (cp_comport_t *) malloc(sizeof(cp_comport_t)))) + { + return NULL; + } + memset(comport, 0, sizeof(cp_comport_t)); + comport->connected = 0; + comport->frag_size = 128; + + strncpy(comport->dev_name, dev_name, DEVNAME_LEN); + comport->baudrate = baudrate; + + set_settings(comport, settings); +#ifdef COM_DEBUG + disp_settings(comport); +#endif + + return comport; +} + +#ifdef COM_DEBUG +void disp_settings(cp_comport_t * comport) +{ + COM_PRINT("Device:\t\t\t\"%s\"\n", comport->dev_name); + COM_PRINT("Baudrate:\t\t%ld\n", comport->baudrate); + COM_PRINT("DataBit:\t\t\'%d\'\n", comport->databit); + switch (comport->parity) + { + case 0: + COM_PRINT("Parity:\t\t\t\'N\'\n"); + break; + case 1: + COM_PRINT("Parity:\t\t\t\'O\'\n"); + break; + case 2: + COM_PRINT("Parity:\t\t\t\'E\'\n"); + break; + case 3: + COM_PRINT("Parity:\t\t\t\'S\'\n"); + break; + } + COM_PRINT("StopBit:\t\t\'%ld\'\n", (long int)comport->stopbit); + switch (comport->flowctrl) + { + case 0: + COM_PRINT("FlowCtrl:\t\t\'N\'\n"); + break; + case 1: + COM_PRINT("FlowCtrl:\t\t\'S\'\n"); + break; + case 2: + COM_PRINT("FlowCtrl:\t\t\'H\'\n"); + break; + case 3: + COM_PRINT("FlowCtrl:\t\t\'B\'\n"); + break; + } + COM_PRINT("\n"); + return; +} +#endif + +/************************************************************************************** + * Description: Set the comport databit,parity,stopbit,flowctrl + * Input Args: comport: the cp_comport_t pointer + * settings: The databit/parity/stopbit/flowctrl settings as like "8N1N" + * Output Args: NONE + * Return Value: NONE + *************************************************************************************/ +void set_settings(cp_comport_t * comport, const char *settings) +{ + if(NULL==settings || NULL==comport) + return ; + + switch (settings[0]) /* data bit */ + { + case '7': + comport->databit = 7; + break; + case '8': + default: + comport->databit = 8; + break; + } + + switch (settings[1]) /* parity */ + { + case 'O': + case 'o': + comport->parity = 1; + break; + case 'E': + case 'e': + comport->parity = 2; + break; + case 'S': + case 's': + comport->parity = 3; + break; + case 'N': + case 'n': + default: + comport->parity = 0; + break; + } + + switch (settings[2]) /* stop bit */ + { + case '0': + comport->stopbit = 0; + break; + case '1': + default: + comport->stopbit = 1; + break; + } + + switch (settings[3]) /* flow control */ + { + case 'S': + case 's': + comport->flowctrl = 1; + break; + case 'H': + case 'h': + comport->flowctrl = 2; + break; + case 'B': + case 'b': + comport->flowctrl = 3; + break; + case 'N': + case 'n': + default: + comport->flowctrl = 0; + break; + } +} + +void comport_close(cp_comport_t * comport) +{ + if (0 != comport->fd) + { + COM_PRINT("Close device \"%s\"\n", comport->dev_name); + close(comport->fd); + } + comport->connected = 0x00; + comport->fd = -1; +} + +void cp_comport_term(cp_comport_t * comport) +{ + if(NULL == comport) + return; + + if (0 != comport->fd) + { + comport_close(comport); + } + memset(comport, 0x00, sizeof(cp_comport_t)); + free(comport); + comport = NULL; + + return; +} + +int comport_open(cp_comport_t * comport) +{ + int retval = -1; + struct termios old_cfg, new_cfg; + int old_flags; + long tmp; + + if(NULL==comport) + return -1; + + comport_close(comport); + + + /* Not a TTY device */ + if( !strstr(comport->dev_name, "tty")) + { + COM_PRINT("Open Not tty device \"%s\"\n", comport->dev_name); + comport->fd = open(comport->dev_name, O_RDWR); + retval = comport->fd<0 ? -2 : comport->fd; + goto CleanUp; + } + + comport->fd = open(comport->dev_name, O_RDWR | O_NOCTTY | O_NONBLOCK); + if (comport->fd < 0) + { + retval = -3; + goto CleanUp; + } + COM_PRINT("Open device \"%s\"\n", comport->dev_name); + + if ((-1 != (old_flags = fcntl(comport->fd, F_GETFL, 0))) + && (-1 != fcntl(comport->fd, F_SETFL, old_flags & ~O_NONBLOCK))) + { + // Flush input and output + if (-1 == tcflush(comport->fd, TCIOFLUSH)) + { + retval = -4; + goto CleanUp; + } + } + else // Failure + { + retval = -5; + goto CleanUp; + } + + if (0 != tcgetattr(comport->fd, &old_cfg)) + { + retval = -6; // Failed to get Com settings + goto CleanUp; + } + + memset(&new_cfg, 0, sizeof(new_cfg)); + + /*=====================================*/ + /* Configure comport */ + /*=====================================*/ + + new_cfg.c_cflag &= ~CSIZE; + new_cfg.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); + new_cfg.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); + new_cfg.c_oflag &= ~(OPOST); + + /* Set the data bit */ + switch (comport->databit) + { + case 0x07: + new_cfg.c_cflag |= CS7; + break; + case 0x06: + new_cfg.c_cflag |= CS6; + break; + case 0x05: + new_cfg.c_cflag |= CS5; + break; + default: + new_cfg.c_cflag |= CS8; + break; + } + + /* Set the parity */ + switch (comport->parity) + { + case 0x01: // Odd + new_cfg.c_cflag |= (PARENB | PARODD); + new_cfg.c_cflag |= (INPCK | ISTRIP); + break; + case 0x02: // Even + new_cfg.c_cflag |= PARENB; + new_cfg.c_cflag &= ~PARODD;; + new_cfg.c_cflag |= (INPCK | ISTRIP); + break; + case 0x03: + new_cfg.c_cflag &= ~PARENB; + new_cfg.c_cflag &= ~CSTOPB; + break; + default: + new_cfg.c_cflag &= ~PARENB; + } + + /* Set Stop bit */ + if (0x01 != comport->stopbit) + { + new_cfg.c_cflag |= CSTOPB; + } + else + { + new_cfg.c_cflag &= ~CSTOPB; + } + + /* Set flow control */ + switch (comport->flowctrl) + { + case 1: // Software control + case 3: + new_cfg.c_cflag &= ~(CRTSCTS); + new_cfg.c_iflag |= (IXON | IXOFF); + break; + case 2: // Hardware control + new_cfg.c_cflag |= CRTSCTS; // Also called CRTSCTS + new_cfg.c_iflag &= ~(IXON | IXOFF); + break; + default: // NONE + new_cfg.c_cflag &= ~(CRTSCTS); + new_cfg.c_iflag &= ~(IXON | IXOFF); + break; + } + + /* Set baudrate */ + switch (comport->baudrate) + { + case 115200: + tmp = B115200; + break; + case 57600: + tmp = B57600; + break; + case 38400: + tmp = B38400; + break; + case 19200: + tmp = B19200; + break; + case 9600: + tmp = B9600; + break; + case 4800: + tmp = B4800; + break; + case 2400: + tmp = B2400; + break; + case 1800: + tmp = B1800; + break; + case 1200: + tmp = B1200; + break; + case 600: + tmp = B600; + break; + case 300: + tmp = B300; + break; + case 200: + tmp = B200; + break; + case 150: + tmp = B150; + break; + case 134: + tmp = B134; + break; + case 110: + tmp = B110; + break; + case 75: + tmp = B75; + break; + case 50: + tmp = B50; + break; + default: + tmp = B115200; + } + cfsetispeed(&new_cfg, tmp); + cfsetispeed(&new_cfg, tmp); + + /* Set the Com port timeout settings */ + new_cfg.c_cc[VMIN] = 0; + new_cfg.c_cc[VTIME] = 0; + + tcflush(comport->fd, TCIFLUSH); + if (0 != tcsetattr(comport->fd, TCSANOW, &new_cfg)) + { + retval = -7; // Failed to set device com port settings + goto CleanUp; + } + + COM_PRINT("Connected device \"%s\".\n", comport->dev_name); + comport->connected = 0x01; + retval = comport->fd; + +CleanUp: + COM_PRINT("Open device \"%s\" %s.\n", comport->dev_name, retval>0 ? "successfully" : "failure"); + return retval; +} + +void nonblock() +{ + struct termios ttystate; + + //get the terminal state + tcgetattr(STDIN_FILENO, &ttystate); + + //turn off canonical mode + ttystate.c_lflag &= ~ICANON; + //minimum of number input read. + ttystate.c_cc[VMIN] = 1; + + //set the terminal attributes. + tcsetattr(STDIN_FILENO, TCSANOW, &ttystate); +} + +int kbhit() +{ + struct timeval tv; + fd_set fds; + tv.tv_sec = 0; + tv.tv_usec = 0; + FD_ZERO(&fds); + FD_SET(STDIN_FILENO, &fds); //STDIN_FILENO is 0 + select(STDIN_FILENO + 1, &fds, NULL, NULL, &tv); + return FD_ISSET(STDIN_FILENO, &fds); +} + +int comport_recv(cp_comport_t * comport, char *buf, int buf_size, unsigned long timeout) +{ + int retval = 0; // Function return value + int iRet; + fd_set stReadFds, stExcpFds; + struct timeval stTime; + + if (NULL == buf || 0 >= buf_size) + { + COM_PRINT("%s() usage error.\n", __FUNCTION__); + retval = -1; + goto CleanUp; + } + + if (0x01 != comport->connected) + { + COM_PRINT("%s() comport not connected.\n", __FUNCTION__); + retval = -2; + goto CleanUp; + } + + //printf("bufsize=%d timeout=%lu\n", buf_size, timeout); + + FD_ZERO(&stReadFds); + FD_ZERO(&stExcpFds); + FD_SET(comport->fd, &stReadFds); + FD_SET(comport->fd, &stExcpFds); + + if (0xFFFFFFFF != timeout) + { + stTime.tv_sec = (time_t) (timeout / 1000); + stTime.tv_usec = (long)(1000 * (timeout % 1000)); + + iRet = select(comport->fd + 1, &stReadFds, 0, &stExcpFds, &stTime); + if (0 == iRet) + { + retval = 0; // No data in Com port buffer + goto CleanUp; + } + else if (0 < iRet) + { + if (0 != FD_ISSET(comport->fd, &stExcpFds)) + { + retval = -6; // Error during checking recv status + COM_PRINT("Error checking recv status.\n"); + goto CleanUp; + } + + if (0 == FD_ISSET(comport->fd, &stReadFds)) + { + retval = 0; // No incoming data + COM_PRINT("No incoming data.\n"); + goto CleanUp; + } + } + else + { + if (EINTR == errno) + { + COM_PRINT("catch interrupt signal.\n"); + retval = 0; // Interrupted signal catched + } + else + { + COM_PRINT("Check recv status failure.\n"); + retval = -7; // Error during checking recv status + } + + goto CleanUp; + } + } + + usleep(10000); /* sleep for 10ms for data incoming */ + + // Get data from Com port + iRet = read(comport->fd, buf, buf_size); + if (0 > iRet) + { + if (EINTR == errno) + retval = 0; // Interrupted signal catched + else + retval = -3; // Failed to read Com port + + goto CleanUp; + } + +#if 0 + { + int i=0; + printf("Receive %d bytes data: \n", iRet); + for(i=0; i<iRet; i++) + { + printf("0x%02x ", buf[i]); + } + printf("\n"); + } +#endif + + retval = iRet; + + CleanUp: + return retval; + +} + +int comport_send(cp_comport_t * comport, char *buf, int send_bytes) +{ + char *ptr, *end; + int retval = 0; + int send = 0; + + if (NULL == buf || 0 >= send_bytes) + { + COM_PRINT("%s() Usage error.\n", __FUNCTION__); + retval = -1; + goto CleanUp; + } + + if (0x01 != comport->connected) // Comport not opened ? + { + retval = -3; + COM_PRINT("Serail not connected.\n"); + goto CleanUp; + } + + //printf("Send %s with %d bytes.\n", buf, send_bytes); + + // Large data, then slice them and send + if (comport->frag_size < send_bytes) + { + ptr = buf; + end = buf + send_bytes; + + do + { + // Large than frag_size + if (comport->frag_size < (end - ptr)) + { + send = write(comport->fd, ptr, comport->frag_size); + if (0 >= send || comport->frag_size != send) + { + retval = -4; + goto CleanUp; + } + ptr += comport->frag_size; + } + else // Less than frag_size, maybe last fragmention. + { + send = write(comport->fd, ptr, (end - ptr)); + if (0 >= send || (end - ptr) != send) + { + retval = -4; + goto CleanUp; + } + ptr += (end - ptr); + } + } + while (ptr < end); + } + else // The send data is not large than a fragmention. + { + send = write(comport->fd, buf, send_bytes); + if (0 >= send || send_bytes != send) + { + retval = -5; + goto CleanUp; + } + } + + CleanUp: + return retval; +} + diff --git a/program/serial2socket/thread_mode/cp_comport.h b/program/serial2socket/thread_mode/cp_comport.h new file mode 100644 index 0000000..5c08b9b --- /dev/null +++ b/program/serial2socket/thread_mode/cp_comport.h @@ -0,0 +1,67 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_comport.h + * Description: This head file is for the common TTY/Serial port operator library + * + * Version: 1.0.0(10/17/2011~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "10/17/2011 03:33:25 PM" + * + ********************************************************************************/ +#ifndef _CP_COMPORT_H +#define _CP_COMPORT_H + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <getopt.h> +#include <fcntl.h> +#include <errno.h> +#include <termios.h> +#include <sys/stat.h> +#include <sys/wait.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/select.h> + +#define BUF_64 64 + +#ifndef DEVNAME_LEN +#define DEVNAME_LEN 64 +#endif + +//#define COM_DEBUG +#ifdef COM_DEBUG +#define COM_PRINT(format,args...) printf(format, ##args) +#else +#define COM_PRINT(format,args...) do{} while(0); +#endif + +//#define msleep(m) {struct timespec cSleep; cSleep.tv_sec = 0; cSleep.tv_nsec = m * 1000; nanosleep(&cSleep, 0);} + +typedef struct cp_comport_s +{ + unsigned char databit, parity, stopbit, flowctrl, connected; + char dev_name[DEVNAME_LEN]; + unsigned char used; /* This comport used or not now */ + int fd; + int frag_size; + long baudrate; +} cp_comport_t; + +cp_comport_t *comport_init(const char *dev_name, int baudrate, const char *settings); +void comport_close(cp_comport_t * comport); +int comport_open(cp_comport_t * comport); +void cp_comport_term(cp_comport_t * comport); +int comport_recv(cp_comport_t * comport, char *buf, int buf_size, unsigned long timeout); +int comport_send(cp_comport_t * comport, char *buf, int send_bytes); + +void set_settings(cp_comport_t * comport, const char *settings); +void disp_settings(cp_comport_t * comport); +void nonblock(); +int kbhit(); + +#endif diff --git a/program/serial2socket/thread_mode/cp_logger.c b/program/serial2socket/thread_mode/cp_logger.c new file mode 100644 index 0000000..efb04e5 --- /dev/null +++ b/program/serial2socket/thread_mode/cp_logger.c @@ -0,0 +1,433 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_log.c + * Description: This file is the linux infrastructural logger system library + * + * Version: 1.0.0(08/08/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "08/08/2012 04:24:01 PM" + * + ********************************************************************************/ + +#include "cp_logger.h" +//#include "cp_common.h" + +#define PRECISE_TIME_FACTOR 1000 + +static unsigned long log_rollback_size = LOG_ROLLBACK_NONE; + +static cp_logger *logger = NULL; + +char *log_str[LOG_LEVEL_MAX + 1] = { "", "F", "E", "W", "N", "D", "I", "T", "M" }; + +static char *cp_time_format = DEFAULT_TIME_FORMAT; + +void cp_log_set_time_format(char *time_format) +{ + cp_time_format = time_format; +} + +static void cp_log_default_signal_handler(int sig) +{ + if(!logger) + return ; + + if (sig == SIGHUP) + { + signal(SIGHUP, cp_log_default_signal_handler); + log_fatal("SIGHUP received - reopenning log file [%s]", logger->file); + cp_log_reopen(); + } +} + +static void log_banner(char *prefix) +{ + if(!logger) + return ; + + fprintf(logger->fp, "%s log \"%s\" on level [%s] size [%lu] KiB, log system version %s\n", + prefix, logger->file, log_str[logger->level], log_rollback_size / 1024, LOG_VERSION_STR); +#ifdef LOG_FILE_LINE + fprintf(logger->fp, " [Date] [Time] [Level] [PID/TID] [File/Line] [Content]\n"); +#else + fprintf(logger->fp, " [Date] [Time] [Level] [PID/TID] [Content]\n"); +#endif + fprintf(logger->fp, "-------------------------------------------------------------\n"); +} + +static void check_and_rollback(void) +{ + if(!logger) + return ; + + if (log_rollback_size != LOG_ROLLBACK_NONE) + { + long _curOffset = ftell(logger->fp); + + if ((_curOffset != -1) && (_curOffset >= log_rollback_size)) + { + char cmd[512]; + + snprintf(cmd, sizeof(cmd), "cp -f %s %s.roll", logger->file, logger->file); + system(cmd); + + if (-1 == fseek(logger->fp, 0L, SEEK_SET)) + fprintf(logger->fp, "log rollback fseek failed \n"); + + rewind(logger->fp); + + truncate(logger->file, 0); + log_banner("Already rollback"); + } + } +} + +cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size) +{ + if(NULL == log) + { + logger = malloc(sizeof(cp_logger)); + memset(logger, 0, sizeof(cp_logger)); + logger->flag |= CP_LOGGER_MALLOC; + } + else + { + logger = log; + logger->flag |= CP_LOGGER_ARGUMENT; + } + + if(NULL == logger) + { + return NULL; + } + + strncpy(logger->file, filename, FILENAME_LEN); + logger->level = level; + logger->size = log_size; + + return logger; +} + +int cp_log_open(void) +{ + struct sigaction act; + char *filemode; + + if(!logger) + { + return -1; + } + + log_rollback_size = logger->size <= 0 ? LOG_ROLLBACK_NONE : logger->size*1024; /* Unit KiB */ + + if ('\0' == logger->file) + return -1; + + if (!strcmp(logger->file, DBG_LOG_FILE)) + { + logger->fp = stderr; + log_rollback_size = LOG_ROLLBACK_NONE; + logger->flag |= CP_LOGGER_CONSOLE; + goto OUT; + } + + filemode = (log_rollback_size==LOG_ROLLBACK_NONE) ? "a+" : "w+"; + + logger->fp = fopen(logger->file, filemode); + if (NULL == logger->fp) + { + fprintf(stderr, "Open log file \"%s\" in %s failure\n", logger->file, filemode); + return -2; + } + + act.sa_handler = cp_log_default_signal_handler; + sigemptyset(&act.sa_mask); + act.sa_flags = 0; + sigaction(SIGHUP, &act, NULL); + + OUT: + log_banner("Initialize"); + + return 0; +} + +void cp_log_close(void) +{ + if (!logger || !logger->fp ) + return; + + log_banner("\nTerminate"); + cp_log_raw("\n\n\n\n"); + + fflush(logger->fp); + + fclose(logger->fp); + logger->fp = NULL; + + return ; +} + +int cp_log_reopen(void) +{ + int rc = 0; + char *filemode; + + if( !logger ) + return -1; + + log_rollback_size = logger->size <= 0 ? LOG_ROLLBACK_NONE : logger->size*1024; /* Unit KiB */ + + if (logger->flag & CP_LOGGER_CONSOLE ) + { + fflush(logger->fp); + logger->fp = stderr; + return 0; + } + + if (logger->fp) + { + cp_log_close(); + filemode = log_rollback_size==LOG_ROLLBACK_NONE ? "a+" : "w+"; + logger->fp = fopen(logger->file, filemode); + + if (logger->fp == NULL) + rc = -2; + } + else + { + rc = -3; + } + + if (!rc) + { + log_banner("\nReopen"); + } + return rc; +} + +void cp_log_term(void) +{ + if(!logger) + return ; + + cp_log_close(); + + if (logger->flag & CP_LOGGER_MALLOC ) + { + free(logger); + } + logger = NULL; +} + +void cp_log_raw(const char *fmt, ...) +{ + va_list argp; + + if (!logger || !logger->fp) + return; + + check_and_rollback(); + + va_start(argp, fmt); + vfprintf(logger->fp, fmt, argp); + va_end(argp); +} + +static void cp_printout(char *level, char *fmt, va_list argp) +{ + char buf[MAX_LOG_MESSAGE_LEN]; + struct tm *local; + struct timeval now; + char timestr[256]; + + if(!logger) + return ; + + pthread_t tid; + + check_and_rollback(); + +#ifdef MULTHREADS + tid = pthread_self(); +#else + tid = getpid(); +#endif + + gettimeofday(&now, NULL); + local = localtime(&now.tv_sec); + + strftime(timestr, 256, cp_time_format, local); + vsnprintf(buf, MAX_LOG_MESSAGE_LEN, fmt, argp); + +#ifdef DUMPLICATE_OUTPUT + printf("%s.%03ld [%s] [%06lu]: %s", + timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, buf); +#endif + + if (logger->fp) + fprintf(logger->fp, "%s.%03ld [%s] [%06lu]: %s", timestr, now.tv_usec / PRECISE_TIME_FACTOR, + level, tid, buf); + + if (logger->fp) + fflush(logger->fp); +} + +static void cp_printout_line(char *level, char *fmt, char *file, int line, va_list argp) +{ + char buf[MAX_LOG_MESSAGE_LEN]; + struct tm *local; + struct timeval now; + char timestr[256]; + + if(!logger) + return ; + + pthread_t tid; + + check_and_rollback(); + +#ifdef MULTHREADS + tid = pthread_self(); +#else + tid = getpid(); +#endif + + gettimeofday(&now, NULL); + local = localtime(&now.tv_sec); + + strftime(timestr, 256, cp_time_format, local); + vsnprintf(buf, MAX_LOG_MESSAGE_LEN, fmt, argp); + +#ifdef DUMPLICATE_OUTPUT + printf("%s.%03ld [%s] [%06lu] (%s [%04d]) : %s", + timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, file, line, buf); +#endif + + if (logger->fp) + fprintf(logger->fp, "%s.%03ld [%s] [%06lu] (%s [%04d]) : %s", + timestr, now.tv_usec / PRECISE_TIME_FACTOR, level, tid, file, line, buf); + + if (logger->fp) + fflush(logger->fp); +} + +void cp_log_str(int level, const char *msg) +{ + if (!logger || level>logger->level) + return; + + check_and_rollback(); + + if (logger->fp) + fwrite(msg, 1, strlen(msg), logger->fp); + + if(logger->fp) + fflush(logger->fp); +} + +void cp_log(int level, char *fmt, ...) +{ + va_list argp; + + if (!logger || level>logger->level) + return; + + va_start(argp, fmt); + cp_printout(log_str[level], fmt, argp); + va_end(argp); +} + +void cp_log_line(int level, char *file, int line, char *fmt, ...) +{ + va_list argp; + + if (!logger || level>logger->level) + return; + + va_start(argp, fmt); + cp_printout_line(log_str[level], fmt, file, line, argp); + + va_end(argp); +} + +#define LINELEN 81 +#define CHARS_PER_LINE 16 +static char *print_char = + " " + " " + " !\"#$%&'()*+,-./" + "0123456789:;<=>?" + "@ABCDEFGHIJKLMNO" + "PQRSTUVWXYZ[\\]^_" + "`abcdefghijklmno" + "pqrstuvwxyz{|}~ " + " " + " " + " ???????????????" + "????????????????" + "????????????????" + "????????????????" + "????????????????" + "????????????????"; + +void cp_log_dump(int level, char *buf, int len) +{ + int rc; + int idx; + char prn[LINELEN]; + char lit[CHARS_PER_LINE + 2]; + char hc[4]; + short line_done = 1; + + if (!logger || level>logger->level) + return; + + rc = len; + idx = 0; + lit[CHARS_PER_LINE] = '\0'; + + while (rc > 0) + { + if (line_done) + snprintf(prn, LINELEN, "%08X: ", idx); + + do + { + unsigned char c = buf[idx]; + snprintf(hc, 4, "%02X ", c); + strncat(prn, hc, LINELEN); + + lit[idx % CHARS_PER_LINE] = print_char[c]; + } + while (--rc > 0 && (++idx % CHARS_PER_LINE != 0)); + + line_done = (idx % CHARS_PER_LINE) == 0; + if (line_done) + { +#ifdef DUMPLICATE_OUTPUT + printf("%s %s\n", prn, lit); +#endif + if (logger->fp) + fprintf(logger->fp, "%s %s\n", prn, lit); + } + } + + if (!line_done) + { + int ldx = idx % CHARS_PER_LINE; + lit[ldx++] = print_char[(int)buf[idx]]; + lit[ldx] = '\0'; + + while ((++idx % CHARS_PER_LINE) != 0) + strncat(prn, " ", LINELEN); + +#ifdef DUMPLICATE_OUTPUT + printf("%s %s\n", prn, lit); +#endif + if (logger->fp) + fprintf(logger->fp, "%s %s\n", prn, lit); + + } +} diff --git a/program/serial2socket/thread_mode/cp_logger.h b/program/serial2socket/thread_mode/cp_logger.h new file mode 100644 index 0000000..7548514 --- /dev/null +++ b/program/serial2socket/thread_mode/cp_logger.h @@ -0,0 +1,111 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue <guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_logger.h + * Description: This file is the linux infrastructural logger system library + * + * Version: 1.0.0(08/08/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "08/08/2012 05:16:56 PM" + * + ********************************************************************************/ + +#ifndef __CP_LOG_H +#define __CP_LOG_H + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <signal.h> +#include <time.h> +#include <errno.h> + +#include <pthread.h> +#include <sys/types.h> +#include <sys/time.h> + +#define LOG_VERSION_STR "1.0.0" + +#ifndef FILENAME_LEN +#define FILENAME_LEN 64 +#endif + +#define DEFAULT_LOGFILE "cp_logger.log" +#define DBG_LOG_FILE "console" /* Debug mode log file is console */ + +#define LOG_ROLLBACK_SIZE 512 /* Default rollback log size */ +#define LOG_ROLLBACK_NONE 0 /* Set rollback size to 0 will not rollback */ + +#define DEFAULT_TIME_FORMAT "%Y-%m-%d %H:%M:%S" +#define MAX_LOG_MESSAGE_LEN 0x1000 + +//#define DUMPLICATE_OUTPUT /* Log to file and printf on console */ +#define LOG_FILE_LINE /* Log the file and line */ + +enum +{ + LOG_LEVEL_DISB = 0, /* Disable "Debug" */ + LOG_LEVEL_FATAL, /* Debug Level "Fatal" */ + LOG_LEVEL_ERROR, /* Debug Level "ERROR" */ + LOG_LEVEL_WARN, /* Debug Level "warnning" */ + LOG_LEVEL_NRML, /* Debug Level "Normal" */ + LOG_LEVEL_DEBUG, /* Debug Level "Debug" */ + LOG_LEVEL_INFO, /* Debug Level "Information" */ + LOG_LEVEL_TRACE, /* Debug Level "Trace" */ + LOG_LEVEL_MAX, +}; + +#define CP_LOGGER_MALLOC 1<<0 +#define CP_LOGGER_ARGUMENT 0<<0 + +#define CP_LOGGER_CONSOLE 1<<1 +#define CP_LOGGER_FILE 0<<1 + +#define CP_LOGGER_LEVEL_OPT 1<<2 /* The log level is sepcified by the command option */ +typedef struct _cp_logger +{ + unsigned char flag; /* This logger pointer is malloc() or passed by argument */ + char file[FILENAME_LEN]; + int level; + int size; + + FILE *fp; +} cp_logger; + +extern char *log_str[]; + +extern cp_logger *cp_log_init(cp_logger *log, char *filename, int level, int log_size); +extern int cp_log_open(void); +extern void cp_log_set_time_format(char *time_format); +extern int cp_log_reopen(void); +extern void cp_log_term(void); +extern void cp_log_raw(const char *fmt, ...); +extern void cp_log(int level, char *fmt, ...); +extern void cp_log_line(int level, char *file, int line, char *fmt, ...); +extern void cp_log_str(int level, const char *msg); + +extern void cp_log_dump(int level, char *buf, int len); + +#ifdef LOG_FILE_LINE +#define log_trace(fmt, ...) cp_log_line(LOG_LEVEL_TRACE, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_info(fmt, ...) cp_log_line(LOG_LEVEL_INFO, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_dbg(fmt, ...) cp_log_line(LOG_LEVEL_DEBUG, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_nrml(fmt, ...) cp_log_line(LOG_LEVEL_NRML, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_warn(fmt, ...) cp_log_line(LOG_LEVEL_WARN, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_err(fmt, ...) cp_log_line(LOG_LEVEL_ERROR, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#define log_fatal(fmt, ...) cp_log_line(LOG_LEVEL_FATAL, __FILE__, __LINE__, fmt, ##__VA_ARGS__) +#else +#define log_trace(fmt, ...) cp_log(LOG_LEVEL_TRACE, fmt, ##__VA_ARGS__) +#define log_info(fmt, ...) cp_log(LOG_LEVEL_INFO, fmt, ##__VA_ARGS__) +#define log_dbg(fmt, ...) cp_log(LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__) +#define log_nrml(fmt, ...) cp_log(LOG_LEVEL_NRML, fmt, ##__VA_ARGS__) +#define log_warn(fmt, ...) cp_log(LOG_LEVEL_WARN, fmt, ##__VA_ARGS__) +#define log_err(fmt, ...) cp_log(LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__) +#define log_fatal(fmt, ...) cp_log(LOG_LEVEL_FATAL, fmt, ##__VA_ARGS__) +#endif + + +#endif /* __CP_LOG_H */ diff --git a/program/serial2socket/thread_mode/cp_proc.c b/program/serial2socket/thread_mode/cp_proc.c new file mode 100644 index 0000000..769ec5c --- /dev/null +++ b/program/serial2socket/thread_mode/cp_proc.c @@ -0,0 +1,342 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_proc.c + * Description: This file is the process API + * + * Version: 1.0.0(11/06/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/06/2012 09:19:02 PM" + * + ********************************************************************************/ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <libgen.h> +#include <fcntl.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <pthread.h> + +#include "cp_proc.h" +#include "cp_logger.h" + +CP_PROC_SIG g_cp_signal={0}; + +void cp_proc_sighandler(int sig) +{ + switch(sig) + { + case SIGINT: + log_warn("SIGINT - stopping\n"); + g_cp_signal.stop = 1; + break; + + case SIGTERM: + log_warn("SIGTERM - stopping\n"); + g_cp_signal.stop = 1; + break; + case SIGSEGV: + log_warn("SIGSEGV - stopping\n"); +#if 0 + if(g_cp_signal.stop) + exit(0); + + g_cp_signal.stop = 1; +#endif + break; + + case SIGPIPE: + log_warn("SIGPIPE - warnning\n"); + break; + + default: + break; + } +} + + +void cp_install_proc_signal(void) +{ + struct sigaction sigact, sigign; + + log_nrml("Install default signal handler.\n"); + + /* Initialize the catch signal structure. */ + sigemptyset(&sigact.sa_mask); + sigact.sa_flags = 0; + sigact.sa_handler = cp_proc_sighandler; + + /* Setup the ignore signal. */ + sigemptyset(&sigign.sa_mask); + sigign.sa_flags = 0; + sigign.sa_handler = SIG_IGN; + + sigaction(SIGTERM, &sigact, 0); /* catch terminate signal "kill" command */ + sigaction(SIGINT, &sigact, 0); /* catch interrupt signal CTRL+C */ + //sigaction(SIGSEGV, &sigact, 0); /* catch segmentation faults */ + sigaction(SIGPIPE, &sigact, 0); /* catch broken pipe */ +#if 0 + sigaction(SIGCHLD, &sigact, 0); /* catch child process return */ + sigaction(SIGUSR2, &sigact, 0); /* catch USER signal */ +#endif +} + + +/* **************************************************************************** + * FunctionName: daemonize + * Description : Set the programe runs as daemon in background + * Inputs : nodir: DON'T change the work directory to / : 1:NoChange 0:Change + * noclose: close the opened file descrtipion or not 1:Noclose 0:Close + * Output : NONE + * Return : NONE + * *****************************************************************************/ +void daemonize(int nochdir, int noclose) +{ + int retval, fd; + int i; + + /* already a daemon */ + if (1 == getppid()) + return; + + /* fork error */ + retval = fork(); + if (retval < 0) exit(1); + + /* parent process exit */ + if (retval > 0) + exit(0); + + /* obtain a new process session group */ + setsid(); + + if (!noclose) + { + /* close all descriptors */ + for (i = getdtablesize(); i >= 0; --i) + { + //if (i != g_logPtr->fd) + close(i); + } + + /* Redirect Standard input [0] to /dev/null */ + fd = open("/dev/null", O_RDWR); + + /* Redirect Standard output [1] to /dev/null */ + dup(fd); + + /* Redirect Standard error [2] to /dev/null */ + dup(fd); + } + + umask(0); + + if (!nochdir) + chdir("/"); + + return; +} + +/* **************************************************************************** + * FunctionName: record_daemon_pid + * Description : Record the running daemon program PID to the file "pid_file" + * Inputs : pid_file:The record PID file path + * Output : NONE + * Return : 0: Record successfully Else: Failure + * *****************************************************************************/ +int record_daemon_pid(const char *pid_file) +{ + struct stat fStatBuf; + int fd = -1; + int mode = S_IROTH | S_IXOTH | S_IRGRP | S_IXGRP | S_IRWXU; + char ipc_dir[64] = { 0 }; + + strncpy(ipc_dir, pid_file, 64); + + /* dirname() will modify ipc_dir and save the result */ + dirname(ipc_dir); + + /* If folder pid_file PATH doesnot exist, then we will create it" */ + if (stat(ipc_dir, &fStatBuf) < 0) + { + if (mkdir(ipc_dir, mode) < 0) + { + log_fatal("cannot create %s: %s\n", ipc_dir, strerror(errno)); + return -1; + } + + (void)chmod(ipc_dir, mode); + } + + /* Create the process running PID file */ + mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; + if ((fd = open(pid_file, O_RDWR | O_CREAT | O_TRUNC, mode)) >= 0) + { + char pid[PID_ASCII_SIZE]; + snprintf(pid, sizeof(pid), "%u\n", (unsigned)getpid()); + write(fd, pid, strlen(pid)); + close(fd); + + log_dbg("Record PID<%u> to file %s.\n", getpid(), pid_file); + } + else + { + log_fatal("cannot create %s: %s\n", pid_file, strerror(errno)); + return -1; + } + + return 0; +} + +/* **************************************************************************** + * FunctionName: get_daemon_pid + * Description : Get the daemon process PID from the PID record file "pid_file" + * Inputs : pid_file: the PID record file + * Output : NONE + * Return : pid_t: The daemon process PID number + * *****************************************************************************/ +pid_t get_daemon_pid(const char *pid_file) +{ + FILE *f; + pid_t pid; + + if ((f = fopen(pid_file, "rb")) != NULL) + { + char pid_ascii[PID_ASCII_SIZE]; + (void)fgets(pid_ascii, PID_ASCII_SIZE, f); + (void)fclose(f); + pid = atoi(pid_ascii); + } + else + { + log_fatal("Can't open PID record file %s: %s\n", pid_file, strerror(errno)); + return -1; + } + return pid; +} + +/* **************************************************************************** + * FunctionName: check_daemon_running + * Description : Check the daemon program already running or not + * Inputs : pid_file: The record running daemon program PID + * Output : NONE + * Return : 1: The daemon program alread running 0: Not running + * *****************************************************************************/ +int check_daemon_running(const char *pid_file) +{ + int retVal = -1; + struct stat fStatBuf; + + retVal = stat(pid_file, &fStatBuf); + if (0 == retVal) + { + pid_t pid = -1; + printf("PID record file \"%s\" exist.\n", pid_file); + + pid = get_daemon_pid(pid_file); + if (pid > 0) /* Process pid exist */ + { + if ((retVal = kill(pid, 0)) == 0) + { + printf("Program with PID[%d] seems running.\n", pid); + return 1; + } + else /* Send signal to the old process get no reply. */ + { + printf("Program with PID[%d] seems exit.\n", pid); + remove(pid_file); + return 0; + } + } + else if (0 == pid) + { + printf("Can not read program PID form record file.\n"); + remove(pid_file); + return 0; + } + else /* Read pid from file "pid_file" failure */ + { + printf("Read record file \"%s\" failure, maybe program still running.\n", pid_file); + return 1; + } + } + + return 0; +} + +/* **************************************************************************** + * FunctionName: set_daemon_running + * Description : Set the programe running as daemon if it's not running and record + * its PID to the pid_file. + * Inputs : pid_file: The record running daemon program PID + * Output : NONE + * Return : 0: Successfully. 1: Failure + * *****************************************************************************/ +int set_daemon_running(const char *pid_file) +{ + daemonize(0, 1); + log_nrml("Program running as daemon [PID:%d].\n", getpid()); + + if (record_daemon_pid(pid_file) < 0) + { + log_fatal("Record PID to file \"%s\" failure.\n", pid_file); + return -2; + } + + return 0; +} + + +int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg) +{ + int retval = 0; + + pthread_attr_t thread_attr; + + /* Initialize the thread attribute */ + retval = pthread_attr_init(&thread_attr); + if(retval) + return -1; + + /* Set the stack size of the thread */ + retval = pthread_attr_setstacksize(&thread_attr, 120 * 1024); + if(retval) + goto CleanUp; + + /* Set thread to detached state:Don`t need pthread_join */ + retval = pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED); + if(retval) + goto CleanUp; + + /* Create the thread */ + retval = pthread_create(thread_id, &thread_attr, thread_workbody, thread_arg); + if(retval) + goto CleanUp; + +CleanUp: + /* Destroy the attributes of thread */ + pthread_attr_destroy(&thread_attr); + return retval; +} + + +void exec_system_cmd(const char *format, ...) +{ + char cmd[256]; + va_list args; + //int done = 0; + + memset(cmd, 0, sizeof(cmd)); + + va_start(args, format); + //done = vsnprintf(cmd, sizeof(cmd), format, args); + vsnprintf(cmd, sizeof(cmd), format, args); + va_end(args); + + system(cmd); +} + + diff --git a/program/serial2socket/thread_mode/cp_proc.h b/program/serial2socket/thread_mode/cp_proc.h new file mode 100644 index 0000000..f79abe8 --- /dev/null +++ b/program/serial2socket/thread_mode/cp_proc.h @@ -0,0 +1,42 @@ +/******************************************************************************** + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_proc.h + * Description: This head file is for Linux process API + * + * Version: 1.0.0(11/06/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/06/2012 09:21:33 PM" + * + ********************************************************************************/ + +#ifndef __CP_PROC_H +#define __CP_PROC_H + +#include <signal.h> + +#define PID_ASCII_SIZE 11 + +typedef struct __CP_PROC_SIG +{ + int signal; + unsigned stop; /* 0: Not term 1: Stop */ +} CP_PROC_SIG; + +typedef void *(THREAD_BODY) (void *thread_arg); + +extern CP_PROC_SIG g_cp_signal; +extern void cp_install_proc_signal(void); + +extern void daemonize(int nochdir, int noclose); +extern int record_daemon_pid(const char *pid_file); +extern pid_t get_daemon_pid(const char *pid_file); +extern int check_daemon_running(const char *pid_file); +extern int set_daemon_running(const char *pid_file); + +extern void exec_system_cmd(const char *format, ...); + +extern int thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg); + +#endif diff --git a/program/serial2socket/thread_mode/cp_socket.c b/program/serial2socket/thread_mode/cp_socket.c new file mode 100644 index 0000000..7773281 --- /dev/null +++ b/program/serial2socket/thread_mode/cp_socket.c @@ -0,0 +1,357 @@ +/********************************************************************************* + * Copyright: (C) 2014 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_socket.c + * Description: This file + * + * Version: 1.0.0(11/18/2014) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/18/2014 11:15:04 PM" + * + ********************************************************************************/ +#include <stdio.h> +#include <unistd.h> +#include <string.h> +#include <netdb.h> +#include <unistd.h> +#include <fcntl.h> + +#include <sys/un.h> +#include <sys/types.h> +#include <linux/sockios.h> +#include <sys/ioctl.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> + +#include "cp_logger.h" +#include "cp_socket.h" + +int cp_sock_block_connect(cp_socket_t *sock, char *servaddr, unsigned short servport) +{ + int rv = -1; + int sock_fd = -1; + char service[20]; + struct addrinfo hints, *rp; + struct addrinfo *res = NULL; + struct in_addr inaddr; + char ipstr[20]; + int len; + + if(!sock || !servaddr || !servport ) + { + log_err("Invalid input argument\n"); + return -1; + } + + if(SOCK_STAT_CONNECTED == sock->status) + { + return 0; + } + + len = strlen(servaddr); + len = len>DOMAIN_MAX_LEN ? DOMAIN_MAX_LEN : len; + + memcpy(sock->servaddr, servaddr, strlen(servaddr)); + sock->servport = servport; + + log_nrml("Start socket connect to [%s:%d]...\n", sock->servaddr, sock->servport); + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_INET; /* Only support IPv4 */ + hints.ai_socktype = SOCK_STREAM; + + /* If Hostname is a valid IP address, then don't use name resolution */ + if( inet_aton(sock->servaddr, &inaddr) ) + { + log_info("%s is a valid IP address, don't use name resolution.\n", sock->servaddr); + hints.ai_flags |= AI_NUMERICHOST; + } + + /* Obtain address(es) matching servaddr/servport */ + snprintf(service, sizeof(service), "%d", sock->servport); + if( (rv=getaddrinfo(sock->servaddr, service, &hints, &res)) ) + { + log_err("getaddrinfo() parser [%s:%s] failed: %s\n", sock->servaddr, service, gai_strerror(rv)); + rv = -2; + goto out; + } + + /* getaddrinfo() returns a list of address structures. Try each address until connected */ + rv = -3; /* default return value set be connect failure */ + sock->status = SOCK_STAT_DISCONNECT; + for (rp=res; rp!=NULL; rp=rp->ai_next) + { + /* create the socket */ + sock_fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + if( sock_fd < 0) + { + log_err("socket() create failed: %s\n", strerror(errno)); + rv = -4; + continue; + } + + inet_ntop(AF_INET, &(((struct sockaddr_in *)(rp->ai_addr))->sin_addr), ipstr, sizeof(ipstr)); + log_dbg("DNS resolve IP address [%s]\n", ipstr); + + /* connect to the remote server successfully */ + if(0==connect(sock_fd, rp->ai_addr, rp->ai_addrlen)) + { + memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr)); + sock->fd = sock_fd; + sock->status = SOCK_STAT_CONNECTED; + rv = 0; + goto out; + } + else /* Connect to server failed. */ + { + rv = -5; + log_err("connect() to server IP[%s] failed: %s\n", ipstr, strerror(errno)); + } + + close(sock_fd); + } + + +out: + if( rv < 0 ) + { + log_err("create socket connect to [%s:%d] failed: %s\n", sock->servaddr, sock->servport, strerror(errno)); + sock->status = SOCK_STAT_DISCONNECT; + sock->fd = -1; + } + else + { + log_nrml("create socket connect to [%s:%d] successfully\n", sock->servaddr, sock->servport); + sock->status = SOCK_STAT_CONNECTED; + } + + if(res) + { + freeaddrinfo(res); + } + + return rv; +} + +int cp_sock_nonblock_connect(cp_socket_t *sock, char *servaddr, unsigned short servport) +{ + int rv = -1; + int sock_fd = -1; + char service[20]; + struct addrinfo hints, *rp; + struct addrinfo *res = NULL; + struct in_addr inaddr; + char ipstr[20]; + + if( !sock || !servaddr || !servport ) + { + log_err("Invalid input argument\n"); + return -1; + } + + if(SOCK_STAT_CONNECTED == sock->status) + { + return 0; + } + else if(SOCK_STAT_CONNECTING == sock->status) + { + goto connecting; + } + + log_nrml("Start socket connect to [%s:%d]...\n", sock->servaddr, sock->servport); + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_INET; /* Only support IPv4 */ + hints.ai_socktype = SOCK_STREAM; + + /* If Hostname is a valid IP address, then don't use name resolution */ + if( inet_aton(sock->servaddr, &inaddr) ) + { + log_info("%s is a valid IP address, don't use name resolution.\n", sock->servaddr); + hints.ai_flags |= AI_NUMERICHOST; + } + + /* Obtain address(es) matching servaddr/servport */ + snprintf(service, sizeof(service), "%d", sock->servport); + if( (rv=getaddrinfo(sock->servaddr, service, &hints, &res)) ) + { + log_err("getaddrinfo() parser [%s:%s] failed: %s\n", sock->servaddr, service, gai_strerror(rv)); + rv = -2; + goto failed; + } + + + /* getaddrinfo() returns a list of address structures. Try each + * address until we successfully connect or bind + */ + rv = -3; /* Connect failure */ + for (rp=res; rp!=NULL; rp=rp->ai_next) + { + /* Create the socket */ + sock_fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + if( sock_fd < 0) + { + log_err("socket() create failed: %s\n", strerror(errno)); + rv = -4; + continue; + } + + inet_ntop(AF_INET, &(((struct sockaddr_in *)(rp->ai_addr))->sin_addr), ipstr, sizeof(ipstr)); + log_dbg("DNS resolve IP address [%s]\n", ipstr); + + cp_sock_set_nonblock(sock_fd); + + /* Nono block Connect to the remote server */ + if(0==connect(sock_fd, rp->ai_addr, rp->ai_addrlen)) + { + /* Conenct to server successfully */ + memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr)); + sock->fd = sock_fd; + sock->status = SOCK_STAT_CONNECTED; + rv = 0; + goto connected; + } + else + { + if(EINPROGRESS == errno) + { + /* Connect to server now in progress */ + memcpy(&sock->saddr, &rp->ai_addr, sizeof(sock->saddr)); + sock->fd = sock_fd; + sock->status = SOCK_STAT_CONNECTING; + rv = 0; + goto connecting; + } + else + { + /* Connect to server failed. */ + close(sock_fd); + rv = -5; + log_err("connect() to server failed: %s\n", strerror(errno)); + goto failed; + } + } + + close(sock_fd); + } + + +failed: + log_err("create socket connect to [%s:%d] failed: %s\n", sock->servaddr, sock->servport, strerror(errno)); + sock->status = SOCK_STAT_DISCONNECT; + sock->fd = -1; + return rv; + +connecting: + if(SOCK_STAT_CONNECTING == sock->status) + { + int len; + + len = sizeof(sock->saddr); + + errno = 0; + if( 0 == connect(sock->fd, &sock->saddr, len) ) + { + /* connect() return 0 means it already connected */ + sock->status = SOCK_STAT_CONNECTED; + rv = 0; + goto connected; + } + + /* Connect failure will continue to check */ + switch (errno) + { + case EISCONN: + sock->status = SOCK_STAT_CONNECTED; + rv = 0; + goto connected; + + case EALREADY: + case EINPROGRESS: + log_dbg("socket[%d] connect to remote [%s:%d] in progress\n", sock->fd, sock->servaddr, sock->servport); + rv = 0; + goto cleanup; + + default: + log_err("socket[%d] connect to remote [%s:%d] failed: %s\n", sock->fd, sock->servaddr, sock->servport, strerror(errno)); + sock->status = SOCK_STAT_DISCONNECT; + rv = -7; + break; + } + } + +connected: + if(SOCK_STAT_CONNECTED == sock->status) + { + rv = 0; + log_nrml("socket[%d] connected to remote server [%s:%d]\n", sock->fd, sock->servaddr, sock->servport); + goto cleanup; + } + +cleanup: + if(res) + freeaddrinfo(res); /* No longer needed */ + + return rv; +} + + +int cp_sock_set_nonblock(int sockfd) +{ + int opts; + /* + * fcntl may set: + * + * EACCES, EAGAIN: Operation is prohibited by locks held by other + * processes. Or, operation is prohibited because the file has + * been memory-mapped by another process. + * EBADF: fd is not an open file descriptor, or the command was F_SETLK + * or F_SETLKW and the file descriptor open mode doesn't match + * with the type of lock requested. + * EDEADLK: It was detected that the specified F_SETLKW command would + * cause a deadlock. + * EFAULT: lock is outside your accessible address space. + * EINTR: For F_SETLKW, the command was interrupted by a signal. For + * F_GETLK and F_SETLK, the command was interrupted by a signal + * before the lock was checked or acquired. Most likely when + * locking a remote file (e.g. locking over NFS), but can + * sometimes happen locally. + * EINVAL: For F_DUPFD, arg is negative or is greater than the maximum + * allowable value. For F_SETSIG, arg is not an allowable signal + * number. + * EMFILE: For F_DUPFD, the process already has the maximum number of + * file descriptors open. + * ENOLCK: Too many segment locks open, lock table is full, or a remote + * locking protocol failed (e.g. locking over NFS). + * EPERM: Attempted to clear the O_APPEND flag on a file that has the + * append-only attribute set. + */ + opts = fcntl(sockfd, F_GETFL); + if (opts < 0) + { + log_warn("fcntl() get socket options failure: %s\n", strerror(errno)); + return -1; + } + + opts |= O_NONBLOCK; + if (fcntl(sockfd, F_SETFL, opts) < 0) + { + log_warn("fcntl() set socket options failure: %s\n", strerror(errno)); + return -1; + } + + log_dbg("Set socket[%d] none blocking\n", sockfd); + return opts; +} + + + +void cp_sock_close(cp_socket_t *sock) +{ + close(sock->fd); + sock->fd = 0; + sock->status = SOCK_STAT_INIT; +} + diff --git a/program/serial2socket/thread_mode/cp_socket.h b/program/serial2socket/thread_mode/cp_socket.h new file mode 100644 index 0000000..ada48c1 --- /dev/null +++ b/program/serial2socket/thread_mode/cp_socket.h @@ -0,0 +1,65 @@ +/******************************************************************************** + * Copyright: (C) 2014 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: cp_socket.h + * Description: This head file + * + * Version: 1.0.0(11/19/2014) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/19/2014 12:16:45 AM" + * + ********************************************************************************/ +#ifndef __CP_SOCKET_H_ +#define __CP_SOCKET_H_ + +#include <sys/types.h> +#include <sys/socket.h> + +#define DOMAIN_MAX_LEN 128 + +#define SOCK_STAT_INIT 0 +#define SOCK_STAT_CONNECTING 1 +#define SOCK_STAT_CONNECTED 2 +#define SOCK_STAT_DISCONNECT 3 + +typedef struct cp_socket_s +{ + char servaddr[DOMAIN_MAX_LEN]; /* connect server hostname or IP address */ + unsigned short servport; /* connect server port */ + int fd; /* socket fd */ + struct sockaddr saddr; /* sockaddr for none-block connect */ + unsigned char status; /* socket connect status: 0:disconnect 1:connecting 2:connected */ +} cp_socket_t; + + +/* Description: create socket object and connect to server in block mode + * $sock: socket object, if it's NULL will be malloced. + * $servaddr: connect server hostname or IP address + * $servport: connect to server port + * + * Return: socket object address + */ +extern int cp_sock_block_connect(cp_socket_t *sock, char * servaddr, unsigned short servport); + + +/* Description: set socket to none block mode */ +extern int cp_sock_set_nonblock(int sockfd); + +/* Description: create socket object and connect to server in none block mode + * $sock: socket object, if it's NULL will be malloced. + * $servaddr: connect server hostname or IP address + * $servport: connect to server port + * + * Return: 0: connecting or connected <0: connect failure + */ + +extern int cp_sock_nonblock_connect(cp_socket_t *sock, char * servaddr, unsigned short servport); + + +/* Description: close socket */ +extern void cp_sock_close(cp_socket_t *sock); + + +#endif + diff --git a/program/serial2socket/thread_mode/makefile b/program/serial2socket/thread_mode/makefile new file mode 100644 index 0000000..5819c95 --- /dev/null +++ b/program/serial2socket/thread_mode/makefile @@ -0,0 +1,70 @@ +#********************************************************************************* +# Copyright: (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com> +# All rights reserved. +# +# Filename: Makefile +# Description: This Makefile used to call function to compile all the C source +# in current folder and links all the objects file into a excutable +# binary file. +# +# Version: 1.0.0(10/08/2011~) +# Author: Guo Wenxue <guowenxue@gmail.com> +# ChangeLog: 1, Release initial version on "10/08/2011 01:29:33 AM" +# +#********************************************************************************/ + +PWD=$(shell pwd) +INSTPATH=/tftp + +APP_BINARY_NAME = sp2sck + +LDFLAGS+=-lpthread +CFLAGS+=-Wall -Werror + +VPATH= . +SRCS = $(wildcard ${VPATH}/*.c) +OBJS = $(patsubst %.c,%.o,$(SRCS)) + +CFLAGS+=-I${PWD} + +CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux- +export CC=${CROSS_COMPILE}gcc +export CXX=${CROSS_COMPILE}g++ +export AR=${CROSS_COMPILE}ar +export AS=${CROSS_COMPILE}as +export RANLIB=${CROSS_COMPILE}ranlib +export STRIP=${CROSS_COMPILE}strip +export CFLAGS +export LDFLAGS + + +all: entry $(APP_BINARY_NAME) + make install + +entry: + @echo " "; + @echo " ========================================================="; + @echo " ** Compile ${APP_BINARY_NAME} by ${CC} "; + @echo " ========================================================="; + +$(APP_BINARY_NAME): $(OBJS) + $(CC) -o $@ *.c ${LDFLAGS} + @$(STRIP) $(APP_BINARY_NAME) + +tag: + @ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R . + @cscope -Rbq + +install: + @cp $(APP_BINARY_NAME) ${INSTPATH} + +clean: + @rm -f *.o $(APP_BINARY_NAME) + @rm -rf *.gdb *.a *.so *.elf* + @rm -f *.log + +distclean: clean + @rm -f tags cscope* + +.PHONY: clean entry + diff --git a/program/serial2socket/thread_mode/sp2sck.c b/program/serial2socket/thread_mode/sp2sck.c new file mode 100644 index 0000000..0c29513 --- /dev/null +++ b/program/serial2socket/thread_mode/sp2sck.c @@ -0,0 +1,319 @@ +/********************************************************************************* + * Copyright: (C) 2018 LingYun IoT System Studio + * All rights reserved. + * + * Filename: sp2sck.c + * Description: This file is the serial port to socket converter + * + * Version: 1.0.0(2018年05月29日) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "2018年05月29日 21时03分54秒" + * + ********************************************************************************/ + +#include <libgen.h> +#include "cp_logger.h" +#include "cp_comport.h" +#include "cp_socket.h" +#include "cp_proc.h" +#include "sp2sck.h" + + +void *comport_worker(void *); +void *socket_worker(void *); + + +/* Show program version information, can used by 'sp2sck --version or sp2sck -v'*/ +static inline void prog_version(const char *progname) +{ + printf("%s Version 1.0.0 Build(%s)\n", progname, __DATE__); + return ; +} + + +/* Show program help information, can used by 'sp2sck --help or sp2sck -h'*/ +static void prog_usage(const char *progname) +{ + prog_version(progname); + + printf("Usage: %s [OPTION]...\n", progname); + printf("Receive date from a serial port and transfer the data to remote server by socket.\n"); + printf("\nMandatory arguments to long options are mandatory for short options too:\n"); + + printf(" -d[debug ] Running in debug mode\n"); + printf(" -l[level ] Set the log level as [0..%d]\n", LOG_LEVEL_MAX-1); + printf(" -c[comport ] Serial port device, default as /dev/ttyS1.\n"); + printf(" -b[baudrate] Baudrate, default as 115200.\n"); + printf(" -s[server ] Socket connect server host and port, format as: Hostname:Port, default as 127.0.0.1:8900\n"); + + printf(" -v[version ] Display program version\n"); + printf(" -h[help ] Display this help information\n"); + return ; +} + + +int main (int argc, char **argv) +{ + const char *progname=NULL; + + int opt; + int debug = 0; /* program running information log to stdard output */ + char pid_file[64] = { 0 }; /* The file used to record the PID */ + int log_level = LOG_LEVEL_TRACE; /* program running information log to file level */ + cp_logger *logger; + char *log_file="sp2sck.log"; /* program running information log file name */ + + char *devname = "/dev/ttyS1"; /* default serial port, can use '-c' option to change */ + unsigned long baudrate = 115200; /* default serial port baudrate, can use '-b' option to change */ + char *server="127.0.0.1:8900"; /* default connect server address, can use '-s' option to change */ + + + sp2sck_ctx_t ctx; + int rv; + pthread_t tid; + + memset(&ctx, 0, sizeof(ctx)); + + /* progranm command options */ + struct option long_options[] = { + {"debug", no_argument, NULL, 'd'}, /* sp2sck -d or sp2sck --debug, log to standard output or not */ + {"level", required_argument, NULL, 'l'}, /* sp2sck -l 7, specify log to file level */ + {"comport", required_argument, NULL, 'c'}, /* sp2sck -c /dev/ttyUSB0, specify serial port device name */ + {"baudrate", required_argument, NULL, 'b'}, /* sp2sck -b 115200, specify serial port baudrate */ + {"server", required_argument, NULL, 's'}, /* sp2sck -s 192.168.0.5:9999, specify server address and port */ + {"version", no_argument, NULL, 'v'}, /* sp2sck -v or sp2sck --version to check program version information */ + {"help", no_argument, NULL, 'h'}, /* sp2sck -h or sp2sck --help to get program help information */ + {NULL, 0, NULL, 0} /* array end flag */ + }; + + + progname = basename(argv[0]); + + + /* Parser the command line options */ + while ((opt = getopt_long(argc, argv, "c:b:s:dl:vh", long_options, NULL)) != -1) + { + switch (opt) + { + case 'c': /* sp2sck -c /dev/ttyUSB0 */ + devname = optarg; + break; + + case 'b': /* sp2sck -b 115200 */ + baudrate = atol(optarg); + break; + + case 's': /* sp2sck -s 192.168.0.5:9999 */ + server=optarg; + break; + + case 'd': /* sp2sck -d or sp2sck --debug */ + debug = 1; + log_file = DBG_LOG_FILE; + break; + + case 'l': /* sp2sck -l 7 */ + rv = atoi(optarg); + log_level = rv>LOG_LEVEL_MAX ? LOG_LEVEL_MAX-1 : rv; + break; + + case 'v': /* sp2sck -v */ + prog_version(progname); + return EXIT_SUCCESS; + + case 'h': /* sp2sck -h */ + prog_usage(progname); + return 0; + + default: + break; + } /* end of "switch(opt)" */ + } + + + + /* parser hostname and port by server*/ + { + char *ptr; + + ptr=strchr(server, ':'); + if( !ptr ) + { + printf("Invalid server host[%s], which format should be [HostName:Port] such as \"127.0.0.1:8900\"", server); + return -1; + } + + strncpy(ctx.hostname, server, ptr-server); + ctx.port = atoi(&ptr[1]); + } + + printf("Serial[%s] and server[%s:%d] converter start\n", devname, ctx.hostname, ctx.port); + + + /* check program already running on background or not */ + if( !debug ) + { + snprintf(pid_file, sizeof(pid_file), "/var/run/%s.pid", progname); + if( check_daemon_running(pid_file) ) + { + printf("Programe already running, exit now.\n"); + return -1; + } + } + + + /* initialise logger system */ + if( !(logger=cp_log_init(NULL, log_file, log_level, 0)) || cp_log_open()<0 ) + { + printf("Init logger system failed, program exit now...\n"); + return -1; + } + log_nrml("Serial[%s] and server[%s] converter start\n", devname, server); + + if( NULL == (ctx.comport=comport_init(devname, baudrate, "8N1N")) ) + { + log_err("initial serial port failure\n"); + return -1; + } + + /* set program running in background */ + if( !debug ) + { + if( set_daemon_running(pid_file) ) + { + log_fatal("Set program \"%s\" running as daemon failure.\n", progname); + return -2; + } + } + + /* install signal process handler */ + cp_install_proc_signal(); + + + /* start serial port data process thread */ + thread_start(&tid, comport_worker, &ctx); + + + /* start socket data process thread */ + thread_start(&tid, socket_worker, &ctx); + + + while( !g_cp_signal.stop ) + { + /* control/main thread do nothing here */ + sleep(1); + } + + return 0; +} + + +void *comport_worker(void *arg) +{ + sp2sck_ctx_t *ctx = (sp2sck_ctx_t *)arg; + cp_comport_t *comport; + cp_socket_t *socket; + char buf[1024]; + int rv = 0; + + if( !ctx ) + { + log_err("Invalid arguments\n"); + return NULL; + } + + comport = ctx->comport; + socket = &ctx->socket; + + log_nrml("Thread worker for comport start\n"); + + while( !g_cp_signal.stop ) + { + if( ctx->comport->connected ) + { + rv=comport_open(ctx->comport); + if( 0 == rv ) + log_nrml("open serial port \"%s\" successfully\n", ctx->comport->dev_name); + else + log_err("open serial port \"%s\" failure, rv=%d\n", ctx->comport->dev_name, rv); + } + + + if( !comport->connected || SOCK_STAT_CONNECTED != socket->status ) + { + continue; + } + + rv=comport_recv(comport, buf, sizeof(buf), 1000); + if( rv > 0 ) + { + log_nrml("Recive %d bytes data from comport[%s] and will write to socket[%s:%d]\n", + rv, comport->dev_name, socket->servaddr, socket->servport); + cp_log_dump(LOG_LEVEL_DEBUG, buf, rv); + + write(socket->fd, buf, rv); + } + } + + return NULL; +} + + +void *socket_worker(void *arg) +{ + sp2sck_ctx_t *ctx = (sp2sck_ctx_t *)arg; + cp_comport_t *comport; + cp_socket_t *socket; + char buf[1024]; + int rv = 0; + + + if( !ctx ) + { + log_err("Invalid arguments\n"); + return NULL; + } + + comport = ctx->comport; + socket = &ctx->socket; + + log_nrml("Thread worker for socket start\n"); + + while( !g_cp_signal.stop ) + { + + if( SOCK_STAT_CONNECTED != ctx->socket.status ) + { + printf("start block connect\n"); + rv=cp_sock_block_connect(&ctx->socket, ctx->hostname, ctx->port); + if( rv<0 ) + log_err("connect to server [%s:%d] return rv=%d\n", ctx->socket.servaddr, ctx->socket.servport, rv); + else + log_nrml("connect to server [%s:%d] successfully\n", ctx->socket.servaddr, ctx->socket.servport); + } + + + if( !comport->connected || SOCK_STAT_CONNECTED != socket->status ) + { + continue; + } + + rv=read(socket->fd, buf, sizeof(buf)); + if( rv > 0 ) + { + log_nrml("Recive %d bytes data from socket[%s:%d] and will write to comport[%s]\n", + rv, socket->servaddr, socket->servport, comport->dev_name); + cp_log_dump(LOG_LEVEL_DEBUG, buf, rv); + + comport_send(comport, buf, rv); + } + else if( 0==rv ) + { + log_warn("Remove socket server disconnect\n"); + socket->status = SOCK_STAT_DISCONNECT; + } + } + + return NULL; +} + diff --git a/program/serial2socket/thread_mode/sp2sck.h b/program/serial2socket/thread_mode/sp2sck.h new file mode 100644 index 0000000..52722cc --- /dev/null +++ b/program/serial2socket/thread_mode/sp2sck.h @@ -0,0 +1,31 @@ +/******************************************************************************** + * Copyright: (C) 2018 LingYun IoT System Studio + * All rights reserved. + * + * Filename: sp2sck.h + * Description: This head file + * + * Version: 1.0.0(2018年05月29日) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "2018年05月29日 21时05分43秒" + * + ********************************************************************************/ + +#ifndef _SP2SCK_H_ +#define _SP2SCK_H_ + +#include "cp_comport.h" +#include "cp_socket.h" + + +typedef struct sp2sck_ctx_s +{ + char hostname[DOMAIN_MAX_LEN]; /* socket connect server address */ + unsigned short port; /* socket connect server port */ + + cp_comport_t *comport; /* serial port context, include fd */ + cp_socket_t socket; /* socket port context, include fd */ +} sp2sck_ctx_t; /*--- end of struct sp2sck_ctx_s ---*/ + + +#endif /* ----- #ifndef _SP2SCK_H_ ----- */ diff --git a/program/sqlite/build.sh b/program/sqlite/build.sh new file mode 100644 index 0000000..68ceab0 --- /dev/null +++ b/program/sqlite/build.sh @@ -0,0 +1,124 @@ +#!/bin/bash + +#+-------------------------------------------------------------------------------------------- +#|Description: This shell script used to download SQLite code and cross compile it. +#| Author: GuoWenxue <guowenxue@gmail.com> +#| ChangeLog: +#| 1, Initialize 1.0.0 on 2011.12.26 +#+-------------------------------------------------------------------------------------------- + +PRJ_PATH=`pwd` + +APP_NAME="sqlite-autoconf-3071401" +PACK_SUFIX="tar.gz" +DL_ADDR="http://www.sqlite.org//$APP_NAME.$PACK_SUFIX" +PREFIX_PATH=$PRJ_PATH/sqlite3 + +#ARCH=arm926t +CROSS= + +sup_arch=("" "arm926t" "arm920t" ) + +function select_arch() +{ + echo "Current support ARCH: " + i=1 + len=${#sup_arch[*]} + + while [ $i -lt $len ]; do + echo "$i: ${sup_arch[$i]}" + let i++; + done + + echo "Please select: " + index= + read index + ARCH=${sup_arch[$index]} +} + + +function decompress_packet() +( + echo "+---------------------------------------------+" + echo "| Decompress $1 now" + echo "+---------------------------------------------+" + + ftype=`file "$1"` + case "$ftype" in + "$1: Zip archive"*) + unzip "$1" ;; + "$1: gzip compressed"*) + if [ 0 != `expr "$1" : ".*.tar.*" ` ] ; then + tar -xzf $1 + else + gzip -d "$1" + fi ;; + "$1: bzip2 compressed"*) + if [ 0 != `expr "$1" : ".*.tar.*" ` ] ; then + tar -xjf $1 + else + bunzip2 "$1" + fi ;; + "$1: POSIX tar archive"*) + tar -xf "$1" ;; + *) + echo "$1 is unknow compress format";; + esac +) + +if [ -z $ARCH ] ; then + select_arch +fi + +if [ "i386" == $ARCH ] ; then + CROSS= +else + CROSS="/opt/buildroot-2012.08/${ARCH}/usr/bin/arm-linux-" +fi + +export CC=${CROSS}gcc +export CXX=${CROSS}g++ +export AR=${CROSS}ar +export AS=${CROSS}as +export LD=${CROSS}ld +export NM=${CROSS}nm +export RANLIB=${CROSS}ranlib +export STRIP=${CROSS}strip +unset CFLAGS +unset LDFLAGS + +if [ ! -d $PREFIX_PATH/lib ] ; then + mkdir -p $PREFIX_PATH +else + echo "$APP_NAME already cross compiled, exit now..." + exit; +fi + +# Download source code packet +if [ ! -s $APP_NAME.$PACK_SUFIX ] ; then + echo "+------------------------------------------------------------------+" + echo "| Download $APP_NAME.$PACK_SUFIX now " + echo "+------------------------------------------------------------------+" + wget $DL_ADDR +fi + +# Decompress source code packet +if [ ! -d $APP_NAME ] ; then + decompress_packet $APP_NAME.$PACK_SUFIX +fi + +echo "+------------------------------------------------------------------+" +echo "| Build $APP_NAME for $ARCH " +echo "| Crosstool: $CROSS" +echo "+------------------------------------------------------------------+" + +cd $APP_NAME + set -x + ./configure --host=arm-linux --enable-static --prefix=$PREFIX_PATH + make + make install + $STRIP $PREFIX_PATH/bin/sqlite3 +cd - + +rm -rf $APP_NAME + diff --git a/program/sqlite/makefile b/program/sqlite/makefile new file mode 100644 index 0000000..80500fe --- /dev/null +++ b/program/sqlite/makefile @@ -0,0 +1,123 @@ +#********************************************************************************* +# Copyright: (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com QQ:281143292> +# All rights reserved. +# +# Filename: Makefile +# Description: This Makefile used to call function to compile all the C source +# in current folder and links all the objects file into a excutable +# binary file. +# +# Version: 1.0.0(10/08/2011~) +# Author: Guo Wenxue <guowenxue@gmail.com> +# ChangeLog: 1, Release initial version on "10/08/2011 01:29:33 AM" +# +#********************************************************************************/ + +PWD=$(shell pwd) +INSTPATH=/tftp + +APP_BINARY_NAME = test_sqlite +ARCH?=i386 +#ARCH?=arm926t + +LINK_MODE=STATIC +MODE=PRODUCTION +DEBUG=1 + +#CFLAGS+=-Wall -Werror + +CFLAGS+=-Isqlite3/include +LDFLAGS+=-Lsqlite3/lib/ -lsqlite3 + +ifeq ("${MODE}", "PRODUCTION") + CFLAGS+=-DPRODUCTION_MODE +endif +ifdef DEBUG + CFLAGS+=-g -DDEBUG +endif + +COMPILE_DATE=$(shell date -u +"%Y-%m-%d %H:%M") +VPATH= . +SRCS = $(wildcard ${VPATH}/*.c) +OBJS = $(patsubst %.c,%.o,$(SRCS)) + +TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]") +ifneq (,$(filter i386,$(TMP))) + CROSS_COMPILE= +else + CROSS_COMPILE=/opt/buildroot-2012.08/$(ARCH)/usr/bin/arm-linux- + +endif + +CFLAGS+=-I${PWD} + +export CC=${CROSS_COMPILE}gcc +export CXX=${CROSS_COMPILE}g++ +export AR=${CROSS_COMPILE}ar +export AS=${CROSS_COMPILE}as +export RANLIB=${CROSS_COMPILE}ranlib +export STRIP=${CROSS_COMPILE}strip + +export CFLAGS +export LDFLAGS +export ARCH +export LINK_MODE + +ifeq ("${LINK_MODE}", "STATIC") + CFLAGS+=--static + LDFLAGS+=-static +else + LDFLAGS+=-ldl +endif + +LDFLAGS+=-lpthread -ldl + +all: entry version $(APP_BINARY_NAME) + +entry: + @echo " "; + @echo " ========================================================="; + @echo " ** Compile ${APP_BINARY_NAME} for ${ARCH} "; + @echo " ========================================================="; + bash build.sh + +version: + @echo "/* Generated by makefile, don't Edit it by hand */" > version.h + @echo "#define DATE \"$(COMPILE_DATE)\"" >> version.h + @echo "#define MAJOR 1" >>version.h + @echo "#define MINOR 0" >>version.h + @echo "#define REVER 0" >>version.h + @if [ -f .svn/entries ] ; then \ + echo "#define SVNVER `sed -n -e 11p .svn/entries`" >>version.h; \ + else \ + echo "#define SVNVER 0" >>version.h; \ + fi; + @echo "" >> version.h + @echo '#define version(progname) printf("%s Version %d.%d.%d Build @%05d (%s)\n", progname, MAJOR, MINOR, REVER,SVNVER, DATE)' >> version.h + @echo '#define copyright() printf("Copyright: (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com QQ:281143292>\n")' >>version.h + @echo '#define banner(progname) {version(progname); copyright(); printf("\n");}' >>version.h + @echo "" >> version.h + +$(APP_BINARY_NAME): $(OBJS) + $(CC) -o $@ $(OBJS) $(LDFLAGS) + $(STRIP) $(APP_BINARY_NAME) + +%.o : %.c + $(CC) -c $< $(CFLAGS) + +tag: + @ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R . + @cscope -Rbq + +install: + @cp $(APP_BINARY_NAME) ${INSTPATH} + +clean: + @rm -f version.h + @rm -f *.o $(APP_BINARY_NAME) + @rm -rf *.gdb *.a *.so *.elf* + +distclean: clean + @rm -f tags cscope* + +.PHONY: clean entry diff --git a/program/sqlite/test_sqlite.c b/program/sqlite/test_sqlite.c new file mode 100644 index 0000000..b2097f1 --- /dev/null +++ b/program/sqlite/test_sqlite.c @@ -0,0 +1,150 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<guowenxue@gmail.com> + * All rights reserved. + * + * Filename: sqlite_test.c + * Description: This file + * + * Version: 1.0.0(11/29/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "11/29/2012 10:09:29 AM" + * + ********************************************************************************/ + +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +#include <sqlite3.h> + +#define SQL_CMD_LEN 256 + +int data_callback(void * para, int n_column, char ** column_value, char ** column_name) +{ + char *arg = (char *)para; + int i; + + printf("%s", arg); + + for(i=0; i<n_column; i++) + { + printf("%4s: %s\n", column_name[i], column_value[i]); + } + + return 0; +} + +/******************************************************************************** + * Description: + * Input Args: + * Output Args: + * Return Value: + ********************************************************************************/ +int main (int argc, char **argv) +{ + int rv; + sqlite3 *db; + char *errmsg = NULL; + char sqlcmd[SQL_CMD_LEN]; + + /* open the database.db, if it not exist then create it */ + if(SQLITE_OK != (rv=sqlite3_open("database.db", &db)) ) + { + printf("Open/create database failed\n"); + return -1; + } + + /* create a table if it doesn't exist */ + strncpy(sqlcmd, "create table if not exists cplus(ID integer primary key autoincrement, name nvarchar(32), time not null default current_timestamp)", sizeof(sqlcmd)); + if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, NULL, NULL, &errmsg)) ) + { + printf("create ID table failed [%d]: %s\n", rv, errmsg); + sqlite3_free(errmsg); + } + + //snprintf(sqlcmd, sizeof(sqlcmd), "insert into cplus(name) values('%s')", "guowenxue"); + snprintf(sqlcmd, sizeof(sqlcmd), "insert into cplus values(1, '%s', datetime('2012-01-01 20:35:10'))", "guowenxue"); + if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, NULL, NULL, &errmsg)) ) + { + printf("Add item into cplus failed [%d]: %s\n", rv, errmsg); + sqlite3_free(errmsg); + } + + //snprintf(sqlcmd, sizeof(sqlcmd), "insert into cplus(name) values('%s')", "jason"); + snprintf(sqlcmd, sizeof(sqlcmd), "insert into cplus values(2, '%s', datetime('now'))", "jason"); + if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, NULL, NULL, &errmsg)) ) + { + printf("Add item into cplus failed [%d]: %s\n", rv, errmsg); + sqlite3_free(errmsg); + } + + //snprintf(sqlcmd, sizeof(sqlcmd), "insert into cplus(name) values('%s')", "adrian"); + snprintf(sqlcmd, sizeof(sqlcmd), "insert into cplus values(3, '%s', datetime('now'))", "adrian"); + if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, NULL, NULL, &errmsg)) ) + { + printf("Add item into cplus failed [%d]: %s\n", rv, errmsg); + sqlite3_free(errmsg); + } + + strncpy(sqlcmd, "select * from cplus", sizeof(sqlcmd)); + if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, data_callback, "\n==== Query all the items ====\n", &errmsg)) ) + { + printf("Query all items from cplus failed [%d]: %s\n", rv, errmsg); + sqlite3_free(errmsg); + } + + strncpy(sqlcmd, "select * from cplus where name='guowenxue'", sizeof(sqlcmd)); + if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, data_callback, "\n==== Query all guowenxue ====\n", &errmsg)) ) + { + printf("Query guowexue from cplus failed [%d]: %s\n", rv, errmsg); + sqlite3_free(errmsg); + } + + printf("\n==== delete all guowenxue in the table ====\n"); + strncpy(sqlcmd, "delete from cplus where name='guowenxue'", sizeof(sqlcmd)); + if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, NULL, NULL, &errmsg)) ) + { + printf("Delete guowenxue from cplus failed [%d]: %s\n", rv, errmsg); + sqlite3_free(errmsg); + } + + strncpy(sqlcmd, "select * from cplus", sizeof(sqlcmd)); + if(SQLITE_OK != (rv=sqlite3_exec(db, sqlcmd, data_callback, "\n==== Query all the items ====\n", &errmsg)) ) + { + printf("Query all items from cplus failed [%d]: %s\n", rv, errmsg); + sqlite3_free(errmsg); + } + + { + char **result; + int rows, cols; + int i, j, index; + + strncpy(sqlcmd, "select * from cplus", sizeof(sqlcmd)); + if(SQLITE_OK != (rv=sqlite3_get_table(db, sqlcmd, &result, &rows, &cols, &errmsg)) ) + { + printf("%s command failed: %s\n", sqlcmd, errmsg); + } + + printf("rows:%d cols:%d\n", rows, cols); + + index = cols; + + for(i=0; i<rows; i++) + { + for(j=0; j<cols; j++) + { + printf("KeyName: %4s KeyValue: %s\n", result[j], result[index]); + index ++; + } + } + + sqlite3_free_table(result); + } + +cleanup: + sqlite3_close(db); + return 0; +} /* ----- End of main() ----- */ + diff --git a/program/unp/makefile b/program/unp/makefile new file mode 100644 index 0000000..8799991 --- /dev/null +++ b/program/unp/makefile @@ -0,0 +1,79 @@ +#********************************************************************************* +# Copyright: (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com QQ:281143292> +# All rights reserved. +# +# Filename: Makefile +# Description: This Makefile used to compile all the C source code file in current +# folder to respective excutable binary files. +# +# Version: 1.0.0(2012.06.08~) +# Author: Guo Wenxue <guowenxue@gmail.com> +# ChangeLog: 1, Release initial version on "Fri Jun 8 16:07:36 CST 2012" +# +#********************************************************************************/ + +PWD=$(shell pwd) +INSTPATH=/tftp + +ARCH?=i386 +#ARCH?=arm920t + +LDFLAGS+=-lpthread +#CFLAGS+=-Wall -Werror + +VPATH= . +SRCS = $(wildcard ${VPATH}/*.c) +OBJS = $(patsubst %.c,%.o,$(SRCS)) + +TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]") +ifneq (,$(filter i386,$(TMP))) + CROSS_COMPILE= +else + CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-linux- +endif + +CFLAGS+=-I${PWD} +#CFLAGS+=-DCONFIG_VERIFY_USER + +export CC=${CROSS_COMPILE}gcc +export CXX=${CROSS_COMPILE}gcc +export AR=${CROSS_COMPILE}ar +export AS=${CROSS_COMPILE}as +export RANLIB=${CROSS_COMPILE}ranlib +export STRIP=${CROSS_COMPILE}strip +export CFLAGS +export LDFLAGS + +SRCFILES = $(wildcard *.c) +BINARIES=$(SRCFILES:%.c=%) + +all: entry binaries install +entry: + @echo " "; + @echo " ========================================================="; + @echo " ** Compile \"${BINARIES}\" for ${ARCH} "; + @echo " ========================================================="; + +binaries: ${BINARIES} + @echo " Compile over" + +%: %.c + $(CC) -o $@ $< $(CFLAGS) ${LDFLAGS} + +tag: + @ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R . + @cscope -Rbq + +install: + cp $(BINARIES) ${INSTPATH} + +clean: + @rm -f version.h + @rm -f *.o $(BINARIES) + @rm -rf *.gdb *.a *.so *.elf* + +distclean: clean + @rm -f tags cscope* + +.PHONY: clean entry + diff --git a/program/unp/socket_client.c b/program/unp/socket_client.c new file mode 100644 index 0000000..a257460 --- /dev/null +++ b/program/unp/socket_client.c @@ -0,0 +1,209 @@ +/********************************************************************************* + * Copyright: (C) 2018 LingYun I.o.T Studio <www.iot-yun.com> + * All rights reserved. + * + * Filename: socket_client.c + * Description: This is a sample socket client demo program. + * Usage: socket_client -i 192.168.2.18 -p 6666 + * + * Version: 1.0.0(06/08/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "06/08/2012 02:50:51 PM" + * + ********************************************************************************/ + +/* Some Unix Program Standard head file */ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <getopt.h> /* getopt_long */ +#include <libgen.h> /* getopt_long */ + +/* Socket Program head file */ +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> /* sockaddr_in{} and other Internet define */ + +#include <errno.h> /* strerror(), perror(), errno head file*/ +#include <arpa/inet.h> /* For inet_pton() */ + +#define MAX_BUF_SIZE 1024 + +#define LOGON_INFO "lingyun:www.iot-yun.com" + +#define MAJOR 1 +#define MINOR 0 +#define REVER 0 + +void print_version(char *progname) +{ + printf("%s Version 1.0.0\n", progname); + printf("Copyright (C) 2012 Guo Wenxue<guowenxue@gmail.com>.\n"); + return; +} + +void print_usage(char *progname) +{ + print_version(progname); + + printf("Usage: %s [OPTION]...\n", progname); + printf(" %s is a socket client test program, which used to logon server and send string to server\n", progname); + + printf("\nMandatory arguments to long options are mandatory for short options too:\n"); + + printf(" -i[ipaddr ] Socket server IP address\n"); + printf(" -p[port ] Socket server port address\n"); + printf(" -h[help ] Display this help information\n"); + printf(" -v[version ] Display the program version\n"); + + printf("\nExample: %s -i 192.168.2.18 -p 8900\n", progname); + return ; +} + + +/* Argc is the program linux running command arguments count, and argv is + * the arguments string value. All of the arguments take as string. + */ +int main(int argc, char **argv) +{ + int sockfd, len, rv; + int opt; + char *progname = NULL; + char *server_ip = NULL; + unsigned short server_port = 0; + char buf[MAX_BUF_SIZE]; + struct sockaddr_in servaddr; + + struct option long_options[] = + { + {"ipaddr", required_argument, NULL, 'i'}, + {"port", required_argument, NULL, 'p'}, + {"version", no_argument, NULL, 'v'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} + }; + + progname = basename(argv[0]); + + /* Parser the command line parameters */ + while ((opt = getopt_long(argc, argv, "i:p:vh", long_options, NULL)) != -1) + { + switch (opt) + { + case 'p': + server_port = atoi(optarg); + break; + + case 'i': + server_ip = optarg; + break; + + case 'v': + print_version(progname); /* Defined in version.h */ + return EXIT_SUCCESS; + + case 'h': /* Get help information */ + print_usage(progname); + return EXIT_SUCCESS; + + default: + break; + } + } + + if(NULL==server_ip || 0==server_port) + { + print_usage(progname); + return -1; + } + + /* Open an IPV4(AF_INET) TCP(SOCK_STREAM) Socket File Description, UDP socket should + * use SOCK_DGRAM,We can use linux command "man socket" to see this function manual + */ + if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) + { + /* strerror() is the 1st way to display the failure reason, argument + * errno is a globle variable defined in <errno.h>, we can use linux command + * "man strerror" to see this function manual*/ + printf("Use socket() to create a TCP socket failure: %s\n", strerror(errno)); + return -1; + } + + /* Now we set the Server Information, include IPV4 or IPV6, Server Port, Server IP address */ + memset(&servaddr, 0, sizeof(servaddr)); + servaddr.sin_family = AF_INET; /* Set it as IPV4 protocal */ + servaddr.sin_port = htons(server_port); /*Server port*/ + + /* argv[1] we take as Server IP address, it's the second arguments in running command */ + if (inet_pton(AF_INET, server_ip, &servaddr.sin_addr) <= 0) + { + printf("Use inet_pton() to set the Server IP address failure.\n"); + rv = -2; + goto CleanUp; + } + + /* Now call connect() function to connect to the server, we can use linux command "man connect" + * to see this function manual */ + if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) + { + printf("Connect to the server [%s:%d] failure: %s\n", server_ip, server_port, strerror(errno)); + rv = -3; + goto CleanUp; + } + printf("Connect to Server [%s:%d] ok\n", server_ip, server_port); + +#ifdef CONFIG_VERIFY_USER + if( write(sockfd, LOGON_INFO, strlen(LOGON_INFO)) < 0) + { + printf("Write logon information to server failure: %s\n", strerror(errno)); + goto CleanUp; + } + + /* Once we connect to the server successfully, we can receive the data from the socket socekt */ + memset(buf, 0, sizeof(buf)); + if( (len = read(sockfd, buf, MAX_BUF_SIZE)) < 0) + { + printf("socket read data from server[%s] failure:%s\n", server_ip, strerror(errno)); + goto CleanUp; + } + else if( 0 == len ) + { + printf("logon to server[%s] failure and socket disconnected\n", server_ip); + goto CleanUp; + } + + /* socket read data from server */ + if( strncasecmp(buf, "passed", 6) ) + { + printf("Logon to server[%s] failure: %s\n", server_ip, buf); + goto CleanUp; + } + printf("Logon to server successfully!\n"); +#endif + + while(1) + { + printf("\nplease input string to send to server:\n==> "); + + memset(buf, 0, sizeof(buf)); + fgets(buf, sizeof(buf), stdin); + write(sockfd, buf, strlen(buf)); + + memset(buf, 0, sizeof(buf)); + rv=read(sockfd, buf, sizeof(buf)); + if(rv <= 0) + { + printf("ERROR:socket disconnected or get error\n"); + goto CleanUp; + } + + printf("<== %s\n", buf); + } + + +CleanUp: + close(sockfd); /* We must close socket File Description when program exit*/ + return 0; +} + diff --git a/program/unp/socket_server_select.c b/program/unp/socket_server_select.c new file mode 100644 index 0000000..cb81e7e --- /dev/null +++ b/program/unp/socket_server_select.c @@ -0,0 +1,435 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com QQ:281143292> + * All rights reserved. + * + * Filename: date_time_server.c + * Description: This is a sample socket server demo program. + * + * Version: 1.0.0(06/08/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "06/08/2012 02:50:51 PM" + * + ********************************************************************************/ + +/* Some Unix Program Standard head file */ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <pthread.h> +#include <getopt.h> /* getopt_long */ +#include <libgen.h> /* getopt_long */ + +/* Socket Program head file */ +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> /* sockaddr_in{} and other Internet define */ + +/* strerror(), perror(), errno head file*/ +#include <errno.h> +#include <time.h> + + +#define LISTENQ 1024 /* 2nd argument to listen () */ + +#define DEF_USER "lingyun" +#define DEF_PASSWD "www.iot-yun.com" + + +typedef struct link_node_s +{ + int fd; /* server/client socket fd */ + int logon; /* client socket logon or not */ + struct link_node_s *next; +} link_node_t; + + +int socket_server_init(char *listen_ip, int listen_port); +int proc_client_socket(link_node_t **head, fd_set *rdset ); + +static inline msleep(unsigned long ms) +{ + struct timeval tv; + + tv.tv_sec = ms/1000; + tv.tv_usec = (ms%1000)*1000; + + select(0, NULL, NULL, NULL, &tv); +} + + +void print_usage(char *progname) +{ + printf("Usage: %s [OPTION]...\n", progname); + + printf(" %s is a socket server program, which used to verify client and echo back string from it\n", progname); + printf("\nMandatory arguments to long options are mandatory for short options too:\n"); + + printf(" -b[daemon ] set program running on background\n"); + printf(" -p[port ] Socket server port address\n"); + printf(" -h[help ] Display this help information\n"); + + + printf("\nExample: %s -b -p 8900\n", progname); + return ; +} + + +int main(int argc, char **argv) +{ + int listenfd, connfd; + int serv_port = 0; + int daemon_run = 0; + char *progname = NULL; + pthread_t tid; + int opt; + fd_set rdset; + link_node_t *client_list = NULL; /* client fd link list, we will not use arrary for it get max client limite */ + int rv; + + struct option long_options[] = + { + {"daemon", no_argument, NULL, 'b'}, + {"port", required_argument, NULL, 'p'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} + }; + + progname = basename(argv[0]); + + /* Parser the command line parameters */ + while ((opt = getopt_long(argc, argv, "bp:h", long_options, NULL)) != -1) + { + switch (opt) + { + case 'b': + daemon_run=1; + break; + + case 'p': + serv_port = atoi(optarg); + break; + + case 'h': /* Get help information */ + print_usage(progname); + return EXIT_SUCCESS; + + default: + break; + } + } + + if( !serv_port ) + { + print_usage(progname); + return -1; + } + + if( (listenfd=socket_server_init(NULL, serv_port)) < 0 ) + { + printf("ERROR: %s server listen on port %d failure\n", argv[0],serv_port); + return -2; + } + printf("%s server start to listen on port %d\n", argv[0],serv_port); + + + if( daemon_run ) /* set program running on background */ + { + daemon(0, 0); + } + + + printf("add listen socket[%d] into client list\n", listenfd ); + add_fd_list(&client_list, listenfd); + + for ( ; ; ) + { + rv=start_select_listen(client_list, &rdset); + if(rv < 0) + { + printf("select get error: %s\n", strerror(errno)); + break; + } + else if(rv == 0) + { + printf("seelct get timeout\n"); + continue; + } + + + /* some client get read event happened */ + if ( FD_ISSET(listenfd, &rdset) ) /* listen socket get event means new client require connect */ + { + if( (connfd=accept(listenfd, (struct sockaddr *)NULL, NULL)) <= 0) + { + printf("accept new client failure: %s\n", strerror(errno)); + continue; + } + + printf("accept new client[%d] and add it into client list\n", connfd ); + add_fd_list(&client_list, connfd); + } + else /* already connected socket client send data arrive */ + { + proc_client_socket(&client_list, &rdset); + } + } + +CleanUp: + close(listenfd); /* We must close socket File Description when program exit*/ + return 0; +} + +int socket_server_init(char *listen_ip, int listen_port) +{ + struct sockaddr_in servaddr; + int listenfd = -1; + int on = 1; + + /* + * Open an IPV4(AF_INET) TCP(SOCK_STREAM) Socket File Description(listenfd), UDP socket + * should use SOCK_DGRAM,We can use linux command "man socket" to see this function manual + */ + if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) + { + /* strerror() is the 1st way to display the failure reason, argument + * errno is a globle variable defined in <errno.h>, we can use linux command + * "man strerror" to see this function manual*/ + printf("Use socket() to create a TCP socket failure: %s\n", strerror(errno)); + return -1; + } + + /* Set socket port reuseable */ + setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); + + /* Now we set the Server Information, include IPV4 or IPV6, Listen IP address and Port */ + memset(&servaddr, 0, sizeof(servaddr)); + servaddr.sin_family = AF_INET; /* Set it as IPV4 protocal */ + + /* set listen IP address */ + if( !listen_ip ) + { + /* Listen all the local IP address */ + servaddr.sin_addr.s_addr = htonl(INADDR_ANY); + } + else + { + /* listen the specified IP address */ + if (inet_pton(AF_INET, listen_ip, &servaddr.sin_addr) <= 0) + { + printf("inet_pton() set listen IP address failure.\n"); + listenfd = -2; + goto CleanUp; + } + } + + servaddr.sin_port = htons(listen_port); /* set listen port */ + + /* + * When a socket is created with socket(2), it exists in a name space (address family) but + * has no address assigned to it. bind() assigns the address specified to by addr to the + * socket referred to by the file descriptor listenfd. We can use Linux command "man 2 bind" + * to see this function manual. + */ + if(bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) + { + printf("Use bind() to bind the TCP socket failure: %s\n", strerror(errno)); + listenfd = -3; + goto CleanUp; + } + + /* + * listen() marks the socket referred to by listenfd as a passive socket, that is, as a socket + * that will be used to accept incoming connection requests using accept(2). We can use Linux + * command "man listen" to see this function manual. + */ + if(listen(listenfd, LISTENQ) < 0) + { + printf("Use bind() to bind the TCP socket failure: %s\n", strerror(errno)); + listenfd = -4; + goto CleanUp; + } + +CleanUp: + return listenfd; + +} + +int start_select_listen(link_node_t *head, fd_set *set) +{ + link_node_t *node; + int maxfd=0; + + if(!head || !set) + return -2; + + FD_ZERO(set); + + for( node=head; node!=NULL; node=node->next ) + { + maxfd = node->fd>maxfd ? node->fd : maxfd; + FD_SET(node->fd, set); + } + + /* program will block here */ + return select(maxfd+1, set, NULL, NULL, NULL); +} + +int add_fd_list(link_node_t **head, int fd) +{ + link_node_t *node; + link_node_t *tmp; + + if( NULL == (node=(link_node_t *)malloc(sizeof(*node))) ) + { + printf("malloc for new node failure\n"); + return -1; + } + + memset(node, 0, sizeof(*node)); + node->fd = fd; + node->next = NULL; + + if( *head == NULL ) + { + *head = node; + return 0; + } + + tmp = *head; + while( tmp->next != NULL ) + { + tmp=tmp->next; + } + + tmp->next = node; +} + + +int destroy_fd_list(link_node_t **head) +{ + +} + + +char *fail_str[3]={"Verify user account get wrong format", + "Verify user account get wrong username", + "Verify user account get wrong password"}; +int verify_user_logon(char *buf) +{ + char *ptr = NULL; + + if( !(ptr=strchr(buf, ':')) ) + { + return 1; + } + + if( strncmp(buf, DEF_USER, strlen(DEF_USER)) ) + { + return 2; + } + + if( strncmp(ptr+1, DEF_PASSWD, strlen(DEF_PASSWD)) ) + { + return 3; + } + + return 0; +} + +int proc_client_socket(link_node_t **head, fd_set *rdset ) +{ + int client_fd; + char buf[512]; + int rv; + int maxfd=0; + link_node_t *node; + link_node_t *prev; + int rmflag = 0; + + if(!head || !rdset) + return -2; + + + if( !rdset ) + { + printf("Invalid arg\n"); + return -1; + } + + node = *head; + while( node != NULL ) + { + //printf( "proc socket[%d] ##########\n", node->fd ); + + if( FD_ISSET(node->fd, rdset) ) + { + client_fd = node->fd; + + memset(buf, 0, sizeof(buf)); + + if( (rv=read(client_fd, buf, sizeof(buf))) <= 0) + { + printf("socket[%d] disconncet or read get error\n", client_fd); + rmflag = 1; + goto REMOVE_CLIENT; + } + + printf("socket[%d] read get %d bytes data\n", client_fd, rv); +#ifdef CONFIG_VERIFY_USER + /* not logon before, then need logon information */ + if( !node->logon ) + { + if( 0 != (rv=verify_user_logon(buf)) ) + { + printf("client socket[%d] logon account [%s] invalid, disconncet it now\n", client_fd, buf); + write(client_fd, fail_str[rv-1], strlen(fail_str[rv-1])); + rmflag = 1; + goto REMOVE_CLIENT; + } + else + { + printf("client socket[%d] logon successfully!\n", client_fd); + node->logon = 1; + write(client_fd, "passed", 6); + } + } + else /* already logon */ +#endif + { + /* echo the data from client back */ + write(client_fd, buf, rv); + } + +REMOVE_CLIENT: + if( rmflag ) + { + printf("remove socket client[%d] from list now\n", node->fd); + /* node is first node */ + if( node == *head ) + { + close(node->fd); + *head = node->next; + free(node); + node=*head; + } + else + { + close(node->fd); + prev->next = node->next; + free(node); + node = prev->next; + } + rmflag = 0; + continue; + } + } + + prev = node; + node = node->next; + } + + return 0; +} + + diff --git a/program/unp/socket_server_thread.c b/program/unp/socket_server_thread.c new file mode 100644 index 0000000..0d99aa0 --- /dev/null +++ b/program/unp/socket_server_thread.c @@ -0,0 +1,272 @@ +/********************************************************************************* + * Copyright: (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com QQ:281143292> + * All rights reserved. + * + * Filename: date_time_server.c + * Description: This is a sample socket server demo program. + * + * Version: 1.0.0(06/08/2012~) + * Author: Guo Wenxue <guowenxue@gmail.com> + * ChangeLog: 1, Release initial version on "06/08/2012 02:50:51 PM" + * + ********************************************************************************/ + +/* Some Unix Program Standard head file */ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <pthread.h> +#include <getopt.h> /* getopt_long */ +#include <libgen.h> /* getopt_long */ + +/* Socket Program head file */ +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> /* sockaddr_in{} and other Internet define */ + +/* strerror(), perror(), errno head file*/ +#include <errno.h> +#include <time.h> + + +#define LISTENQ 1024 /* 2nd argument to listen () */ + +#define DEF_USER "lingyun" +#define DEF_PASSWD "www.iot-yun.com" + + +void *socket_client_worker(void *arg); + + +void print_usage(char *progname) +{ + printf("Usage: %s [OPTION]...\n", progname); + + printf(" %s is a socket server program, which used to verify client and echo back string from it\n", progname); + printf("\nMandatory arguments to long options are mandatory for short options too:\n"); + + printf(" -b[daemon ] set program running on background\n"); + printf(" -p[port ] Socket server port address\n"); + printf(" -h[help ] Display this help information\n"); + + + printf("\nExample: %s -b -p 8900\n", progname); + return ; +} + + +int main(int argc, char **argv) +{ + int listenfd, connfd; + struct sockaddr_in servaddr; + int serv_port = 0; + int daemon_run = 0; + char *progname = NULL; + pthread_t tid; + int opt; + int on=1; + + + struct option long_options[] = + { + {"daemon", no_argument, NULL, 'b'}, + {"port", required_argument, NULL, 'p'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} + }; + + progname = basename(argv[0]); + + /* Parser the command line parameters */ + while ((opt = getopt_long(argc, argv, "bp:h", long_options, NULL)) != -1) + { + switch (opt) + { + case 'b': + daemon_run=1; + break; + + case 'p': + serv_port = atoi(optarg); + break; + + case 'h': /* Get help information */ + print_usage(progname); + return EXIT_SUCCESS; + + default: + break; + } + } + + if(0==serv_port) + { + print_usage(progname); + return -1; + } + + /* set program running on background */ + if( daemon_run ) + { + daemon(0, 0); + } + + /* + * Open an IPV4(AF_INET) TCP(SOCK_STREAM) Socket File Description(listenfd), UDP socket + * should use SOCK_DGRAM,We can use linux command "man socket" to see this function manual + */ + if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) + { + /* strerror() is the 1st way to display the failure reason, argument + * errno is a globle variable defined in <errno.h>, we can use linux command + * "man strerror" to see this function manual*/ + printf("Use socket() to create a TCP socket failure: %s\n", strerror(errno)); + return -1; + } + + /* Set socket port reuseable */ + setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); + + /* Now we set the Server Information, include IPV4 or IPV6, Listen IP address and Port */ + memset(&servaddr, 0, sizeof(servaddr)); + servaddr.sin_family = AF_INET; /* Set it as IPV4 protocal */ + servaddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Listen all the local IP address */ + servaddr.sin_port = htons(serv_port); /* daytime server port */ + + /* + * When a socket is created with socket(2), it exists in a name space (address family) but + * has no address assigned to it. bind() assigns the address specified to by addr to the + * socket referred to by the file descriptor listenfd. We can use Linux command "man 2 bind" + * to see this function manual. + */ + if(bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) + { + printf("Use bind() to bind the TCP socket failure: %s\n", strerror(errno)); + goto CleanUp; + } + + /* + * listen() marks the socket referred to by listenfd as a passive socket, that is, as a socket + * that will be used to accept incoming connection requests using accept(2). We can use Linux + * command "man listen" to see this function manual. + */ + if(listen(listenfd, LISTENQ) < 0) + { + printf("Use bind() to bind the TCP socket failure: %s\n", strerror(errno)); + goto CleanUp; + } + printf("%s server start to listen port %d\n", argv[0],serv_port); + + + for ( ; ; ) + { + /* + * The accept() system call is used with connection-based socket types (SOCK_STREAM, SOCK_SEQPACKET). + * It extracts the first connection request on the queue of pending connections for the listening + * socket linstenfd, creates a new connected socket(connfd), and returns a new file descriptor referring + * to that socket. The newly created socket is not in the listening state. The original socket + * listenfd is unaffected by this call. + */ + + if( (connfd=accept(listenfd, (struct sockaddr *)NULL, NULL)) > 0) + { + pthread_create(&tid, NULL, socket_client_worker, (void *)connfd); + } + } + +CleanUp: + close(listenfd); /* We must close socket File Description when program exit*/ + return 0; +} + +static inline msleep(unsigned long ms) +{ + struct timeval tv; + + tv.tv_sec = ms/1000; + tv.tv_usec = (ms%1000)*1000; + + select(0, NULL, NULL, NULL, &tv); +} + + +char *fail_str[3]={"Verify user account get wrong format", + "Verify user account get wrong username", + "Verify user account get wrong password"}; +int verify_user_logon(char *buf) +{ + char *ptr = NULL; + + if( !(ptr=strchr(buf, ':')) ) + { + return 1; + } + + if( strncmp(buf, DEF_USER, strlen(DEF_USER)) ) + { + return 2; + } + + if( strncmp(ptr+1, DEF_PASSWD, strlen(DEF_PASSWD)) ) + { + return 3; + } + + return 0; +} + +void *socket_client_worker(void *arg) +{ + int client_fd; + char buf[512]; + int rv; + + if( !arg ) + { + printf("Invalid arg\n"); + return NULL; + } + + client_fd = (int) arg; + +#ifdef CONFIG_VERIFY_USER + memset(buf, 0, sizeof(buf)); + if( (rv=read(client_fd, buf, sizeof(buf))) <= 0) + { + printf("socket disconncet or read get error\n"); + goto CleanUp; + } + + if( 0 != (rv=verify_user_logon(buf)) ) + { + printf("client logon account [%s] invalid, disconncet it now\n", buf); + write(client_fd, fail_str[rv-1], strlen(fail_str[rv-1])); + goto CleanUp; + } + + write(client_fd, "passed", 6); +#endif + + while(1) + { + memset(buf, 0, sizeof(buf)); + if( (rv=read(client_fd, buf, sizeof(buf))) <= 0) + { + printf("socket disconncet or read get error\n"); + goto CleanUp; + } + + /* echo the data from client back */ + printf("socket[%d] read get %d bytes data and will echo it back\n", client_fd, rv); + write(client_fd, buf, rv); + } + + +CleanUp: + printf("Thread worker for socket[%d] exit.\n", client_fd); + msleep(500); + close(client_fd); +} + + diff --git a/program/unp/test.sh b/program/unp/test.sh new file mode 100755 index 0000000..9d00aad --- /dev/null +++ b/program/unp/test.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +for i in `seq 1 100` ; do + ./socket_client -i 127.0.0.1 -p 8900 & +done + +sleep 1 + +killall socket_client + -- Gitblit v1.9.1