]> diplodocus.org Git - nmh/blobdiff - sbr/utils.c
Switched to "server" instead of "client" for SASL remote hostname.
[nmh] / sbr / utils.c
index 4405f4c95a5c52d5cf406d52cc95535479b71781..6ab5f53461608e5a17759f26de79e1b180d492cc 100644 (file)
@@ -64,6 +64,24 @@ mh_xrealloc(void *ptr, size_t size)
     return memory;
 }
 
+/*
+ * Safely call calloc
+ */
+void *
+mh_xcalloc(size_t nmemb, size_t size)
+{
+    void *memory;
+
+    if (nmemb == 0  ||  size == 0)
+        adios(NULL, "Tried to calloc 0 bytes");
+
+    if ((memory = calloc(nmemb, size))) {
+        return memory;
+    } else {
+        adios(NULL, "calloc failed");
+    }
+}
+
 /*
  * Return the present working directory, if the current directory does not
  * exist, or is too long, make / the pwd.
@@ -79,7 +97,9 @@ pwd(void)
         if (!mypath || !*mypath
                 || (strcpy (curwd, mypath), chdir (curwd)) == -1) {
             strcpy (curwd, "/");
-            chdir (curwd);
+            if (chdir (curwd) < 0) {
+                advise (curwd, "chdir");
+            }
         }
         return curwd;
     }
@@ -180,7 +200,7 @@ void create_folder(char *folder, int autocreate, void (*done_callback)(int))
         if (autocreate == 0) {
             /* ask before creating folder */
             cp = concat ("Create folder \"", folder, "\"? ", NULL);
-            if (!getanswer (cp))
+            if (!read_yes_or_no_if_tty (cp))
                 done_callback (1);
             free (cp);
         } else if (autocreate == -1) {
@@ -328,7 +348,10 @@ nmh_strcasestr (const char *s1, const char *s2) {
 
 int
 nmh_init(const char *argv0, int read_context) {
-    setlocale(LC_ALL, "");
+    if (! setlocale(LC_ALL, "")) {
+        admonish(NULL, "setlocale failed, check your LC_ALL, LC_CTYPE, and "
+                 "LANG environment variables");
+    }
 
     invo_name = r1bindex ((char *) argv0, '/');