2007-04-27 Jonathan Chambers <joncham@gmail.com>
[mono.git] / eglib / src / gstr.c
index de4f67ab52ab20d7f0a88fd0e872568407b10a28..3990eadc1da8d4e7de6fefc7ba71b0da1924c88e 100644 (file)
@@ -26,6 +26,7 @@
  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
+#include <config.h>
 #include <stdio.h>
 #include <string.h>
 #include <ctype.h>
 gchar *
 g_strndup (const gchar *str, gsize n)
 {
+#ifdef HAVE_STRNDUP
        return strndup (str, n);
+#else
+       if (str) {
+               char *retval = malloc(n+1);
+               if (retval) {
+                       strncpy(retval, str, n)[n] = 0;
+               }
+               return retval;
+       }
+       return NULL;
+#endif
 }
 
 void
@@ -63,8 +75,8 @@ g_strv_length(gchar **str_array)
 gboolean
 g_str_has_suffix(const gchar *str, const gchar *suffix)
 {
-       gint str_length;
-       gint suffix_length;
+       size_t str_length;
+       size_t suffix_length;
        
        g_return_val_if_fail(str != NULL, FALSE);
        g_return_val_if_fail(suffix != NULL, FALSE);
@@ -80,8 +92,8 @@ g_str_has_suffix(const gchar *str, const gchar *suffix)
 gboolean
 g_str_has_prefix(const gchar *str, const gchar *prefix)
 {
-       gint str_length;
-       gint prefix_length;
+       size_t str_length;
+       size_t prefix_length;
        
        g_return_val_if_fail(str != NULL, FALSE);
        g_return_val_if_fail(prefix != NULL, FALSE);
@@ -132,10 +144,10 @@ g_strerror (gint errnum)
 gchar *
 g_strconcat (const gchar *first, ...)
 {
-       g_return_val_if_fail (first != NULL, NULL);
        va_list args;
-       int total = 0;
+       size_t total = 0;
        char *s, *ret;
+       g_return_val_if_fail (first != NULL, NULL);
 
        total += strlen (first);
        va_start (args, first);
@@ -166,7 +178,7 @@ g_strsplit (const gchar *string, const gchar *delimiter, gint max_tokens)
        gchar *strtok_save, **vector;
        gchar *token, *token_c;
        gint size = 1;
-       gint token_length;
+       size_t token_length;
 
        g_return_val_if_fail(string != NULL, NULL);
        g_return_val_if_fail(delimiter != NULL, NULL);
@@ -227,8 +239,8 @@ g_strsplit (const gchar *string, const gchar *delimiter, gint max_tokens)
 gchar *
 g_strreverse (gchar *str)
 {
-       guint len, half;
-       gint i;
+       size_t len, half;
+       size_t i;
        gchar c;
 
        if (str == NULL)
@@ -250,7 +262,7 @@ g_strjoin (const gchar *separator, ...)
 {
        va_list args;
        char *res, *s;
-       int len, slen;
+       size_t len, slen;
 
        if (separator != NULL)
                slen = strlen (separator);
@@ -288,7 +300,7 @@ gchar *
 g_strjoinv (const gchar *separator, gchar **str_array)
 {
        char *res;
-       int slen, len, i;
+       size_t slen, len, i;
        
        if (separator != NULL)
                slen = strlen (separator);
@@ -318,7 +330,7 @@ g_strjoinv (const gchar *separator, gchar **str_array)
 gchar *
 g_strchug (gchar *str)
 {
-       gint len;
+       size_t len;
        gchar *tmp;
 
        if (str == NULL)
@@ -399,7 +411,7 @@ g_snprintf(gchar *string, gulong n, gchar const *format, ...)
        return ret;
 }
 
-static const char const hx [] = { '0', '1', '2', '3', '4', '5', '6', '7',
+static const char hx [] = { '0', '1', '2', '3', '4', '5', '6', '7',
                                  '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
 
 static gboolean
@@ -419,14 +431,14 @@ char_needs_encoding (char c)
 gchar *
 g_filename_to_uri (const gchar *filename, const gchar *hostname, GError **error)
 {
-       int n;
+       size_t n;
        char *ret, *rp;
        const char *p;
        
        g_return_val_if_fail (filename != NULL, NULL);
 
        if (hostname != NULL)
-               g_warning ("eglib: g_filename_to_uri: hostname not handled");
+               g_warning ("%s", "eglib: g_filename_to_uri: hostname not handled");
 
        if (*filename != '/'){
                if (error != NULL)
@@ -479,7 +491,7 @@ g_filename_from_uri (const gchar *uri, gchar **hostname, GError **error)
        g_return_val_if_fail (uri != NULL, NULL);
 
        if (hostname != NULL)
-               g_warning ("eglib: g_filename_from_uri: hostname not handled");
+               g_warning ("%s", "eglib: g_filename_from_uri: hostname not handled");
 
        if (strncmp (uri, "file:///", 8) != 0){
                if (error != NULL)
@@ -507,7 +519,7 @@ g_filename_from_uri (const gchar *uri, gchar **hostname, GError **error)
 
        for (p = uri + 8, r = result + 1; *p; p++){
                if (*p == '%'){
-                       *r++ = (decode (p [1]) << 4) | decode (p [2]);
+                       *r++ = (char)((decode (p [1]) << 4) | decode (p [2]));
                        p += 2;
                } else
                        *r++ = *p;
@@ -522,7 +534,7 @@ g_strdown (gchar *string)
        g_return_if_fail (string != NULL);
 
        while (*string){
-               *string = tolower (*string);
+               *string = (gchar)tolower (*string);
                string++;
        }
 }
@@ -553,7 +565,7 @@ g_ascii_strdown (const gchar *str, gssize len)
 gint
 g_ascii_strncasecmp (const gchar *s1, const gchar *s2, gsize n)
 {
-       int i;
+       gsize i;
        
        g_return_val_if_fail (s1 != NULL, 0);
        g_return_val_if_fail (s2 != NULL, 0);
@@ -592,10 +604,12 @@ g_strdelimit (gchar *string, const gchar *delimiters, gchar new_delimiter)
        return string;
 }
 
-#ifndef HAVE_STRLCPY
 gsize 
 g_strlcpy (gchar *dest, const gchar *src, gsize dest_size)
 {
+#ifdef HAVE_STRLCPY
+       return strlcpy (dest, src, dest_size);
+#else
        gchar *d;
        const gchar *s;
        gchar c;
@@ -622,8 +636,8 @@ g_strlcpy (gchar *dest, const gchar *src, gsize dest_size)
        /* we need to return the length of src here */
        while (*s++) ; /* instead of a plain strlen, we use 's' */
        return s - src - 1;
-}
 #endif
+}
 
 static const gchar escaped_dflt [256] = {
        1, 1, 1, 1, 1, 1, 1, 1, 'b', 't', 'n', 1, 'f', 'r', 1, 1,
@@ -650,7 +664,7 @@ g_strescape (const gchar *source, const gchar *exceptions)
        gchar escaped [256];
        const gchar *ptr;
        gchar c;
-       int op;
+       gchar op;
        gchar *result;
        gchar *res_ptr;
 
@@ -702,3 +716,4 @@ g_ascii_xdigit_value (gchar c)
 }
 
 
+