libc_interface.c
来自「Linux下的多协议即时通讯程序源代码」· C语言 代码 · 共 1,100 行 · 第 1/2 页
C
1,100 行
"EST", "EST" }, { "Azores Standard Time", "Azores Daylight Time", "AZOT", "AZOST" }, { "Canada Central Standard Time", "Canada Central Daylight Time", "CST", "MDT" }, { "Cape Verde Standard Time", "Cape Verde Daylight Time", "CVT", "CVST" }, { "Caucasus Standard Time", "Caucasus Daylight Time", "AZT", "AZST" }, { "Cen. Australia Standard Time", "Cen. Australia Daylight Time", "CST", "CST" }, { "Central America Standard Time", "Central America Daylight Time", "CST", "CDT" }, { "Central Asia Standard Time", "Central Asia Daylight Time", "BDT", "BDT" }, { "Central Europe Standard Time", "Central Europe Daylight Time", "CET", "CEST" }, { "Central European Standard Time", "Central European Daylight Time", "CET", "CEST" }, { "Central Pacific Standard Time", "Central Pacific Daylight Time", "NCT", "NCST" }, { "Central Standard Time", "Central Daylight Time", "CST", "CDT" }, { "China Standard Time", "China Daylight Time", "HKT", "HKST" }, { "Dateline Standard Time", "Dateline Daylight Time", "GMT+12", "GMT+12" }, { "E. Africa Standard Time", "E. Africa Daylight Time", "EAT", "EAT" }, { "E. Australia Standard Time", "E. Australia Daylight Time", "EST", "EST" }, { "E. Europe Standard Time", "E. Europe Daylight Time", "EET", "EEST" }, { "E. South America Standard Time", "E. South America Daylight Time", "BRT", "BRST" }, { "Eastern Standard Time", "Eastern Daylight Time", "EST", "EDT" }, { "Egypt Standard Time", "Egypt Daylight Time", "EET", "EEST" }, { "Ekaterinburg Standard Time", "Ekaterinburg Daylight Time", "YEKT", "YEKST" }, { "Fiji Standard Time", "Fiji Daylight Time", "FJT", "FJST" }, { "FLE Standard Time", "FLE Daylight Time", "EET", "EEST" }, { "GMT Standard Time", "GMT Daylight Time", "GMT", "IST" }, { "Greenland Standard Time", "Greenland Daylight Time", "WGT", "WGST" }, { "Greenwich Standard Time", "Greenwich Daylight Time", "WET", "WEST" }, { "GTB Standard Time", "GTB Daylight Time", "EET", "EEST" }, { "Hawaiian Standard Time", "Hawaiian Daylight Time", "HST", "HPT" }, { "India Standard Time", "India Daylight Time", "IST", "IST" }, { "Iran Standard Time", "Iran Daylight Time", "IRST", "IRDT" }, { "Jerusalem Standard Time", "Jerusalem Daylight Time", "IST", "IDT" }, { "Korea Standard Time", "Korea Daylight Time", "KST", "KDT" }, { "Mexico Standard Time", "Mexico Daylight Time", "CST", "CDT" }, { "Mexico Standard Time", "Mexico Daylight Time", "BOT", "BOST" }, { "Mid-Atlantic Standard Time", "Mid-Atlantic Daylight Time", "GST", "GST" }, { "Mountain Standard Time", "Mountain Daylight Time", "MST", "MDT" }, { "Myanmar Standard Time", "Myanmar Daylight Time", "MMT", "MMT" }, { "N. Central Asia Standard Time", "N. Central Asia Daylight Time", "ALMT", "ALMST" }, { "Nepal Standard Time", "Nepal Daylight Time", "NPT", "NPT" }, { "New Zealand Standard Time", "New Zealand Daylight Time", "NZST", "NZDT" }, { "Newfoundland Standard Time", "Newfoundland Daylight Time", "NST", "NDT" }, { "North Asia East Standard Time", "North Asia East Daylight Time", "IRKT", "IRKST" }, { "North Asia Standard Time", "North Asia Daylight Time", "KRAT", "KRAST" }, { "Pacific SA Standard Time", "Pacific SA Daylight Time", "CLT", "CLST" }, { "Pacific Standard Time", "Pacific Daylight Time", "PST", "PDT" }, { "Romance Standard Time", "Romance Daylight Time", "CET", "CEST" }, { "Russian Standard Time", "Russian Daylight Time", "MSK", "MSD" }, { "SA Eastern Standard Time", "SA Eastern Daylight Time", "ART", "ARST" }, { "SA Pacific Standard Time", "SA Pacific Daylight Time", "COT", "COST" }, { "SA Western Standard Time", "SA Western Daylight Time", "VET", "VET" }, { "Samoa Standard Time", "Samoa Daylight Time", "SST", "NDT" }, { "SE Asia Standard Time", "SE Asia Daylight Time", "ICT", "ICT" }, { "Malay Peninsula Standard Time", "Malay Peninsula Daylight Time", "MYT", "MALST" }, { "South Africa Standard Time", "South Africa Daylight Time", "CAT", "CAT" }, { "Sri Lanka Standard Time", "Sri Lanka Daylight Time", "LKT", "IST" }, { "Taipei Standard Time", "Taipei Daylight Time", "CST", "CDT" }, { "Tasmania Standard Time", "Tasmania Daylight Time", "EST", "EST" }, { "Tokyo Standard Time", "Tokyo Daylight Time", "JST", "JDT" }, { "Tonga Standard Time", "Tonga Daylight Time", "TOT", "TOST" }, { "US Eastern Standard Time", "US Eastern Daylight Time", "EST", "EDT" }, { "US Mountain Standard Time", "US Mountain Daylight Time", "MST", "MDT" }, { "Vladivostok Standard Time", "Vladivostok Daylight Time", "VLAT", "VLAST" }, { "W. Australia Standard Time", "W. Australia Daylight Time", "WST", "WST" }, /* Not mapped in PostgreSQL. * * I mapped this based on the following information... -- rlaager * $ cd /usr/share/zoneinfo/Africa * $ for i in * ; do echo `TZ=Africa/$i date +"%z %Z"` $i ; done | grep +0100 * +0100 CET Algiers * +0100 WAT Bangui * +0100 WAT Brazzaville * +0100 CET Ceuta * +0100 WAT Douala * +0100 WAT Kinshasa * +0100 WAT Lagos * +0100 WAT Libreville * +0100 WAT Luanda * +0100 WAT Malabo * +0100 WAT Ndjamena * +0100 WAT Niamey * +0100 WAT Porto-Novo * +0100 CET Tunis **/ { "W. Central Africa Standard Time", "W. Central Africa Daylight Time", "WAT", "WAT" }, { "W. Europe Standard Time", "W. Europe Daylight Time", "CET", "CEST" }, { "West Asia Standard Time", "West Asia Daylight Time", "PKT", "PKST" }, { "West Pacific Standard Time", "West Pacific Daylight Time", "ChST", "ChST" }, { "Yakutsk Standard Time", "Yakutsk Daylight Time", "YAKT", "YAKST" }, { NULL, NULL, NULL, NULL }};const char *wpurple_get_timezone_abbreviation(const struct tm *tm){ int i; char tzname[128]; char localtzname[256]; HKEY rootKey; int idx; if (!tm) { purple_debug_warning("wpurple", "could not determine current date/time: localtime failed\n"); return ""; } if (strftime(tzname, sizeof(tzname) - 1, "%Z", tm) == 0) { purple_debug_error("wpurple", "timezone name is too long for the buffer\n"); return ""; } for (i = 0; win32_tzmap[i].wstd != NULL; i++) { if (strcmp(tzname, win32_tzmap[i].wstd) == 0) {#if 0 purple_debug_info("wpurple", "TZ \"%s\" matches Windows timezone \"%s\"\n", win32_tzmap[i].ustd, tzname);#endif /* Cache the Result */ if (i > 0) { if (win32_tzmap[0].wstd[0] != '\0') g_free(win32_tzmap[0].wstd); win32_tzmap[0].wstd = g_strdup(tzname); win32_tzmap[0].ustd = win32_tzmap[i].ustd; } return win32_tzmap[i].ustd; } if (strcmp(tzname, win32_tzmap[i].wdst) == 0) {#if 0 purple_debug_info("wpurple", "TZ \"%s\" matches Windows timezone \"%s\"\n", win32_tzmap[i].udst, tzname);#endif /* Cache the Result */ if (i > 0) { if (win32_tzmap[0].wdst[0] != '\0') g_free(win32_tzmap[0].wdst); win32_tzmap[0].wdst = g_strdup(tzname); win32_tzmap[0].udst = win32_tzmap[i].udst; } return win32_tzmap[i].udst; } } /* * Localized Windows versions return localized names for the timezone. * Scan the registry to find the English name, and then try matching * against our table again. */ memset(localtzname, 0, sizeof(localtzname)); if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones", 0, KEY_READ, &rootKey) != ERROR_SUCCESS) { purple_debug_warning("wpurple", "could not open registry key to identify Windows timezone: %i\n", (int) GetLastError()); return ""; } for (idx = 0;; idx++) { char keyname[256]; char zonename[256]; DWORD namesize; FILETIME lastwrite; HKEY key; LONG r; memset(keyname, 0, sizeof(keyname)); namesize = sizeof(keyname); if ((r = RegEnumKeyEx(rootKey, idx, keyname, &namesize, NULL, NULL, NULL, &lastwrite)) != ERROR_SUCCESS) { if (r == ERROR_NO_MORE_ITEMS) break; purple_debug_warning("wpurple", "could not enumerate registry subkeys to identify Windows timezone: %i\n", (int) r); break; } if ((r = RegOpenKeyEx(rootKey, keyname, 0, KEY_READ, &key)) != ERROR_SUCCESS) { purple_debug_warning("wpurple", "could not open registry subkey to identify Windows timezone: %i\n", (int) r); break; } memset(zonename, 0, sizeof(zonename)); namesize = sizeof(zonename); if ((r = RegQueryValueEx(key, "Std", NULL, NULL, zonename, &namesize)) != ERROR_SUCCESS) { purple_debug_warning("wpurple", "could not query value for 'std' to identify Windows timezone: %i\n", (int) r); RegCloseKey(key); break; } if (strcmp(tzname, zonename) == 0) { /* Matched zone */ strcpy(localtzname, keyname); RegCloseKey(key); break; } memset(zonename, 0, sizeof(zonename)); namesize = sizeof(zonename); if ((r = RegQueryValueEx(key, "Dlt", NULL, NULL, zonename, &namesize)) != ERROR_SUCCESS) { purple_debug_warning("wpurple", "could not query value for 'dlt' to identify Windows timezone: %i\n", (int) r); RegCloseKey(key); break; } if (strcmp(tzname, zonename) == 0) { /* Matched DST zone */ strcpy(localtzname, keyname); RegCloseKey(key); break; } RegCloseKey(key); } RegCloseKey(rootKey); if (localtzname[0]) { /* Found a localized name, so scan for that one too */ for (i = 0; win32_tzmap[i].wstd != NULL; i++) { if (strcmp(localtzname, win32_tzmap[i].wstd) == 0) {#if 0 purple_debug_info("wpurple", "TZ \"%s\" matches localized Windows timezone \"%s\" (\"%s\")\n", win32_tzmap[i].ustd, tzname, localtzname);#endif /* Cache the Result */ if (win32_tzmap[0].wstd[0] != '\0') g_free(win32_tzmap[0].wstd); win32_tzmap[0].wstd = g_strdup(tzname); win32_tzmap[0].ustd = win32_tzmap[i].ustd; return win32_tzmap[i].ustd; } if (strcmp(localtzname, win32_tzmap[i].wdst) == 0) {#if 0 purple_debug_info("wpurple", "TZ \"%s\" matches localized Windows timezone \"%s\" (\"%s\")\n", win32_tzmap[i].udst, tzname, localtzname);#endif /* Cache the Result */ if (win32_tzmap[0].wdst[0] != '\0') g_free(win32_tzmap[0].wdst); win32_tzmap[0].wdst = g_strdup(tzname); win32_tzmap[0].udst = win32_tzmap[i].udst; return win32_tzmap[i].udst; } } } purple_debug_warning("wpurple", "could not find a match for Windows timezone \"%s\"\n", tzname); return "";}#if !GLIB_CHECK_VERSION(2,8,0)/** * g_access: * @filename: a pathname in the GLib file name encoding (UTF-8 on Windows) * @mode: as in access() * * A wrapper for the POSIX access() function. This function is used to * test a pathname for one or several of read, write or execute * permissions, or just existence. On Windows, the underlying access() * function in the C library only checks the READONLY attribute, and * does not look at the ACL at all. Software that needs to handle file * permissions on Windows more exactly should use the Win32 API. * * See the C library manual for more details about access(). * * Returns: zero if the pathname refers to an existing file system * object that has all the tested permissions, or -1 otherwise or on * error. * * Since: 2.8 */intwpurple_g_access (const gchar *filename, int mode){ if (G_WIN32_HAVE_WIDECHAR_API ()) { wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL); int retval; int save_errno; if (wfilename == NULL) { errno = EINVAL; return -1; } retval = _waccess (wfilename, mode); save_errno = errno; g_free (wfilename); errno = save_errno; return retval; } else { gchar *cp_filename = g_locale_from_utf8 (filename, -1, NULL, NULL, NULL); int retval; int save_errno; if (cp_filename == NULL) { errno = EINVAL; return -1; } retval = access (cp_filename, mode); save_errno = errno; g_free (cp_filename); errno = save_errno; return retval; }}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?