XRootD
Loading...
Searching...
No Matches
XrdOucTokenizer.cc
Go to the documentation of this file.
1/******************************************************************************/
2/* */
3/* X r d O u c T o k e n i z e r . c c */
4/* */
5/* (c) 2004 by the Board of Trustees of the Leland Stanford, Jr., University */
6/* Produced by Andrew Hanushevsky for Stanford University under contract */
7/* DE-AC02-76-SFO0515 with the Deprtment of Energy */
8/* */
9/* This file is part of the XRootD software suite. */
10/* */
11/* XRootD is free software: you can redistribute it and/or modify it under */
12/* the terms of the GNU Lesser General Public License as published by the */
13/* Free Software Foundation, either version 3 of the License, or (at your */
14/* option) any later version. */
15/* */
16/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
17/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
18/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
19/* License for more details. */
20/* */
21/* You should have received a copy of the GNU Lesser General Public License */
22/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
23/* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
24/* */
25/* The copyright holder's institutional names and contributor's names may not */
26/* be used to endorse or promote products derived from this software without */
27/* specific prior written permission of the institution or contributor. */
28/******************************************************************************/
29
30#ifndef WIN32
31#include <unistd.h>
32#endif
33#include <ctype.h>
34#include <stdlib.h>
35#include <string.h>
36
38
39/******************************************************************************/
40/* A t t a c h */
41/******************************************************************************/
42
44{
45 buff = bp;
46 token = 0;
47 tnext = (char *)"";
48 notabs = 0;
49}
50
51/******************************************************************************/
52/* G e t L i n e */
53/******************************************************************************/
54
56{
57 char *bp;
58
59// Check if end of buffer has been reached.
60//
61 if (!buff || *buff == '\0') return (char *)NULL;
62
63// Find the next record in the buffer
64//
65 bp = buff;
66 if (notabs)
67 while(*bp && (*bp == ' ' || *bp == '\t')) bp++;
68 else while(*bp && *bp == ' ' ) bp++;
69
70 tnext = bp;
71
72// Find the end of the record
73//
74 if (notabs)
75 while(*bp && *bp != '\n') {if (*bp == '\t') *bp = ' '; bp++;}
76 else while(*bp && *bp != '\n') bp++;
77
78// Set the end of the line
79//
80 if (*bp) {*bp = '\0'; buff = bp+1;}
81 else buff = bp;
82
83// All done
84//
85 token = 0;
86 return tnext;
87}
88
89/******************************************************************************/
90/* G e t T o k e n */
91/******************************************************************************/
92
93char *XrdOucTokenizer::GetToken(char **rest, int lowcase)
94{
95
96 // Skip to the first non-blank character.
97 //
98 while (*tnext && *tnext == ' ') tnext++;
99 if (!*tnext) return (char *)NULL;
100 token = tnext;
101
102 // Find the end of the token.
103 //
104 if (lowcase) while (*tnext && *tnext != ' ')
105 {*tnext = (char)tolower((int)*tnext); tnext++;}
106 else while (*tnext && *tnext != ' ') {tnext++;}
107 if (*tnext) {*tnext = '\0'; tnext++;}
108
109 // Check if remaining line is to be returned
110 //
111 if (rest)
112 {while (*tnext && *tnext == ' ') tnext++;
113 *rest = tnext;
114 }
115
116 // All done here.
117 //
118 return token;
119}
120
121/******************************************************************************/
122/* R e t T o k e n */
123/******************************************************************************/
124
126{
127 // Backup one token, we can only back up once
128 //
129 if (token)
130 {if (*tnext) token[strlen(token)] = ' ';
131 tnext = token;
132 token = 0;
133 }
134}
char * GetToken(char **rest=0, int lowcase=0)
void Attach(char *bp)