* Increment reference count
*
* @v refcnt Reference counter, or NULL
+ * @ret refcnt Reference counter
*
* If @c refcnt is NULL, no action is taken.
*/
-void ref_get ( struct refcnt *refcnt ) {
+struct refcnt * ref_get ( struct refcnt *refcnt ) {
- if ( ! refcnt )
- return;
-
- refcnt->refcnt++;
-
- DBGC2 ( refcnt, "REFCNT %p incremented to %d\n",
- refcnt, refcnt->refcnt );
+ if ( refcnt ) {
+ refcnt->refcnt++;
+ DBGC2 ( refcnt, "REFCNT %p incremented to %d\n",
+ refcnt, refcnt->refcnt );
+ }
+ return refcnt;
}
/**
}
#endif
+#ifndef __HAVE_ARCH_STRCSPN
+/**
+ * strcspn - Calculate the length of the initial substring of @s which only
+ * contain letters not in @reject
+ * @s: The string to be searched
+ * @accept: The string to search for
+ */
+size_t strcspn(const char *s, const char *reject)
+{
+ const char *p;
+ const char *r;
+ size_t count = 0;
+
+ for (p = s; *p != '\0'; ++p) {
+ for (r = reject; *r != '\0'; ++r) {
+ if (*p == *r)
+ return count;
+ }
+ ++count;
+ }
+
+ return count;
+}
+#endif
+
#ifndef __HAVE_ARCH_STRPBRK
/**
* strpbrk - Find the first occurrence of a set of characters
#endif
-char * strdup(const char *s) {
- char *new = malloc(strlen(s)+1);
- if (new)
- strcpy(new,s);
+char * strndup(const char *s, size_t n)
+{
+ size_t len = strlen(s);
+ char *new;
+
+ if (len>n)
+ len = n;
+ new = malloc(len+1);
+ if (new) {
+ new[len] = '\0';
+ memcpy(new,s,len);
+ }
return new;
}
+
+char * strdup(const char *s) {
+ return strndup(s, ~((size_t)0));
+}
void ( * free ) ( struct refcnt *refcnt );
};
-extern void ref_get ( struct refcnt *refcnt );
+extern struct refcnt * ref_get ( struct refcnt *refcnt );
extern void ref_put ( struct refcnt *refcnt );
#endif /* _GPXE_REFCNT_H */
size_t strlen(const char * s);
size_t strnlen(const char * s, size_t count);
size_t strspn(const char *s, const char *accept);
+size_t strcspn(const char *s, const char *reject);
char * strpbrk(const char * cs,const char * ct);
char * strtok(char * s,const char * ct);
char * strsep(char **s, const char *ct);
char * strstr(const char * s1,const char * s2);
void * memchr(const void *s, int c, size_t n);
char * strdup(const char *s);
+char * strndup(const char *s, size_t n);
extern const char * strerror ( int errno );