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