Add Daniel Grisinger <dgris@dimensional.com>.
[p5sagit/p5-mst-13.2.git] / util.c
diff --git a/util.c b/util.c
index 3be6a91..77dd842 100644 (file)
--- a/util.c
+++ b/util.c
@@ -621,6 +621,9 @@ perl_init_i18nl10n(int printwarn)
 #ifdef USE_LOCALE_NUMERIC
     char *curnum     = NULL;
 #endif /* USE_LOCALE_NUMERIC */
+#ifdef __GLIBC__
+    char *language   = PerlEnv_getenv("LANGUAGE");
+#endif
     char *lc_all     = PerlEnv_getenv("LC_ALL");
     char *lang       = PerlEnv_getenv("LANG");
     bool setlocale_failure = FALSE;
@@ -724,6 +727,14 @@ perl_init_i18nl10n(int printwarn)
            PerlIO_printf(PerlIO_stderr(),
                "perl: warning: Please check that your locale settings:\n");
 
+#ifdef __GLIBC__
+           PerlIO_printf(PerlIO_stderr(),
+                         "\tLANGUAGE = %c%s%c,\n",
+                         language ? '"' : '(',
+                         language ? language : "unset",
+                         language ? '"' : ')');
+#endif
+
            PerlIO_printf(PerlIO_stderr(),
                          "\tLC_ALL = %c%s%c,\n",
                          lc_all ? '"' : '(',
@@ -2279,9 +2290,9 @@ repeatcpy(register char *to, register char *from, I32 len, register I32 count)
     register char *frombase = from;
 
     if (len == 1) {
-       todo = *from;
+       register char c = *from;
        while (count-- > 0)
-           *to++ = todo;
+           *to++ = c;
        return;
     }
     while (count-- > 0) {
@@ -2395,6 +2406,29 @@ same_dirent(char *a, char *b)
 #endif /* !HAS_RENAME */
 
 UV
+scan_bin(char *start, I32 len, I32 *retlen)
+{
+    register char *s = start;
+    register UV retval = 0;
+    bool overflowed = FALSE;
+    while (len && *s >= '0' && *s <= '1') {
+      register UV n = retval << 1;
+      if (!overflowed && (n >> 1) != retval) {
+          warn("Integer overflow in binary number");
+          overflowed = TRUE;
+      }
+      retval = n | (*s++ - '0');
+      len--;
+    }
+    if (len && (*s >= '2' || *s <= '9')) {
+      dTHR;
+      if (ckWARN(WARN_UNSAFE))
+          warner(WARN_UNSAFE, "Illegal binary digit ignored");
+    }
+    *retlen = s - start;
+    return retval;
+}
+UV
 scan_oct(char *start, I32 len, I32 *retlen)
 {
     register char *s = start;
@@ -2458,7 +2492,7 @@ find_script(char *scriptname, bool dosearch, char **search_ext, I32 flags)
     dTHR;
     char *xfound = Nullch;
     char *xfailed = Nullch;
-    char tmpbuf[512];
+    char tmpbuf[MAXPATHLEN];
     register char *s;
     I32 len;
     int retval;
@@ -2601,7 +2635,7 @@ find_script(char *scriptname, bool dosearch, char **search_ext, I32 flags)
            if (len + 1 + strlen(scriptname) + MAX_EXT_LEN >= sizeof tmpbuf)
                continue;       /* don't search dir with too-long name */
            if (len
-#if defined(atarist) || defined(DOSISH)
+#if defined(atarist) || defined(__MINT__) || defined(DOSISH)
                && tmpbuf[len - 1] != '/'
                && tmpbuf[len - 1] != '\\'
 #endif
@@ -3055,9 +3089,11 @@ get_vtbl(int vtbl_id)
     case want_vtbl_regdatum:
        result = &PL_vtbl_regdatum;
        break;
+#ifdef USE_LOCALE_COLLATE
     case want_vtbl_collxfrm:
        result = &PL_vtbl_collxfrm;
        break;
+#endif
     case want_vtbl_amagic:
        result = &PL_vtbl_amagic;
        break;