X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib.c;h=32120155918b888d0a8833ad80899891c2081f12;hp=a81ecdaab0a49636622ac4a32e4cab7b1dd2cf2b;hb=2ea77d3b2827ba23feb756ce2fb936565ae38998;hpb=96d53ff49c308769efbf708e1e65819077cb7af6 diff --git a/lib.c b/lib.c index a81ecda..3212015 100644 --- a/lib.c +++ b/lib.c @@ -28,14 +28,77 @@ #include #include +#ifdef HAVE_SYSEXITS_H +#include +#else /* Make sure EX_OK is defined */ +#define EX_OK 0 +#endif + +#include +#include + #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; @@ -85,7 +148,7 @@ void mutt_unlink (const char *s) 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); @@ -155,7 +218,7 @@ int safe_symlink (const char *oldpath, const char *newpath) 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; @@ -329,19 +392,19 @@ int mutt_rx_sanitize_string (char *dest, size_t destlen, const char *src) * 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) { @@ -371,7 +434,7 @@ char *mutt_read_line (char *s, size_t * size, FILE * fp, int *line) /* 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); } } } @@ -416,7 +479,7 @@ char *mutt_concat_path (char *d, const char *dir, const char *fname, size_t l) { 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); @@ -432,3 +495,17 @@ const char *mutt_basename (const char *f) 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; +}