]> granicus.if.org Git - shadow/commitdiff
* lib/getdef.h, lib/getdef.c: Add getdef_ulong().
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Fri, 13 Jun 2008 21:35:22 +0000 (21:35 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Fri, 13 Jun 2008 21:35:22 +0000 (21:35 +0000)
* lib/getdef.c: Added TODOs because of lack of error checking.
* lib/getdef.c: The size argument of fgets is an int, not a
size_t.
* lib/getdef.c: Avoid multi-statements lines.

ChangeLog
lib/getdef.c
lib/getdef.h

index f97bc3fcff6181cfb684489a8fbddd0aa842de98..906b79e3ec281c33a52ddab33a8290049ed92f47 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/getdef.h, lib/getdef.c: Add getdef_ulong().
+       * lib/getdef.c: Added TODOs because of lack of error checking.
+       * lib/getdef.c: The size argument of fgets is an int, not a
+       size_t.
+       * lib/getdef.c: Avoid multi-statements lines.
+
 2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
 
        * src/id.c: Make sure malloc receives a size_t.
index 2f3659a4373c0d9fb4ea7894391ea80547933886..02057de5abcf029d5b11bb9046dcf5ecb29cb726 100644 (file)
@@ -203,6 +203,7 @@ int getdef_num (const char *item, int dflt)
        }
 
        return (int) strtol (d->value, (char **) NULL, 0);
+       /* TODO: check for errors */
 }
 
 
@@ -228,6 +229,7 @@ unsigned int getdef_unum (const char *item, unsigned int dflt)
        }
 
        return (unsigned int) strtoul (d->value, (char **) NULL, 0);
+       /* TODO: check for errors */
 }
 
 
@@ -253,8 +255,33 @@ long getdef_long (const char *item, long dflt)
        }
 
        return strtol (d->value, (char **) NULL, 0);
+       /* TODO: check for errors */
 }
 
+/*
+ * getdef_ulong - get unsigned long numerical value from table of definitions
+ *
+ * Returns numeric value of specified item, else the "dflt" value if
+ * the item is not defined.  Octal (leading "0") and hex (leading "0x")
+ * values are handled.
+ */
+
+unsigned long getdef_ulong (const char *item, unsigned int dflt)
+{
+       struct itemdef *d;
+
+       if (!def_loaded) {
+               def_load ();
+       }
+
+       d = def_find (item);
+       if ((NULL == d) || (NULL == d->value)) {
+               return dflt;
+       }
+
+       return (unsigned long) strtoul (d->value, (char **) NULL, 0);
+       /* TODO: check for errors */
+}
 
 /*
  * putdef_str - override the value read from /etc/login.defs
@@ -364,17 +391,18 @@ static void def_load (void)
        /*
         * Go through all of the lines in the file.
         */
-       while (fgets (buf, sizeof (buf), fp) != NULL) {
+       while (fgets (buf, (int) sizeof (buf), fp) != NULL) {
 
                /*
                 * Trim trailing whitespace.
                 */
-               for (i = strlen (buf) - 1; i >= 0; --i) {
+               for (i = (int) strlen (buf) - 1; i >= 0; --i) {
                        if (!isspace (buf[i])) {
                                break;
                        }
                }
-               buf[++i] = '\0';
+               i++;
+               buf[i] = '\0';
 
                /*
                 * Break the line into two fields.
index 8398ac2ae3a7b716b3e95d9afc568048e22bc2e4..ce7212de9c6890042dd6464705b4d5527ec02c5c 100644 (file)
@@ -36,6 +36,7 @@
 extern bool getdef_bool (const char *);
 extern long getdef_long (const char *, long);
 extern int getdef_num (const char *, int);
+extern unsigned int getdef_ulong (const char *, unsigned long);
 extern unsigned int getdef_unum (const char *, unsigned int);
 extern char *getdef_str (const char *);
 extern int putdef_str (const char *, const char *);