paraslash 0.3.0
[paraslash.git] / string.c
index 78d54f6..a6019e3 100644 (file)
--- a/string.c
+++ b/string.c
@@ -1,5 +1,5 @@
 /*
- * 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.
  */
@@ -63,7 +63,8 @@ __must_check __malloc void *para_malloc(size_t size)
        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;
@@ -162,13 +163,13 @@ __must_check __malloc char *para_strcat(char *a, const char *b)
 }
 
 /**
- * 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.
  */
@@ -188,29 +189,27 @@ __must_check __malloc char *para_dirname(const char *name)
 }
 
 /**
- * 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;
 }
 
 /**
@@ -393,7 +392,17 @@ __malloc char *para_hostname(void)
        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)
@@ -446,12 +455,12 @@ static int for_each_complete_line(enum for_each_line_modes mode, char *buf,
 }
 
 /**
- * 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
@@ -465,7 +474,7 @@ static int for_each_complete_line(enum for_each_line_modes mode, char *buf,
  * 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)
@@ -475,21 +484,19 @@ int for_each_line(char *buf, size_t size, line_handler_t *line_handler,
 }
 
 /**
- * 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)
@@ -549,12 +556,14 @@ __printf_2_3 int para_printf(struct para_buffer *b, const char *fmt, ...)
        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.