r25026: Move param/param.h out of includes.h
[kai/samba-autobuild/.git] / source4 / scripting / ejs / smbcalls_config.c
index 6ee9c8305b59732b66a5c13d55ac56306be671e2..b31b70bda8b551c323f7559322d00cd6c93b2ae1 100644 (file)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -16,8 +16,7 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
@@ -26,6 +25,7 @@
 #include "param/loadparm.h"
 #include "system/network.h"
 #include "lib/socket/netif.h"
+#include "param/param.h"
 
 /*
   return a list of defined services
@@ -90,7 +90,8 @@ static int ejs_lpGet(MprVarHandle eid, int argc, char **argv)
                /* its a share parameter */
                int snum = lp_servicenumber(argv[0]);
                if (snum == -1) {
-                       return -1;
+                       mpr_Return(eid, mprCreateUndefinedVar());
+                       return 0;
                }
                if (strchr(argv[1], ':')) {
                        /* its a parametric option on a share */
@@ -99,16 +100,23 @@ static int ejs_lpGet(MprVarHandle eid, int argc, char **argv)
                                                          strcspn(argv[1], ":"));
                        const char *option = strchr(argv[1], ':') + 1;
                        const char *value;
-                       if (type == NULL || option == NULL) return -1;
+                       if (type == NULL || option == NULL) {
+                               mpr_Return(eid, mprCreateUndefinedVar());
+                               return 0;
+                       }
                        value = lp_get_parametric(snum, type, option);
-                       if (value == NULL) return -1;
+                       if (value == NULL) {
+                               mpr_Return(eid, mprCreateUndefinedVar());
+                               return 0;
+                       }
                        mpr_ReturnString(eid, value);
                        return 0;
                }
 
                parm = lp_parm_struct(argv[1]);
                if (parm == NULL || parm->class == P_GLOBAL) {
-                       return -1;
+                       mpr_Return(eid, mprCreateUndefinedVar());
+                       return 0;
                }
                parm_ptr = lp_parm_ptr(snum, parm);
        } else if (strchr(argv[0], ':')) {
@@ -117,20 +125,30 @@ static int ejs_lpGet(MprVarHandle eid, int argc, char **argv)
                                                  argv[0], strcspn(argv[0], ":"));
                const char *option = strchr(argv[0], ':') + 1;
                const char *value;
-               if (type == NULL || option == NULL) return -1;
+               if (type == NULL || option == NULL) {
+                       mpr_Return(eid, mprCreateUndefinedVar());
+                       return 0;
+               }
                value = lp_get_parametric(-1, type, option);
-               if (value == NULL) return -1;
+               if (value == NULL) {
+                       mpr_Return(eid, mprCreateUndefinedVar());
+                       return 0;
+               }
                mpr_ReturnString(eid, value);
                return 0;
        } else {
                /* its a global parameter */
                parm = lp_parm_struct(argv[0]);
-               if (parm == NULL) return -1;
+               if (parm == NULL) {
+                       mpr_Return(eid, mprCreateUndefinedVar());
+                       return 0;
+               }
                parm_ptr = lp_parm_ptr(-1, parm);
        }
 
        if (parm == NULL || parm_ptr == NULL) {
-               return -1;
+               mpr_Return(eid, mprCreateUndefinedVar());
+               return 0;
        }
 
        /* construct and return the right type of ejs object */
@@ -143,6 +161,7 @@ static int ejs_lpGet(MprVarHandle eid, int argc, char **argv)
                mpr_Return(eid, mprCreateBoolVar(*(BOOL *)parm_ptr));
                break;
        case P_INTEGER:
+       case P_OCTAL:
        case P_BYTES:
                mpr_Return(eid, mprCreateIntegerVar(*(int *)parm_ptr));
                break;
@@ -153,12 +172,14 @@ static int ejs_lpGet(MprVarHandle eid, int argc, char **argv)
                                return 0;
                        }
                }
-               return -1;      
+               mpr_Return(eid, mprCreateUndefinedVar());
+               return 0;       
        case P_LIST: 
                mpr_Return(eid, mprList(parm->label, *(const char ***)parm_ptr));
                break;
        case P_SEP:
-               return -1;
+               mpr_Return(eid, mprCreateUndefinedVar());
+               return 0;
        }
        return 0;
 }