Back to index

glibc  2.9
files-service.c
Go to the documentation of this file.
00001 /* Services file parser in nss_files module.
00002    Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
00003    This file is part of the GNU C Library.
00004 
00005    The GNU C Library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009 
00010    The GNU C Library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014 
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with the GNU C Library; if not, write to the Free
00017    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018    02111-1307 USA.  */
00019 
00020 #include <netinet/in.h>
00021 #include <netdb.h>
00022 
00023 
00024 #define ENTNAME             servent
00025 #define DATABASE     "services"
00026 
00027 struct servent_data {};
00028 
00029 #define TRAILING_LIST_MEMBER              s_aliases
00030 #define TRAILING_LIST_SEPARATOR_P  isspace
00031 #include "files-parse.c"
00032 #define ISSLASH(c) ((c) == '/')
00033 LINE_PARSER
00034 ("#",
00035  STRING_FIELD (result->s_name, isspace, 1);
00036  INT_FIELD (result->s_port, ISSLASH, 10, 0, htons);
00037  STRING_FIELD (result->s_proto, isspace, 1);
00038  )
00039 
00040 #include GENERIC
00041 
00042 DB_LOOKUP (servbyname, 2 + strlen (name) + (proto ? strlen (proto) : 0),
00043           (".%s/%s", name, proto ?: ""),
00044           {
00045             /* Must match both protocol (if specified) and name.  */
00046             if (proto != NULL && strcmp (result->s_proto, proto))
00047               continue;
00048             LOOKUP_NAME (s_name, s_aliases)
00049           },
00050           const char *name, const char *proto)
00051 
00052 DB_LOOKUP (servbyport, 21 + (proto ? strlen (proto) : 0),
00053           ("=%d/%s", ntohs (port), proto ?: ""),
00054           {
00055             /* Must match both port and protocol.  */
00056             if (result->s_port == port
00057                && (proto == NULL
00058                    || strcmp (result->s_proto, proto) == 0))
00059               break;
00060           }, int port, const char *proto)