/* * Copyright (c) 2020 Red Hat, Inc. * * 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 (at your option) any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. * * $Id: //eng/uds-releases/jasper/kernelLinux/uds/indexLayoutLinuxKernel.c#5 $ */ #include "indexLayout.h" #include "indexLayoutParser.h" #include "memoryAlloc.h" /*****************************************************************************/ int makeIndexLayout(const char *name, bool newLayout, const UdsConfiguration config, IndexLayout **layoutPtr) { char *dev = NULL; uint64_t offset = 0; uint64_t size = 0; LayoutParameter parameterTable[] = { { "dev", LP_STRING | LP_DEFAULT, { .str = &dev } }, { "offset", LP_UINT64, { .num = &offset } }, { "size", LP_UINT64, { .num = &size } }, }; size_t numParameters = sizeof(parameterTable) / sizeof(*parameterTable); char *params = NULL; int result = duplicateString(name, "makeIndexLayout parameters", ¶ms); if (result != UDS_SUCCESS) { return result; } // note dev will be set to memory owned by params result = parseLayoutString(params, parameterTable, numParameters); if (result != UDS_SUCCESS) { FREE(params); return result; } IOFactory *factory = NULL; result = makeIOFactory(dev, &factory); FREE(params); if (result != UDS_SUCCESS) { return result; } IndexLayout *layout; result = makeIndexLayoutFromFactory(factory, offset, size, newLayout, config, &layout); putIOFactory(factory); if (result != UDS_SUCCESS) { return result; } *layoutPtr = layout; return UDS_SUCCESS; }