#include <fcntl.h>
#include <pwd.h>
+#ifdef HAVE_SYSEXITS_H
+#include <sysexits.h>
+#else /* Make sure EX_OK is defined <philiph@pobox.com> */
+#define EX_OK 0
+#endif
+
+#include <lib-lib/mem.h>
+#include <lib-lib/str.h>
+
#include "lib.h"
-#include "lib/mem.h"
-#include "lib/str.h"
#include "lib/debug.h"
extern short Umask;
+static struct sysexits
+{
+ int v;
+ const char *str;
+}
+sysexits_h[] =
+{
+#ifdef EX_USAGE
+ { 0xff & EX_USAGE, "Bad usage." },
+#endif
+#ifdef EX_DATAERR
+ { 0xff & EX_DATAERR, "Data format error." },
+#endif
+#ifdef EX_NOINPUT
+ { 0xff & EX_NOINPUT, "Cannot open input." },
+#endif
+#ifdef EX_NOUSER
+ { 0xff & EX_NOUSER, "User unknown." },
+#endif
+#ifdef EX_NOHOST
+ { 0xff & EX_NOHOST, "Host unknown." },
+#endif
+#ifdef EX_UNAVAILABLE
+ { 0xff & EX_UNAVAILABLE, "Service unavailable." },
+#endif
+#ifdef EX_SOFTWARE
+ { 0xff & EX_SOFTWARE, "Internal error." },
+#endif
+#ifdef EX_OSERR
+ { 0xff & EX_OSERR, "Operating system error." },
+#endif
+#ifdef EX_OSFILE
+ { 0xff & EX_OSFILE, "System file missing." },
+#endif
+#ifdef EX_CANTCREAT
+ { 0xff & EX_CANTCREAT, "Can't create output." },
+#endif
+#ifdef EX_IOERR
+ { 0xff & EX_IOERR, "I/O error." },
+#endif
+#ifdef EX_TEMPFAIL
+ { 0xff & EX_TEMPFAIL, "Deferred." },
+#endif
+#ifdef EX_PROTOCOL
+ { 0xff & EX_PROTOCOL, "Remote protocol error." },
+#endif
+#ifdef EX_NOPERM
+ { 0xff & EX_NOPERM, "Insufficient permission." },
+#endif
+#ifdef EX_CONFIG
+ { 0xff & EX_NOPERM, "Local configuration error." },
+#endif
+ { S_ERR, "Exec error." },
+ { -1, NULL}
+};
+
void mutt_nocurses_error (const char *fmt, ...)
{
va_list ap;
if ((f = fdopen (fd, "r+"))) {
unlink (s);
- memset (buf, 0, sizeof (buf));
+ p_clear(buf, sizeof(buf));
while (sb.st_size > 0) {
fwrite (buf, 1, MIN (sizeof (buf), sb.st_size), f);
sb.st_size -= MIN (sizeof (buf), sb.st_size);
char abs_oldpath[_POSIX_PATH_MAX];
if ((getcwd (abs_oldpath, sizeof abs_oldpath) == NULL) ||
- (mutt_strlen (abs_oldpath) + 1 + mutt_strlen (oldpath) + 1 >
+ (m_strlen(abs_oldpath) + 1 + m_strlen(oldpath) + 1 >
sizeof abs_oldpath))
return -1;
* If a line ends with "\", this char and the linefeed is removed,
* and the next line is read too.
*/
-char *mutt_read_line (char *s, size_t * size, FILE * fp, int *line)
+char *mutt_read_line(char *s, size_t * size, FILE * fp, int *line)
{
size_t offset = 0;
char *ch;
if (!s) {
- s = safe_malloc (STRING);
+ s = p_new(char, STRING);
*size = STRING;
}
FOREVER {
if (fgets (s + offset, *size - offset, fp) == NULL) {
- FREE (&s);
+ p_delete(&s);
return NULL;
}
if ((ch = strchr (s + offset, '\n')) != NULL) {
/* There wasn't room for the line -- increase ``s'' */
offset = *size - 1; /* overwrite the terminating 0 */
*size += STRING;
- safe_realloc (&s, *size);
+ p_realloc(&s, *size);
}
}
}
{
const char *fmt = "%s/%s";
- if (!*fname || (*dir && dir[mutt_strlen (dir) - 1] == '/'))
+ if (!*fname || (*dir && dir[m_strlen(dir) - 1] == '/'))
fmt = "%s%s";
snprintf (d, l, fmt, dir, fname);
else
return f;
}
+
+const char *
+mutt_strsysexit(int e)
+{
+ int i;
+
+ for(i = 0; sysexits_h[i].str; i++)
+ {
+ if(e == sysexits_h[i].v)
+ break;
+ }
+
+ return sysexits_h[i].str;
+}