Exemplo n.º 1
0
int
cdb_init(struct cdb *C, int fd)
{
  struct stat  sb;
  uchar_t     *map;
  uchar_t      buf[INITBUF_SIZE];

  buf_zero(C, sizeof (struct cdb));

  /* try to mmap() fd: */
  if((fstat(fd, &sb) == 0) && (sb.st_size <= (off_t)0xffffffff)){
         map = mmap(0, sb.st_size, PROT_READ, MAP_SHARED, fd, 0);
         if(map != MAP_FAILED){
             C->map = map;
             C->map_size = sb.st_size;
         }
  }
  C->fd = fd;

  /* suck in file header: */
  if(cdb_read(C, buf, sizeof buf, 0) == -1){
      return -1;
  }

  /* C->hbase: offset to base of hash table (also eod): */
  C->hbase = upak32_unpack(buf);

  return 0;
}
Exemplo n.º 2
0
static int nfcconf_lex_engine(nfcconf_parser * parser, BUFHAN * bp) {
    int this_char;

    while (1) {
        switch (this_char = buf_nextch(bp)) {
        case '#':
            /* comment till end of line */
            buf_eat_till(bp, '#', "\r\n");
            nfcconf_parse_token(parser, TOKEN_TYPE_COMMENT, bp->buf);
            buf_zero(bp);
            continue;
        case '\n':
            nfcconf_parse_token(parser, TOKEN_TYPE_NEWLINE, NULL);
            continue;
        case ' ':
        case '\t':
        case '\r':
            /* eat up whitespace */
            continue;
        case ',':
        case '{':
        case '}':
        case '=':
        case ';':
            buf_addch(bp, (char) this_char);
            nfcconf_parse_token(parser, TOKEN_TYPE_PUNCT, bp->buf);
            buf_zero(bp);
            continue;
        case '"':
            buf_eat_till(bp, (char) this_char, "\"\r\n");
            buf_addch(bp, (char) buf_nextch(bp));
            nfcconf_parse_token(parser, TOKEN_TYPE_STRING, bp->buf);
            buf_zero(bp);
            continue;
        case EOF:
            break;
        default:
            buf_eat_till(bp, (char) this_char, ";, \t\r\n");
            nfcconf_parse_token(parser, TOKEN_TYPE_STRING, bp->buf);
            buf_zero(bp);
            continue;
        }
        break;
    }
    buf_finished(bp);
    return 1;
}
Exemplo n.º 3
0
int
cdb_clear(struct cdb *C)
{
  int   e = 0;

  if(C->map != 0){
      e = munmap(C->map, C->map_size);
  }

  buf_zero(C, sizeof (struct cdb));

  return e;
}
Exemplo n.º 4
0
int
domsock_create(const char *path, mode_t mode)
{
  struct sockaddr_un  sockaddr;
  mode_t              umask_orig;
  int                 s;
  int                 e, terrno;

  if(sizeof(sockaddr.sun_path) < (cstr_len(path) + 1)){
      errno = ENAMETOOLONG;
      return -1;
  }

  if((s = socket(AF_LOCAL, SOCK_STREAM, 0)) == -1){
      return -1;
  }

  unlink(path);
  buf_zero(&sockaddr, sizeof (sockaddr));
  sockaddr.sun_family = AF_LOCAL;
  cstr_copy(sockaddr.sun_path, path);
  if(bind(s, (const struct sockaddr *)&sockaddr, sizeof(sockaddr)) == -1){
      goto FAIL;
  } 

  if(mode != 0){
      umask_orig = umask(0);
      e = chmod(path, mode);
      umask(umask_orig);
      if(e == -1){
          goto FAIL;
      }
  }

  /* success: */
  return s;

FAIL:
  terrno = errno;
  unlink(path);
  close(s);
  errno = terrno;
  return -1;
}
Exemplo n.º 5
0
/* perpd_svdef_clear()
**   prepare a clean perpd_svdef object
*/
void
perpd_svdef_clear(struct svdef *svdef)
{
  buf_zero(svdef, sizeof (struct svdef));
  return;
}