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

📄 loadmsgcat.c

📁 磁盘管理工具,主要管理光盘信息和内容希望大家喜欢
💻 C
📖 第 1 页 / 共 3 页
字号:
#endif#if !defined PRIxPTR || PRI_MACROS_BROKEN# undef PRIxPTR# define PRIxPTR \  (sizeof (void *) == sizeof (long) ? "lx" : \   sizeof (void *) == sizeof (int) ? "x" : \   "llx")#endif#if !defined PRIXPTR || PRI_MACROS_BROKEN# undef PRIXPTR# define PRIXPTR \  (sizeof (void *) == sizeof (long) ? "lX" : \   sizeof (void *) == sizeof (int) ? "X" : \   "llX")#endif/* @@ end of prolog @@ */#ifdef _LIBC/* Rename the non ISO C functions.  This is required by the standard   because some ISO C functions will require linking with this object   file and the name space must not be polluted.  */# define open(name, flags)	open_not_cancel_2 (name, flags)# define close(fd)		close_not_cancel_no_status (fd)# define read(fd, buf, n)	read_not_cancel (fd, buf, n)# define mmap(addr, len, prot, flags, fd, offset) \  __mmap (addr, len, prot, flags, fd, offset)# define munmap(addr, len)	__munmap (addr, len)#endif/* For those losing systems which don't have `alloca' we have to add   some additional code emulating it.  */#ifdef HAVE_ALLOCA# define freea(p) /* nothing */#else# define alloca(n) malloc (n)# define freea(p) free (p)#endif/* For systems that distinguish between text and binary I/O.   O_BINARY is usually declared in <fcntl.h>. */#if !defined O_BINARY && defined _O_BINARY  /* For MSC-compatible compilers.  */# define O_BINARY _O_BINARY# define O_TEXT _O_TEXT#endif#ifdef __BEOS__  /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect.  */# undef O_BINARY# undef O_TEXT#endif/* On reasonable systems, binary I/O is the default.  */#ifndef O_BINARY# define O_BINARY 0#endif/* We need a sign, whether a new catalog was loaded, which can be associated   with all translations.  This is important if the translations are   cached by one of GCC's features.  */int _nl_msg_cat_cntr;/* Expand a system dependent string segment.  Return NULL if unsupported.  */static const char *get_sysdep_segment_value (const char *name){  /* Test for an ISO C 99 section 7.8.1 format string directive.     Syntax:     P R I { d | i | o | u | x | X }     { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR }  */  /* We don't use a table of 14 times 6 'const char *' strings here, because     data relocations cost startup time.  */  if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I')    {      if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u'	  || name[3] == 'x' || name[3] == 'X')	{	  if (name[4] == '8' && name[5] == '\0')	    {	      if (name[3] == 'd')		return PRId8;	      if (name[3] == 'i')		return PRIi8;	      if (name[3] == 'o')		return PRIo8;	      if (name[3] == 'u')		return PRIu8;	      if (name[3] == 'x')		return PRIx8;	      if (name[3] == 'X')		return PRIX8;	      abort ();	    }	  if (name[4] == '1' && name[5] == '6' && name[6] == '\0')	    {	      if (name[3] == 'd')		return PRId16;	      if (name[3] == 'i')		return PRIi16;	      if (name[3] == 'o')		return PRIo16;	      if (name[3] == 'u')		return PRIu16;	      if (name[3] == 'x')		return PRIx16;	      if (name[3] == 'X')		return PRIX16;	      abort ();	    }	  if (name[4] == '3' && name[5] == '2' && name[6] == '\0')	    {	      if (name[3] == 'd')		return PRId32;	      if (name[3] == 'i')		return PRIi32;	      if (name[3] == 'o')		return PRIo32;	      if (name[3] == 'u')		return PRIu32;	      if (name[3] == 'x')		return PRIx32;	      if (name[3] == 'X')		return PRIX32;	      abort ();	    }	  if (name[4] == '6' && name[5] == '4' && name[6] == '\0')	    {	      if (name[3] == 'd')		return PRId64;	      if (name[3] == 'i')		return PRIi64;	      if (name[3] == 'o')		return PRIo64;	      if (name[3] == 'u')		return PRIu64;	      if (name[3] == 'x')		return PRIx64;	      if (name[3] == 'X')		return PRIX64;	      abort ();	    }	  if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A'	      && name[7] == 'S' && name[8] == 'T')	    {	      if (name[9] == '8' && name[10] == '\0')		{		  if (name[3] == 'd')		    return PRIdLEAST8;		  if (name[3] == 'i')		    return PRIiLEAST8;		  if (name[3] == 'o')		    return PRIoLEAST8;		  if (name[3] == 'u')		    return PRIuLEAST8;		  if (name[3] == 'x')		    return PRIxLEAST8;		  if (name[3] == 'X')		    return PRIXLEAST8;		  abort ();		}	      if (name[9] == '1' && name[10] == '6' && name[11] == '\0')		{		  if (name[3] == 'd')		    return PRIdLEAST16;		  if (name[3] == 'i')		    return PRIiLEAST16;		  if (name[3] == 'o')		    return PRIoLEAST16;		  if (name[3] == 'u')		    return PRIuLEAST16;		  if (name[3] == 'x')		    return PRIxLEAST16;		  if (name[3] == 'X')		    return PRIXLEAST16;		  abort ();		}	      if (name[9] == '3' && name[10] == '2' && name[11] == '\0')		{		  if (name[3] == 'd')		    return PRIdLEAST32;		  if (name[3] == 'i')		    return PRIiLEAST32;		  if (name[3] == 'o')		    return PRIoLEAST32;		  if (name[3] == 'u')		    return PRIuLEAST32;		  if (name[3] == 'x')		    return PRIxLEAST32;		  if (name[3] == 'X')		    return PRIXLEAST32;		  abort ();		}	      if (name[9] == '6' && name[10] == '4' && name[11] == '\0')		{		  if (name[3] == 'd')		    return PRIdLEAST64;		  if (name[3] == 'i')		    return PRIiLEAST64;		  if (name[3] == 'o')		    return PRIoLEAST64;		  if (name[3] == 'u')		    return PRIuLEAST64;		  if (name[3] == 'x')		    return PRIxLEAST64;		  if (name[3] == 'X')		    return PRIXLEAST64;		  abort ();		}	    }	  if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S'	      && name[7] == 'T')	    {	      if (name[8] == '8' && name[9] == '\0')		{		  if (name[3] == 'd')		    return PRIdFAST8;		  if (name[3] == 'i')		    return PRIiFAST8;		  if (name[3] == 'o')		    return PRIoFAST8;		  if (name[3] == 'u')		    return PRIuFAST8;		  if (name[3] == 'x')		    return PRIxFAST8;		  if (name[3] == 'X')		    return PRIXFAST8;		  abort ();		}	      if (name[8] == '1' && name[9] == '6' && name[10] == '\0')		{		  if (name[3] == 'd')		    return PRIdFAST16;		  if (name[3] == 'i')		    return PRIiFAST16;		  if (name[3] == 'o')		    return PRIoFAST16;		  if (name[3] == 'u')		    return PRIuFAST16;		  if (name[3] == 'x')		    return PRIxFAST16;		  if (name[3] == 'X')		    return PRIXFAST16;		  abort ();		}	      if (name[8] == '3' && name[9] == '2' && name[10] == '\0')		{		  if (name[3] == 'd')		    return PRIdFAST32;		  if (name[3] == 'i')		    return PRIiFAST32;		  if (name[3] == 'o')		    return PRIoFAST32;		  if (name[3] == 'u')		    return PRIuFAST32;		  if (name[3] == 'x')		    return PRIxFAST32;		  if (name[3] == 'X')		    return PRIXFAST32;		  abort ();		}	      if (name[8] == '6' && name[9] == '4' && name[10] == '\0')		{		  if (name[3] == 'd')		    return PRIdFAST64;		  if (name[3] == 'i')		    return PRIiFAST64;		  if (name[3] == 'o')		    return PRIoFAST64;		  if (name[3] == 'u')		    return PRIuFAST64;		  if (name[3] == 'x')		    return PRIxFAST64;		  if (name[3] == 'X')		    return PRIXFAST64;		  abort ();		}	    }	  if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X'	      && name[7] == '\0')	    {	      if (name[3] == 'd')		return PRIdMAX;	      if (name[3] == 'i')		return PRIiMAX;	      if (name[3] == 'o')		return PRIoMAX;	      if (name[3] == 'u')		return PRIuMAX;	      if (name[3] == 'x')		return PRIxMAX;	      if (name[3] == 'X')		return PRIXMAX;	      abort ();	    }	  if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R'	      && name[7] == '\0')	    {	      if (name[3] == 'd')		return PRIdPTR;	      if (name[3] == 'i')		return PRIiPTR;	      if (name[3] == 'o')		return PRIoPTR;	      if (name[3] == 'u')		return PRIuPTR;	      if (name[3] == 'x')		return PRIxPTR;	      if (name[3] == 'X')		return PRIXPTR;	      abort ();	    }	}    }  /* Test for a glibc specific printf() format directive flag.  */  if (name[0] == 'I' && name[1] == '\0')    {#if defined _LIBC || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)      /* The 'I' flag, in numeric format directives, replaces ASCII digits	 with the 'outdigits' defined in the LC_CTYPE locale facet.  This is	 used for Farsi (Persian) and maybe Arabic.  */      return "I";#else      return "";#endif    }  /* Other system dependent strings are not valid.  */  return NULL;}/* Load the message catalogs specified by FILENAME.  If it is no valid   message catalog do nothing.  */voidinternal_function_nl_load_domain (struct loaded_l10nfile *domain_file,		 struct binding *domainbinding){  __libc_lock_define_initialized_recursive (static, lock)  int fd = -1;  size_t size;#ifdef _LIBC  struct stat64 st;#else  struct stat st;#endif  struct mo_file_header *data = (struct mo_file_header *) -1;  int use_mmap = 0;  struct loaded_domain *domain;  int revision;  const char *nullentry;  size_t nullentrylen;  __libc_lock_lock_recursive (lock);  if (domain_file->decided != 0)    {      /* There are two possibilities:	 + this is the same thread calling again during this initialization	   via _nl_find_msg.  We have initialized everything this call needs.	 + this is another thread which tried to initialize this object.	   Not necessary anymore since if the lock is available this	   is finished.      */      goto done;    }  domain_file->decided = -1;  domain_file->data = NULL;  /* Note that it would be useless to store domainbinding in domain_file     because domainbinding might be == NULL now but != NULL later (after     a call to bind_textdomain_codeset).  */  /* If the record does not represent a valid locale the FILENAME     might be NULL.  This can happen when according to the given     specification the locale file name is different for XPG and CEN     syntax.  */  if (domain_file->filename == NULL)    goto out;  /* Try to open the addressed file.  */  fd = open (domain_file->filename, O_RDONLY | O_BINARY);  if (fd == -1)    goto out;  /* We must know about the size of the file.  */  if (#ifdef _LIBC      __builtin_expect (fstat64 (fd, &st) != 0, 0)#else      __builtin_expect (fstat (fd, &st) != 0, 0)#endif      || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)      || __builtin_expect (size < sizeof (struct mo_file_header), 0))    /* Something went wrong.  */    goto out;#ifdef HAVE_MMAP  /* Now we are ready to load the file.  If mmap() is available we try     this first.  If not available or it failed we try to load it.  */  data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,					 MAP_PRIVATE, fd, 0);  if (__builtin_expect (data != (struct mo_file_header *) -1, 1))    {      /* mmap() call was successful.  */      close (fd);      fd = -1;      use_mmap = 1;    }#endif  /* If the data is not yet available (i.e. mmap'ed) we try to load     it manually.  */  if (data == (struct mo_file_header *) -1)    {      size_t to_read;      char *read_ptr;      data = (struct mo_file_header *) malloc (size);      if (data == NULL)	goto out;      to_read = size;      read_ptr = (char *) data;      do	{	  long int nb = (long int) read (fd, read_ptr, to_read);	  if (nb <= 0)	    {#ifdef EINTR	      if (nb == -1 && errno == EINTR)		continue;#endif	      goto out;	    }	  read_ptr += nb;	  to_read -= nb;	}      while (to_read > 0);      close (fd);      fd = -1;    }

⌨️ 快捷键说明

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