⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wstring.c

📁 Axis 221 camera embedded programing interface
💻 C
📖 第 1 页 / 共 5 页
字号:
/*  Copyright (C) 2002     Manuel Novoa III * *  This library is free software; you can redistribute it and/or *  modify it under the terms of the GNU Library General Public *  License as published by the Free Software Foundation; either *  version 2 of the License, or (at your option) any later version. * *  This library 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 *  Library General Public License for more details. * *  You should have received a copy of the GNU Library General Public *  License along with this library; if not, write to the Free *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//*  ATTENTION!   ATTENTION!   ATTENTION!   ATTENTION!   ATTENTION! * *  Besides uClibc, I'm using this code in my libc for elks, which is *  a 16-bit environment with a fairly limited compiler.  It would make *  things much easier for me if this file isn't modified unnecessarily. *  In particular, please put any new or replacement functions somewhere *  else, and modify the makefile to use your version instead. *  Thanks.  Manuel * *  ATTENTION!   ATTENTION!   ATTENTION!   ATTENTION!   ATTENTION! *//*  Dec 20, 2002 *  Initial test implementation of strcoll, strxfrm, wcscoll, and wcsxfrm. *  The code needs to be cleaned up a good bit, but I'd like to see people *  test it out. * *  Sep 11, 2003 *  Patch by Atsushi Nemoto <anemo@mba.ocn.ne.jp> to do arch-required *  mapping of signal strings (alpha, mips, hppa, sparc). */#define _GNU_SOURCE#include <string.h>#include <strings.h>#include <stdio.h>#include <limits.h>#include <ctype.h>#include <stdlib.h>#include <errno.h>#include <signal.h>#include <assert.h>#include <locale.h>#include <bits/uClibc_uintmaxtostr.h>#ifdef WANT_WIDE#include <wchar.h>#include <wctype.h>#include <bits/uClibc_uwchar.h>#define Wvoid			wchar_t#define Wchar			wchar_t#define Wuchar			__uwchar_t#define Wint			wchar_t#else#define Wvoid			void#define Wchar			chartypedef unsigned char	__string_uchar_t;#define Wuchar			__string_uchar_t#define Wint			int#endif/**********************************************************************//* NOTE: If we ever do internationalized syserr messages, this will * have to be changed! */#define _SYS_NERR			125#if defined(__mips__) || defined(__sparc__)/* sparce and mips have an extra error entry, as EDEADLK and EDEADLOCK have * different meanings on those platforms. */#undef _SYS_NERR#define _SYS_NERR			126#endif#ifdef __UCLIBC_HAS_ERRNO_MESSAGES__#define _SYS_ERRMSG_MAXLEN	 50#else  /* __UCLIBC_HAS_ERRNO_MESSAGES__ */#define _SYS_ERRMSG_MAXLEN	 0#endif /* __UCLIBC_HAS_ERRNO_MESSAGES__ */extern const char _string_syserrmsgs[];#define _SYS_NSIG			32#ifdef __UCLIBC_HAS_SIGNUM_MESSAGES__#define _SYS_SIGMSG_MAXLEN	25#else  /* __UCLIBC_HAS_SIGNUM_MESSAGES__ */#define _SYS_SIGMSG_MAXLEN	0#endif /* __UCLIBC_HAS_SIGNUM_MESSAGES__ */extern const char _string_syssigmsgs[];#if _SYS_ERRMSG_MAXLEN < __UIM_BUFLEN_INT + 14#define _STRERROR_BUFSIZE (__UIM_BUFLEN_INT + 14)#else#define _STRERROR_BUFSIZE _SYS_ERRMSG_MAXLEN#endif#if _SYS_SIGMSG_MAXLEN < __UIM_BUFLEN_INT + 15#define _STRSIGNAL_BUFSIZE (__UIM_BUFLEN_INT + 15)#else#define _STRSIGNAL_BUFSIZE _SYS_SIGMSG_MAXLEN#endif/**********************************************************************/#if defined(L__string_syserrmsgs) && defined(__UCLIBC_HAS_ERRNO_MESSAGES__)const char _string_syserrmsgs[] = {	/*   0:    0,  8 */ "Success\0"	/*   1:    8, 24 */ "Operation not permitted\0"	/*   2:   32, 26 */ "No such file or directory\0"	/*   3:   58, 16 */ "No such process\0"	/*   4:   74, 24 */ "Interrupted system call\0"	/*   5:   98, 19 */ "Input/output error\0"	/*   6:  117, 26 */ "No such device or address\0"	/*   7:  143, 23 */ "Argument list too long\0"	/*   8:  166, 18 */ "Exec format error\0"	/*   9:  184, 20 */ "Bad file descriptor\0"	/*  10:  204, 19 */ "No child processes\0"	/*  11:  223, 33 */ "Resource temporarily unavailable\0"	/*  12:  256, 23 */ "Cannot allocate memory\0"	/*  13:  279, 18 */ "Permission denied\0"	/*  14:  297, 12 */ "Bad address\0"	/*  15:  309, 22 */ "Block device required\0"	/*  16:  331, 24 */ "Device or resource busy\0"	/*  17:  355, 12 */ "File exists\0"	/*  18:  367, 26 */ "Invalid cross-device link\0"	/*  19:  393, 15 */ "No such device\0"	/*  20:  408, 16 */ "Not a directory\0"	/*  21:  424, 15 */ "Is a directory\0"	/*  22:  439, 17 */ "Invalid argument\0"	/*  23:  456, 30 */ "Too many open files in system\0"	/*  24:  486, 20 */ "Too many open files\0"	/*  25:  506, 31 */ "Inappropriate ioctl for device\0"	/*  26:  537, 15 */ "Text file busy\0"	/*  27:  552, 15 */ "File too large\0"	/*  28:  567, 24 */ "No space left on device\0"	/*  29:  591, 13 */ "Illegal seek\0"	/*  30:  604, 22 */ "Read-only file system\0"	/*  31:  626, 15 */ "Too many links\0"	/*  32:  641, 12 */ "Broken pipe\0"	/*  33:  653, 33 */ "Numerical argument out of domain\0"	/*  34:  686, 30 */ "Numerical result out of range\0"	/*  35:  716, 26 */ "Resource deadlock avoided\0"	/*  36:  742, 19 */ "File name too long\0"	/*  37:  761, 19 */ "No locks available\0"	/*  38:  780, 25 */ "Function not implemented\0"	/*  39:  805, 20 */ "Directory not empty\0"	/*  40:  825, 34 */ "Too many levels of symbolic links\0"	/*  41:  859,  1 */ "\0"	/*  42:  860, 27 */ "No message of desired type\0"	/*  43:  887, 19 */ "Identifier removed\0"	/*  44:  906, 28 */ "Channel number out of range\0"	/*  45:  934, 25 */ "Level 2 not synchronized\0"	/*  46:  959, 15 */ "Level 3 halted\0"	/*  47:  974, 14 */ "Level 3 reset\0"	/*  48:  988, 25 */ "Link number out of range\0"	/*  49: 1013, 29 */ "Protocol driver not attached\0"	/*  50: 1042, 27 */ "No CSI structure available\0"	/*  51: 1069, 15 */ "Level 2 halted\0"	/*  52: 1084, 17 */ "Invalid exchange\0"	/*  53: 1101, 27 */ "Invalid request descriptor\0"	/*  54: 1128, 14 */ "Exchange full\0"	/*  55: 1142,  9 */ "No anode\0"	/*  56: 1151, 21 */ "Invalid request code\0"	/*  57: 1172, 13 */ "Invalid slot\0"	/*  58: 1185,  1 */ "\0"	/*  59: 1186, 21 */ "Bad font file format\0"	/*  60: 1207, 20 */ "Device not a stream\0"	/*  61: 1227, 18 */ "No data available\0"	/*  62: 1245, 14 */ "Timer expired\0"	/*  63: 1259, 25 */ "Out of streams resources\0"	/*  64: 1284, 30 */ "Machine is not on the network\0"	/*  65: 1314, 22 */ "Package not installed\0"	/*  66: 1336, 17 */ "Object is remote\0"	/*  67: 1353, 22 */ "Link has been severed\0"	/*  68: 1375, 16 */ "Advertise error\0"	/*  69: 1391, 14 */ "Srmount error\0"	/*  70: 1405, 28 */ "Communication error on send\0"	/*  71: 1433, 15 */ "Protocol error\0"	/*  72: 1448, 19 */ "Multihop attempted\0"	/*  73: 1467, 19 */ "RFS specific error\0"	/*  74: 1486, 12 */ "Bad message\0"	/*  75: 1498, 38 */ "Value too large for defined data type\0"	/*  76: 1536, 27 */ "Name not unique on network\0"	/*  77: 1563, 29 */ "File descriptor in bad state\0"	/*  78: 1592, 23 */ "Remote address changed\0"	/*  79: 1615, 39 */ "Can not access a needed shared library\0"	/*  80: 1654, 37 */ "Accessing a corrupted shared library\0"	/*  81: 1691, 32 */ ".lib section in a.out corrupted\0"	/*  82: 1723, 48 */ "Attempting to link in too many shared libraries\0"	/*  83: 1771, 38 */ "Cannot exec a shared library directly\0"	/*  84: 1809, 50 */ "Invalid or incomplete multibyte or wide character\0"	/*  85: 1859, 44 */ "Interrupted system call should be restarted\0"	/*  86: 1903, 19 */ "Streams pipe error\0"	/*  87: 1922, 15 */ "Too many users\0"	/*  88: 1937, 31 */ "Socket operation on non-socket\0"	/*  89: 1968, 29 */ "Destination address required\0"	/*  90: 1997, 17 */ "Message too long\0"	/*  91: 2014, 31 */ "Protocol wrong type for socket\0"	/*  92: 2045, 23 */ "Protocol not available\0"	/*  93: 2068, 23 */ "Protocol not supported\0"	/*  94: 2091, 26 */ "Socket type not supported\0"	/*  95: 2117, 24 */ "Operation not supported\0"	/*  96: 2141, 30 */ "Protocol family not supported\0"	/*  97: 2171, 41 */ "Address family not supported by protocol\0"	/*  98: 2212, 23 */ "Address already in use\0"	/*  99: 2235, 32 */ "Cannot assign requested address\0"	/* 100: 2267, 16 */ "Network is down\0"	/* 101: 2283, 23 */ "Network is unreachable\0"	/* 102: 2306, 36 */ "Network dropped connection on reset\0"	/* 103: 2342, 33 */ "Software caused connection abort\0"	/* 104: 2375, 25 */ "Connection reset by peer\0"	/* 105: 2400, 26 */ "No buffer space available\0"	/* 106: 2426, 40 */ "Transport endpoint is already connected\0"	/* 107: 2466, 36 */ "Transport endpoint is not connected\0"	/* 108: 2502, 46 */ "Cannot send after transport endpoint shutdown\0"	/* 109: 2548, 35 */ "Too many references: cannot splice\0"	/* 110: 2583, 21 */ "Connection timed out\0"	/* 111: 2604, 19 */ "Connection refused\0"	/* 112: 2623, 13 */ "Host is down\0"	/* 113: 2636, 17 */ "No route to host\0"	/* 114: 2653, 30 */ "Operation already in progress\0"	/* 115: 2683, 26 */ "Operation now in progress\0"	/* 116: 2709, 22 */ "Stale NFS file handle\0"	/* 117: 2731, 25 */ "Structure needs cleaning\0"	/* 118: 2756, 28 */ "Not a XENIX named type file\0"	/* 119: 2784, 30 */ "No XENIX semaphores available\0"	/* 120: 2814, 21 */ "Is a named type file\0"	/* 121: 2835, 17 */ "Remote I/O error\0"	/* 122: 2852, 20 */ "Disk quota exceeded\0"	/* 123: 2872, 16 */ "No medium found\0"	/* 124: 2888, 18 */ "Wrong medium type"#if defined(__mips__) || defined(__sparc__)	"\0"	/* 125: 2906, 28 */ "File locking deadlock error"#endif	/* Note: for mips we are ignoring ECANCELED since glibc doesn't have a	 * corresponsding message.*/};#endif/**********************************************************************/#if defined(L_sys_errlist) && defined(__UCLIBC_HAS_SYS_ERRLIST__)link_warning(_sys_errlist, "sys_nerr and sys_errlist are obsolete and uClibc support for them (in at least some configurations) will probably be unavailable in the near future.")const char *const sys_errlist[] = {	[0] =				_string_syserrmsgs + 0,	[EPERM] =			_string_syserrmsgs + 8,	[ENOENT] =			_string_syserrmsgs + 32,	[ESRCH] =			_string_syserrmsgs + 58,	[EINTR] =			_string_syserrmsgs + 74,	[EIO] =				_string_syserrmsgs + 98,	[ENXIO] =			_string_syserrmsgs + 117,	[E2BIG] =			_string_syserrmsgs + 143,	[ENOEXEC] =			_string_syserrmsgs + 166,	[EBADF] =			_string_syserrmsgs + 184,	[ECHILD] =			_string_syserrmsgs + 204,	[EAGAIN] =			_string_syserrmsgs + 223,	[ENOMEM] =			_string_syserrmsgs + 256,	[EACCES] =			_string_syserrmsgs + 279,	[EFAULT] =			_string_syserrmsgs + 297,	[ENOTBLK] =			_string_syserrmsgs + 309,	[EBUSY] =			_string_syserrmsgs + 331,	[EEXIST] =			_string_syserrmsgs + 355,	[EXDEV] =			_string_syserrmsgs + 367,	[ENODEV] =			_string_syserrmsgs + 393,	[ENOTDIR] =			_string_syserrmsgs + 408,	[EISDIR] =			_string_syserrmsgs + 424,	[EINVAL] =			_string_syserrmsgs + 439,	[ENFILE] =			_string_syserrmsgs + 456,	[EMFILE] =			_string_syserrmsgs + 486,	[ENOTTY] =			_string_syserrmsgs + 506,	[ETXTBSY] =			_string_syserrmsgs + 537,	[EFBIG] =			_string_syserrmsgs + 552,	[ENOSPC] =			_string_syserrmsgs + 567,	[ESPIPE] =			_string_syserrmsgs + 591,	[EROFS] =			_string_syserrmsgs + 604,	[EMLINK] =			_string_syserrmsgs + 626,	[EPIPE] =			_string_syserrmsgs + 641,	[EDOM] =			_string_syserrmsgs + 653,	[ERANGE] =			_string_syserrmsgs + 686,	[EDEADLK] =			_string_syserrmsgs + 716,	[ENAMETOOLONG] =	_string_syserrmsgs + 742,	[ENOLCK] =			_string_syserrmsgs + 761,	[ENOSYS] =			_string_syserrmsgs + 780,	[ENOTEMPTY] =		_string_syserrmsgs + 805,	[ELOOP] =			_string_syserrmsgs + 825,	/*  	_string_syserrmsgs + 859, */	[ENOMSG] =			_string_syserrmsgs + 860,	[EIDRM] =			_string_syserrmsgs + 887,	[ECHRNG] =			_string_syserrmsgs + 906,	[EL2NSYNC] =		_string_syserrmsgs + 934,	[EL3HLT] =			_string_syserrmsgs + 959,	[EL3RST] =			_string_syserrmsgs + 974,	[ELNRNG] =			_string_syserrmsgs + 988,	[EUNATCH] =			_string_syserrmsgs + 1013,	[ENOCSI] =			_string_syserrmsgs + 1042,	[EL2HLT] =			_string_syserrmsgs + 1069,	[EBADE] =			_string_syserrmsgs + 1084,	[EBADR] =			_string_syserrmsgs + 1101,	[EXFULL] =			_string_syserrmsgs + 1128,	[ENOANO] =			_string_syserrmsgs + 1142,	[EBADRQC] =			_string_syserrmsgs + 1151,	[EBADSLT] =			_string_syserrmsgs + 1172,	/*  	_string_syserrmsgs + 1185, */	[EBFONT] =			_string_syserrmsgs + 1186,	[ENOSTR] =			_string_syserrmsgs + 1207,	[ENODATA] =			_string_syserrmsgs + 1227,	[ETIME] =			_string_syserrmsgs + 1245,	[ENOSR] =			_string_syserrmsgs + 1259,	[ENONET] =			_string_syserrmsgs + 1284,	[ENOPKG] =			_string_syserrmsgs + 1314,	[EREMOTE] =			_string_syserrmsgs + 1336,	[ENOLINK] =			_string_syserrmsgs + 1353,	[EADV] =			_string_syserrmsgs + 1375,	[ESRMNT] =			_string_syserrmsgs + 1391,	[ECOMM] =			_string_syserrmsgs + 1405,	[EPROTO] =			_string_syserrmsgs + 1433,	[EMULTIHOP] =		_string_syserrmsgs + 1448,	[EDOTDOT] =			_string_syserrmsgs + 1467,	[EBADMSG] =			_string_syserrmsgs + 1486,	[EOVERFLOW] =		_string_syserrmsgs + 1498,	[ENOTUNIQ] =		_string_syserrmsgs + 1536,	[EBADFD] =			_string_syserrmsgs + 1563,	[EREMCHG] =			_string_syserrmsgs + 1592,	[ELIBACC] =			_string_syserrmsgs + 1615,	[ELIBBAD] =			_string_syserrmsgs + 1654,	[ELIBSCN] =			_string_syserrmsgs + 1691,	[ELIBMAX] =			_string_syserrmsgs + 1723,	[ELIBEXEC] =		_string_syserrmsgs + 1771,	[EILSEQ] =			_string_syserrmsgs + 1809,	[ERESTART] =		_string_syserrmsgs + 1859,	[ESTRPIPE] =		_string_syserrmsgs + 1903,	[EUSERS] =			_string_syserrmsgs + 1922,	[ENOTSOCK] =		_string_syserrmsgs + 1937,	[EDESTADDRREQ] =	_string_syserrmsgs + 1968,	[EMSGSIZE] =		_string_syserrmsgs + 1997,	[EPROTOTYPE] =		_string_syserrmsgs + 2014,	[ENOPROTOOPT] =		_string_syserrmsgs + 2045,	[EPROTONOSUPPORT] =	_string_syserrmsgs + 2068,	[ESOCKTNOSUPPORT] =	_string_syserrmsgs + 2091,	[EOPNOTSUPP] =		_string_syserrmsgs + 2117,	[EPFNOSUPPORT] =	_string_syserrmsgs + 2141,	[EAFNOSUPPORT] =	_string_syserrmsgs + 2171,	[EADDRINUSE] =		_string_syserrmsgs + 2212,	[EADDRNOTAVAIL] =	_string_syserrmsgs + 2235,	[ENETDOWN] =		_string_syserrmsgs + 2267,	[ENETUNREACH] =		_string_syserrmsgs + 2283,	[ENETRESET] =		_string_syserrmsgs + 2306,	[ECONNABORTED] =	_string_syserrmsgs + 2342,	[ECONNRESET] =		_string_syserrmsgs + 2375,	[ENOBUFS] =			_string_syserrmsgs + 2400,	[EISCONN] =			_string_syserrmsgs + 2426,	[ENOTCONN] =		_string_syserrmsgs + 2466,	[ESHUTDOWN] =		_string_syserrmsgs + 2502,	[ETOOMANYREFS] =	_string_syserrmsgs + 2548,	[ETIMEDOUT] =		_string_syserrmsgs + 2583,	[ECONNREFUSED] =	_string_syserrmsgs + 2604,	[EHOSTDOWN] =		_string_syserrmsgs + 2623,	[EHOSTUNREACH] =	_string_syserrmsgs + 2636,	[EALREADY] =		_string_syserrmsgs + 2653,	[EINPROGRESS] =		_string_syserrmsgs + 2683,	[ESTALE] =			_string_syserrmsgs + 2709,	[EUCLEAN] =			_string_syserrmsgs + 2731,	[ENOTNAM] =			_string_syserrmsgs + 2756,	[ENAVAIL] =			_string_syserrmsgs + 2784,	[EISNAM] =			_string_syserrmsgs + 2814,	[EREMOTEIO] =		_string_syserrmsgs + 2835,	[EDQUOT] =			_string_syserrmsgs + 2852,	[ENOMEDIUM] =		_string_syserrmsgs + 2872,	[EMEDIUMTYPE] =		_string_syserrmsgs + 2888,#if EDEADLOCK != EDEADLK	[EDEADLOCK] =		_string_syserrmsgs + 2906,#endif#if EWOULDBLOCK != EAGAIN#error EWOULDBLOCK does not equal EAGAIN#endif	/* For now, ignore the other arch-specific errors.  glibc only maps EPROCLIM. */	/* some other mips errors */#ifdef ECANCELED#endif#ifdef EINIT#endif#ifdef EREMDEV#endif	/* some other sparc errors */#ifdef EPROCLIM#endif#ifdef ERREMOTE#endif};int sys_nerr = sizeof(sys_errlist)/sizeof(sys_errlist[0]);#endif/**********************************************************************/#ifdef L_wmemcpy#define L_memcpy#define Wmemcpy wmemcpy#else#define Wmemcpy memcpy#endif#ifdef L_memcpyWvoid *Wmemcpy(Wvoid * __restrict s1, const Wvoid * __restrict s2, size_t n){	register Wchar *r1 = s1;	register const Wchar *r2 = s2;#ifdef __BCC__	while (n--) {		*r1++ = *r2++;	}#else	while (n) {		*r1++ = *r2++;		--n;	}#endif	return s1;}#endif/**********************************************************************/#ifdef L_wmemmove#define L_memmove#define Wmemmove wmemmove#else#define Wmemmove memmove#endif#ifdef L_memmoveWvoid *Wmemmove(Wvoid *s1, const Wvoid *s2, size_t n){#ifdef __BCC__	register Wchar *s = (Wchar *) s1;	register const Wchar *p = (const Wchar *) s2;	if (p >= s) {		while (n--) {			*s++ = *p++;		}	} else {		s += n;		p += n;		while (n--) {			*--s = *--p;		}	}	return s1;#else	register Wchar *s = (Wchar *) s1;	register const Wchar *p = (const Wchar *) s2;	if (p >= s) {		while (n) {			*s++ = *p++;			--n;		}	} else {		while (n) {			--n;			s[n] = p[n];		}	}	return s1;#endif}#endif/**********************************************************************/#ifdef L_wcscpy#define L_strcpy#define Wstrcpy wcscpy#else#define Wstrcpy strcpy#endif#ifdef L_strcpyWchar *Wstrcpy(Wchar * __restrict s1, const Wchar * __restrict s2){	register Wchar *s = s1;#ifdef __BCC__	do {		*s = *s2++;	} while (*s++ != 0);#else	while ( (*s++ = *s2++) != 0 );#endif	return s1;}#endif/**********************************************************************/#ifdef L_wcsncpy#define L_strncpy#define Wstrncpy wcsncpy#else#define Wstrncpy strncpy#endif#ifdef L_strncpyWchar *Wstrncpy(Wchar * __restrict s1, register const Wchar * __restrict s2,				size_t n){	register Wchar *s = s1;#ifdef __BCC__	while (n--) {		if ((*s = *s2) != 0) s2++; /* Need to fill tail with 0s. */		++s;	}#else	while (n) {		if ((*s = *s2) != 0) s2++; /* Need to fill tail with 0s. */		++s;		--n;	}#endif		return s1;}#endif/**********************************************************************/#ifdef L_wcscat#define L_strcat#define Wstrcat wcscat#else#define Wstrcat strcat#endif#ifdef L_strcatWchar *Wstrcat(Wchar * __restrict s1, register const Wchar * __restrict s2){	register Wchar *s = s1;	while (*s++);	--s;	while ((*s++ = *s2++) != 0);	return s1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -