Print this page
OS-2444 richmond hardware maps need to support ivy bridge
*** 21,32 ****
*/
/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
!
! #pragma ident "%Z%%M% %I% %E% SMI"
#include <strings.h>
#include <ctype.h>
#include <fm/libtopo.h>
#include <fm/topo_mod.h>
--- 21,33 ----
*/
/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
! /*
! * Copyright (c) 2013, Joyent, Inc. All rights reserved.
! */
#include <strings.h>
#include <ctype.h>
#include <fm/libtopo.h>
#include <fm/topo_mod.h>
*** 54,63 ****
--- 55,115 ----
if (s != NULL)
topo_hdl_free(thp, s, strlen(s) + 1);
}
char *
+ topo_hdl_strsplit(topo_hdl_t *hdl, const char *input, const char *sep,
+ char **lastp)
+ {
+ size_t seplen = strlen(sep);
+ const char *scanstart;
+ char *token;
+ char *ret;
+
+ if (input != NULL) {
+ /*
+ * Start scanning at beginning of input:
+ */
+ scanstart = input;
+ } else {
+ /*
+ * If we have already finished scanning, return NULL.
+ */
+ if (*lastp == NULL)
+ return (NULL);
+
+ /*
+ * Otherwise, start scanning where we left off:
+ */
+ scanstart = *lastp;
+ }
+
+ token = strstr(scanstart, sep);
+ if (token != NULL) {
+ /*
+ * We still have a separator, so advance the next-start
+ * pointer past it:
+ */
+ *lastp = token + seplen;
+ /*
+ * Copy out this element:
+ */
+ ret = topo_hdl_alloc(hdl, token - scanstart + 1);
+ (void) strncpy(ret, scanstart, token - scanstart);
+ ret[token - scanstart] = '\0';
+ } else {
+ /*
+ * We have no separator, so this is the last element:
+ */
+ *lastp = NULL;
+ ret = topo_hdl_strdup(hdl, scanstart);
+ }
+
+ return (ret);
+ }
+
+ char *
topo_mod_strdup(topo_mod_t *mod, const char *s)
{
return (topo_hdl_strdup(mod->tm_hdl, s));
}
*** 65,74 ****
--- 117,133 ----
topo_mod_strfree(topo_mod_t *mod, char *s)
{
topo_hdl_strfree(mod->tm_hdl, s);
}
+ char *
+ topo_mod_strsplit(topo_mod_t *mod, const char *input, const char *sep,
+ char **lastp)
+ {
+ return (topo_hdl_strsplit(mod->tm_hdl, input, sep, lastp));
+ }
+
const char *
topo_strbasename(const char *s)
{
const char *p = strrchr(s, '/');