summaryrefslogtreecommitdiffstats
path: root/src/services.c
diff options
context:
space:
mode:
authornalin <nalin>2002-11-18 22:05:08 +0000
committernalin <nalin>2002-11-18 22:05:08 +0000
commitdbf919855d755917146a86ab4e3201041ade0332 (patch)
tree07af350ac300b38df79a96f11ff80f729644613d /src/services.c
parent4e355429e4b3f16de43ef0ac94eafe0a820b0406 (diff)
downloadnss_directories-dbf919855d755917146a86ab4e3201041ade0332.tar.gz
nss_directories-dbf919855d755917146a86ab4e3201041ade0332.tar.xz
nss_directories-dbf919855d755917146a86ab4e3201041ade0332.zip
* src/files-parse.c, src/glibc-parse.c: add glibc-based parsing internally
* src/passwd.c,src/services.c,src/group.c,src/protocols.c,src/shadow.c: use the new parsing code * src/generic.c (setent): return SUCCESS on successful open, not UNAVAIL * src/Makefile.am: export only _nss_directories_[sge]*, to export the setent, getent/getby, and endent functions, but not the parsers.
Diffstat (limited to 'src/services.c')
-rw-r--r--src/services.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/services.c b/src/services.c
index 1ca091f..51ceb34 100644
--- a/src/services.c
+++ b/src/services.c
@@ -16,14 +16,37 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#ident "$Id: services.c,v 1.1 2002/11/18 19:53:21 nalin Exp $"
+#ident "$Id: services.c,v 1.2 2002/11/18 22:08:14 nalin Exp $"
#include <sys/types.h>
#include <netdb.h>
+/* Shared settings. */
#define STRUCTURE servent
-#define FILENAME "services"
+#define DATABASE "services"
+/* Parser. */
+#define ENTNAME servent
+struct servent_data {};
+
+#define libc_hidden_def(ignored)
+#define _nss_files_parse_ _nss_directories_parse_
+
+#define TRAILING_LIST_MEMBER s_aliases
+#define TRAILING_LIST_SEPARATOR_P isspace
+
+#include "files-parse.c"
+
+#define ISSLASH(__c) ((__c) == '/')
+
+LINE_PARSER
+("#",
+ STRING_FIELD (result->s_name, isspace, 1);
+ INT_FIELD (result->s_port, ISSLASH, 10, 0, htons);
+ STRING_FIELD (result->s_proto, isspace, 1);
+)
+
+/* Lookups. */
#define getnam _nss_directories_getservbyname_r
#define getnam_field s_name
#define getnam_fields s_aliases
@@ -36,8 +59,6 @@
#define getent _nss_directories_getservent_r
#define endent _nss_directories_endservent
-#define parser _nss_files_parse_servent
-
#define GET_EXTRA_CRITERIA const char *protocol
#define EXTRA_CRITERIA_NAMES protocol
#define CHECK_EXTRA_CRITERIA(__s) (((__s)->s_proto != NULL) && strcmp((__s)->s_proto, protocol) == 0)