[BACK]Return to getcap.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / gen

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/libc/gen/getcap.c between version 1.1 and 1.13

version 1.1, 1993/05/18 07:37:54 version 1.13, 1997/07/13 19:00:13
Line 1 
Line 1 
   /*      $NetBSD$        */
   
 /*-  /*-
  * Copyright (c) 1992 The Regents of the University of California.   * Copyright (c) 1992, 1993
  * All rights reserved.   *      The Regents of the University of California.  All rights reserved.
  *   *
  * This code is derived from software contributed to Berkeley by   * This code is derived from software contributed to Berkeley by
  * Casey Leedom of Lawrence Livermore National Laboratory.   * Casey Leedom of Lawrence Livermore National Laboratory.
Line 34 
Line 36 
  * SUCH DAMAGE.   * SUCH DAMAGE.
  */   */
   
   #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)  #if defined(LIBC_SCCS) && !defined(lint)
 static char sccsid[] = "@(#)getcap.c    5.15 (Berkeley) 3/19/93";  #if 0
   static char sccsid[] = "@(#)getcap.c    8.3 (Berkeley) 3/25/94";
   #else
   __RCSID("$NetBSD$");
   #endif
 #endif /* LIBC_SCCS and not lint */  #endif /* LIBC_SCCS and not lint */
   
 #include <sys/types.h>  #include <sys/types.h>
Line 90  cgetset(ent)
Line 97  cgetset(ent)
                 return (-1);                  return (-1);
         }          }
         gottoprec = 0;          gottoprec = 0;
         (void)strcpy(toprec, ent);          (void)strcpy(toprec, ent);      /* XXX: strcpy is safe */
         return (0);          return (0);
 }  }
   
Line 192  getent(cap, len, db_array, fd, name, dep
Line 199  getent(cap, len, db_array, fd, name, dep
         int fd, depth;          int fd, depth;
 {  {
         DB *capdbp;          DB *capdbp;
         DBT key, data;          register char *r_end, *rp = NULL, **db_p;       /* pacify gcc */
         register char *r_end, *rp, **db_p;          int myfd = 0, eof, foundit, retval, clen;
         int myfd, eof, foundit, retval;          char *record, *cbuf;
         char *record;  
         int tc_not_resolved;          int tc_not_resolved;
         char pbuf[_POSIX_PATH_MAX];          char pbuf[_POSIX_PATH_MAX];
   
Line 214  getent(cap, len, db_array, fd, name, dep
Line 220  getent(cap, len, db_array, fd, name, dep
                         errno = ENOMEM;                          errno = ENOMEM;
                         return (-2);                          return (-2);
                 }                  }
                 (void)strcpy(record, toprec);                  (void)strcpy(record, toprec);   /* XXX: strcpy is safe */
                 myfd = 0;  
                 db_p = db_array;                  db_p = db_array;
                 rp = record + topreclen + 1;                  rp = record + topreclen + 1;
                 r_end = rp + BFRAG;                  r_end = rp + BFRAG;
Line 243  getent(cap, len, db_array, fd, name, dep
Line 248  getent(cap, len, db_array, fd, name, dep
   
                 if (fd >= 0) {                  if (fd >= 0) {
                         (void)lseek(fd, (off_t)0, L_SET);                          (void)lseek(fd, (off_t)0, L_SET);
                         myfd = 0;  
                 } else {                  } else {
                         (void)snprintf(pbuf, sizeof(pbuf), "%s.db", *db_p);                          (void)snprintf(pbuf, sizeof(pbuf), "%s.db", *db_p);
                         if ((capdbp = dbopen(pbuf, O_RDONLY, 0, DB_HASH, 0))                          if ((capdbp = dbopen(pbuf, O_RDONLY, 0, DB_HASH, 0))
                              != NULL) {                               != NULL) {
                                 free(record);                                  free(record);
                                 retval = cdbget(capdbp, &record, name);                                  retval = cdbget(capdbp, &record, name);
                                 if (capdbp->close(capdbp) < 0)                                  if (retval < 0) {
                                           /* no record available */
                                           (void)capdbp->close(capdbp);
                                           return (retval);
                                   }
                                   /* save the data; close frees it */
                                   clen = strlen(record);
                                   cbuf = malloc(clen + 1);
                                   memcpy(cbuf, record, clen + 1);
                                   if (capdbp->close(capdbp) < 0) {
                                           free(cbuf);
                                         return (-2);                                          return (-2);
                                 *len = strlen(record);                                  }
                                 *cap = malloc(*len + 1);                                  *len = clen;
                                 memmove(*cap, record, *len + 1);                                  *cap = cbuf;
                                 return (retval);                                  return (retval);
                         } else {                          } else {
                                 fd = open(*db_p, O_RDONLY, 0);                                  fd = open(*db_p, O_RDONLY, 0);
                                 if (fd < 0) {                                  if (fd < 0) {
                                         /* No error on unfound file. */                                          /* No error on unfound file. */
                                         if (errno == ENOENT)                                          continue;
                                                 continue;  
                                         free(record);  
                                         return (-2);  
                                 }                                  }
                                 myfd = 1;                                  myfd = 1;
                         }                          }
Line 532  cdbget(capdbp, bp, name)
Line 543  cdbget(capdbp, bp, name)
         char **bp, *name;          char **bp, *name;
 {  {
         DBT key, data;          DBT key, data;
         char *buf;  
         int st;  
   
         key.data = name;          key.data = name;
         key.size = strlen(name);          key.size = strlen(name);
Line 657  cgetnext(bp, db_array)
Line 666  cgetnext(bp, db_array)
                         gottoprec = 1;                          gottoprec = 1;
                         line = toprec;                          line = toprec;
                 } else {                  } else {
                         line = fgetline(pfp, &len);                          line = fgetln(pfp, &len);
                         if (line == NULL && pfp) {                          if (line == NULL && pfp) {
                                 (void)fclose(pfp);                                  (void)fclose(pfp);
                                 if (ferror(pfp)) {                                  if (ferror(pfp)) {
Line 716  cgetnext(bp, db_array)
Line 725  cgetnext(bp, db_array)
                                 *np = '\0';                                  *np = '\0';
                                 break;                                  break;
                         } else { /* name field extends beyond the line */                          } else { /* name field extends beyond the line */
                                 line = fgetline(pfp, &len);                                  line = fgetln(pfp, &len);
                                 if (line == NULL && pfp) {                                  if (line == NULL && pfp) {
                                         (void)fclose(pfp);                                          (void)fclose(pfp);
                                         if (ferror(pfp)) {                                          if (ferror(pfp)) {
Line 728  cgetnext(bp, db_array)
Line 737  cgetnext(bp, db_array)
                         }                          }
                 }                  }
                 rp = buf;                  rp = buf;
                 for(cp = nbuf; *cp != NULL; cp++)                  for(cp = nbuf; *cp != '\0'; cp++)
                         if (*cp == '|' || *cp == ':')                          if (*cp == '|' || *cp == ':')
                                 break;                                  break;
                         else                          else

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.13

CVSweb <webmaster@jp.NetBSD.org>