/*
* A basic toolset containing miscellaneous functions for string manipluation,
* encoding/decoding, and a bunch of other stuff.
+ *
+ * Copyright (c) 1987-2011 by the citadel.org team
+ *
+ * This program is open source 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 3 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
* Reduce a string down to a boundarized substring (for example, remove
* parentheses and anything outside them).
*/
-void stripallbut(char *str, char leftboundary, char rightboundary) {
- int a;
-
- for (a = 0; a < strlen(str); ++ a) {
- if (str[a] == leftboundary) strcpy(str, &str[a+1]);
- }
-
- for (a = 0; a < strlen(str); ++ a) {
- if (str[a] == rightboundary) str[a] = 0;
+long stripallbut(char *str, char leftboundary, char rightboundary) {
+ long len = 0;
+
+ char *lb = NULL;
+ char *rb = NULL;
+
+ lb = strrchr(str, leftboundary);
+ if (lb != NULL) {
+ ++lb;
+ rb = strchr(str, rightboundary);
+ if ((rb != NULL) && (rb >= lb)) {
+ *rb = 0;
+ fflush(stderr);
+ len = (long)rb - (long)lb;
+ memmove(str, lb, len);
+ str[len] = 0;
+ return(len);
+ }
}
+ return (long)strlen(str);
}
+
char *myfgets(char *s, int size, FILE *stream) {
char *ret = fgets(s, size, stream);
char *nl;
* Generate a new, globally unique UID parameter for a calendar etc. object
*/
void generate_uuid(char *buf) {
- static int seq = 0;
+ static int seq = (-1);
+
+ if (seq == (-1)) {
+ seq = (int)rand();
+ }
+ ++seq;
+ seq = (seq % 0x0FFF) ;
- sprintf(buf, "%lx-%lx-%x",
- time(NULL),
+ sprintf(buf, "%08lx-%04lx-4%03x-a%03x-%012lx",
+ (long)time(NULL),
(long)getpid(),
- (seq++)
+ seq,
+ seq,
+ (long)rand()
);
}