X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fsmfs%2Foptions.c;h=c707388d9e5de7fc70e744712c3d35bb54a9a3fb;hb=b91058999ccd0e34bcc689acd1afdcad24de5590;hp=8ff445eafed3c9a26742b3b43f31e0914c8cda13;hpb=090c677210ee2946d99c71412e4ff762bb300f4f;p=fs%2Flustre-release.git diff --git a/lustre/smfs/options.c b/lustre/smfs/options.c index 8ff445e..c707388 100644 --- a/lustre/smfs/options.c +++ b/lustre/smfs/options.c @@ -1,6 +1,27 @@ -/* - * snapfs/options.c +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: + * + * lustre/smfs/options.c + * Lustre filesystem abstraction routines + * + * Copyright (C) 2004 Cluster File Systems, Inc. + * + * This file is part of Lustre, http://www.lustre.org. + * + * Lustre is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * Lustre is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Lustre; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + #define DEBUG_SUBSYSTEM S_SM #include @@ -10,88 +31,96 @@ #include #include #include +#include +#include +#include #include -#include "smfs_internal.h" - +#include +#include +#include "smfs_internal.h" static struct list_head option_list; -char *options = NULL; -char *opt_left = NULL; +static char *options = NULL; +static char *opt_left = NULL; int init_option(char *data) { - INIT_LIST_HEAD(&option_list); - SM_ALLOC(options, strlen(data) + 1); - if (!options) { - CERROR("Can not allocate memory \n"); - return -ENOMEM; - } - memcpy(options, data, strlen(data)); - opt_left = options; - return 0; + INIT_LIST_HEAD(&option_list); + OBD_ALLOC(options, strlen(data) + 1); + if (!options) { + CERROR("Can not allocate memory \n"); + return -ENOMEM; + } + memcpy(options, data, strlen(data)); + opt_left = options; + return 0; } + /*cleanup options*/ void cleanup_option(void) { - struct option *option; - while (!list_empty(&option_list)) { - option = list_entry(option_list.next, struct option, list); - list_del(&option->list); - SM_FREE(option->opt, strlen(option->opt) + 1); - if (option->value) - SM_FREE(option->value, strlen(option->value) + 1); - SM_FREE(option, sizeof(struct option)); - } - SM_FREE(options, strlen(options) + 1); + struct option *option; + while (!list_empty(&option_list)) { + option = list_entry(option_list.next, struct option, list); + list_del(&option->list); + OBD_FREE(option->opt, strlen(option->opt) + 1); + if (option->value) + OBD_FREE(option->value, strlen(option->value) + 1); + OBD_FREE(option, sizeof(struct option)); + } + OBD_FREE(options, strlen(options) + 1); } + int get_opt(struct option **option, char **pos) { - char *name, *value, *left, *tmp; - struct option *tmp_opt; - int length = 0; + char *name, *value, *left, *tmp; + struct option *tmp_opt; + int length = 0; - *pos = opt_left; + *pos = opt_left; - if (! *opt_left) - return -ENODATA; - left = strchr(opt_left, ','); - if (left == opt_left) - return -EINVAL; - if (!left){ - left = opt_left + strlen(opt_left); - } + if (!*opt_left) + return -ENODATA; + left = strchr(opt_left, ','); + if (left == opt_left) + return -EINVAL; + if (!left) + left = opt_left + strlen(opt_left); - SM_ALLOC(tmp_opt, sizeof(struct option)); - tmp_opt->opt = NULL; - tmp_opt->value = NULL; + OBD_ALLOC(tmp_opt, sizeof(struct option)); + tmp_opt->opt = NULL; + tmp_opt->value = NULL; - tmp = opt_left; - while(tmp != left && *tmp != '=') { - length++; - tmp++; - } - SM_ALLOC(name, length + 1); - tmp_opt->opt = name; - memset(name, 0, length + 1); - while (opt_left != tmp) *name++ = *opt_left++; + tmp = opt_left; + while(tmp != left && *tmp != '=') { + length++; + tmp++; + } + OBD_ALLOC(name, length + 1); + tmp_opt->opt = name; + while (opt_left != tmp) *name++ = *opt_left++; - if (*tmp == '=') { - /*this option has value*/ - opt_left ++; /*after '='*/ - if (left == opt_left) { - SM_FREE(tmp_opt->opt, length); - SM_FREE(tmp_opt, sizeof(struct option)); - opt_left = *pos; - return -EINVAL; - } - length = left - opt_left + 1; - SM_ALLOC(value, length); - tmp_opt->value = value; - memset(value, 0, length); - while (opt_left != left) *value++ = *opt_left++; - } - list_add(&tmp_opt->list, &option_list); - if (*opt_left == ',') opt_left ++; /*after ','*/ - *option = tmp_opt; - return 0; + if (*tmp == '=') { + /*this option has value*/ + opt_left ++; /*after '='*/ + if (left == opt_left) { + OBD_FREE(tmp_opt->opt, strlen(tmp_opt->opt) + 1); + OBD_FREE(tmp_opt, sizeof(struct option)); + opt_left = *pos; + return -EINVAL; + } + length = left - opt_left; + OBD_ALLOC(value, length + 1); + if (!value) { + OBD_FREE(tmp_opt->opt, strlen(tmp_opt->opt) + 1); + OBD_FREE(tmp_opt, sizeof(struct option)); + return -ENOMEM; + } + tmp_opt->value = value; + while (opt_left != left) *value++ = *opt_left++; + } + list_add(&tmp_opt->list, &option_list); + if (*opt_left == ',') opt_left ++; /*after ','*/ + *option = tmp_opt; + return 0; }