/**
* mutt_file_dirname - Return a path up to, but not including, the final '/'
- * @param p Path
+ * @param path Path
* @retval ptr The directory containing p
*
* Unlike the IEEE Std 1003.1-2001 specification of dirname(3), this
* implementation does not modify its parameter, so callers need not manually
* copy their paths into a modifiable buffer prior to calling this function.
*/
-char *mutt_file_dirname(const char *p)
+char *mutt_file_dirname(const char *path)
{
- char *buf = mutt_mem_malloc(_POSIX_PATH_MAX);
- mutt_str_strfcpy(buf, p, sizeof(buf));
- return dirname(buf);
+ char buf[PATH_MAX] = { 0 };
+ mutt_str_strfcpy(buf, path, sizeof(buf));
+ return mutt_str_strdup(dirname(buf));
}
/**
return ((st.st_size == 0));
}
+
int mutt_file_copy_bytes(FILE *in, FILE *out, size_t size);
int mutt_file_copy_stream(FILE *fin, FILE *fout);
time_t mutt_file_decrease_mtime(const char *f, struct stat *st);
-char * mutt_file_dirname(const char *p);
+char * mutt_file_dirname(const char *path);
int mutt_file_fclose(FILE **f);
FILE * mutt_file_fopen(const char *path, const char *mode);
int mutt_file_fsync_close(FILE **f);
*/
size_t mutt_str_strfcpy(char *dest, const char *src, size_t dsize)
{
- if (dsize == 0)
+ if (!dest || (dsize == 0))
return 0;
+ if (!src)
+ {
+ dest[0] = '\0';
+ return 0;
+ }
char *dest0 = dest;
while ((--dsize > 0) && (*src != '\0'))