/*
- * Copyright (C) 2004-2007 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2004-2008 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
void *p = malloc(size);
if (!p) {
- PARA_EMERG_LOG("%s", "malloc failed, aborting\n");
+ PARA_EMERG_LOG("malloc failed (size = %zu), aborting\n",
+ size);
exit(EXIT_FAILURE);
}
return p;
}
/**
- * paraslash's version of dirname()
+ * Paraslash's version of dirname().
*
- * \param name pointer to the full path
+ * \param name Pointer to the full path.
*
- * Compute the directory component of \p name
+ * Compute the directory component of \p name.
*
- * \return If \p name is \รพ NULL or the empty string, return \p NULL.
+ * \return If \p name is \p NULL or the empty string, return \p NULL.
* Otherwise, Make a copy of \p name and return its directory component. Caller
* is responsible to free the result.
*/
}
/**
- * paraslash's version of basename()
+ * Paraslash's version of basename().
*
- * \param name Pointer to the full path
+ * \param name Pointer to the full path.
*
- * Compute the filename component of \p name
+ * Compute the filename component of \a name.
*
- * \return If \p name is \p NULL or the empty string, return \p NULL,
- * Otherwise, make a copy of \p name and return its filename component. Caller
- * is responsible to free the result.
+ * \return \p NULL if (a) \a name is the empty string of \p NULL, or (b) name
+ * ends with a slash. Otherwise, a pointer within \a name is returned. Caller
+ * must not free the result.
*/
-__must_check __malloc char *para_basename(const char *name)
+__must_check const char *para_basename(const char *name)
{
- char *p;
+ const char *ret;
if (!name || !*name)
return NULL;
- p = strrchr(name, '/');
- if (!p)
- return para_strdup(name);
- p++;
- if (!*p)
- return NULL;
- return para_strdup(p);
+ ret = strrchr(name, '/');
+ if (!ret)
+ return name;
+ ret++;
+ return ret;
}
/**
* set the given mode of the tempfile if mkstemp() returned success.
*
* \return The file descriptor of the temp file just created on success.
- * On errors, -E_MKSTEMP or -E_FCHMOD is returned.
+ * On errors, a negative value is returned.
*/
__must_check int para_mkstemp(char *template, mode_t mode)
{
int tmp, fd = mkstemp(template);
if (fd < 0)
- return -E_MKSTEMP;
+ return -ERRNO_TO_PARA_ERROR(errno);
tmp = fchmod(fd, mode);
if (tmp >= 0)
return fd;
+ tmp = errno;
close(fd);
unlink(template);
- return -E_FCHMOD;
+ return -ERRNO_TO_PARA_ERROR(tmp);
}
/**
return para_strdup(u.nodename);
}
-enum for_each_line_modes{LINE_MODE_RO, LINE_MODE_RW};
+/**
+ * Used to distinguish between read-only and read-write mode.
+ *
+ * \sa for_each_line(), for_each_line_ro().
+ */
+enum for_each_line_modes{
+ /** Activate read-only mode. */
+ LINE_MODE_RO,
+ /** Activate read-write mode. */
+ LINE_MODE_RW
+};
static int for_each_complete_line(enum for_each_line_modes mode, char *buf,
size_t size, line_handler_t *line_handler, void *private_data)
}
/**
- * call a custom function for each complete line
+ * Call a custom function for each complete line.
*
- * \param buf the buffer containing data seperated by newlines
- * \param size the number of bytes in \a buf
- * \param line_handler the custom function
- * \param private_data pointer to data which is passed to \a line_handler
+ * \param buf The buffer containing data seperated by newlines.
+ * \param size The number of bytes in \a buf.
+ * \param line_handler The custom function.
+ * \param private_data Pointer passed to \a line_handler.
*
* If \p line_handler is \p NULL, the function returns the number of complete
* lines in \p buf. Otherwise, \p line_handler is called for each complete
* of bytes not handled to \p line_handler on success, or the negative return
* value of the \p line_handler on errors.
*
- * \sa for_each_line_ro()
+ * \sa for_each_line_ro().
*/
int for_each_line(char *buf, size_t size, line_handler_t *line_handler,
void *private_data)
}
/**
- * call a custom function for each complete line
- *
- * \param buf same meaning as in \p for_each_line
- * \param size same meaning as in \p for_each_line
- * \param line_handler same meaning as in \p for_each_line
- * \param private_data same meaning as in \p for_each_line
+ * Call a custom function for each complete line.
*
- * This function behaves like \p for_each_line() with the following differences:
+ * \param buf Same meaning as in \p for_each_line().
+ * \param size Same meaning as in \p for_each_line().
+ * \param line_handler Same meaning as in \p for_each_line().
+ * \param private_data Same meaning as in \p for_each_line().
*
- * - buf is left unchanged
+ * This function behaves like \p for_each_line(), but \a buf is left unchanged.
*
* \return On success, the function returns the number of complete lines in \p
* buf, otherwise the (negative) return value of \p line_handler is returned.
*
- * \sa for_each_line()
+ * \sa for_each_line().
*/
int for_each_line_ro(char *buf, size_t size, line_handler_t *line_handler,
void *private_data)
return ret;
}
+/** \cond LLONG_MAX and LLONG_LIN might not be defined. */
#ifndef LLONG_MAX
#define LLONG_MAX (1 << (sizeof(long) - 1))
#endif
#ifndef LLONG_MIN
#define LLONG_MIN (-LLONG_MAX - 1LL)
#endif
+/** \endcond */
/**
* Convert a string to a 64-bit signed integer value.