/************************************************************************* * Copyright (C) 2017-2019 Barcelona Supercomputing Center * * Centro Nacional de Supercomputacion * * All rights reserved. * * * * This file is part of NORNS, a service that allows other programs to * * start, track and manage asynchronous transfers of data resources * * between different storage backends. * * * * See AUTHORS file in the top level directory for information regarding * * developers and contributors. * * * * This software was developed as part of the EC H2020 funded project * * NEXTGenIO (Project ID: 671951). * * www.nextgenio.eu * * * * Permission is hereby granted, free of charge, to any person obtaining * * a copy of this software and associated documentation files (the * * "Software"), to deal in the Software without restriction, including * * without limitation the rights to use, copy, modify, merge, publish, * * distribute, sublicense, and/or sell copies of the Software, and to * * permit persons to whom the Software is furnished to do so, subject to * * the following conditions: * * * * The above copyright notice and this permission notice shall be * * included in all copies or substantial portions of the Software. * * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * * ACTION 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 #include #include "xmalloc.h" #include "xstring.h" char* xstrdup(const char* str) { size_t sz; char* res; if(str == NULL) { return NULL; } sz = XMIN(strlen(str) + 1, XMAX_STRING_LENGTH); res = (char*) xmalloc(sz); strncpy(res, str, sz); res[sz-1] = '\0'; return res; } int xstrcnmp(const char* s1, const char* s2) { if(s1 == NULL && s2 == NULL) { return 0; } else if(s1 == NULL) { return -1; } else if(s2 == NULL) { return 1; } else { size_t sz; sz = XMIN(strlen(s1), strlen(s2)); sz = XMIN(sz, XMAX_STRING_LENGTH); return strncmp(s1, s2, sz); } }