spif_bool_t spif_socket_init_from_urls(spif_socket_t self, spif_url_t surl, spif_url_t durl) { ASSERT_RVAL(!SPIF_SOCKET_ISNULL(self), FALSE); /* ***NOT NEEDED*** spif_obj_init(SPIF_OBJ(self)); */ spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(socket)); self->fd = -1; self->fam = AF_INET; self->type = SOCK_STREAM; self->proto = 0; self->addr = (spif_sockaddr_t) NULL; self->len = 0; self->flags = 0; if (!SPIF_URL_ISNULL(surl)) { self->local_url = spif_url_dup(surl); } else { self->local_url = (spif_url_t) NULL; } if (!SPIF_URL_ISNULL(durl)) { self->remote_url = spif_url_dup(durl); } else { self->remote_url = (spif_url_t) NULL; } return TRUE; }
spif_bool_t spif_str_init_from_fd(spif_str_t self, int fd) { int n; spif_charptr_t p; ASSERT_RVAL(!SPIF_STR_ISNULL(self), FALSE); ASSERT_RVAL((fd >= 0), FALSE); /* ***NOT NEEDED*** spif_obj_init(SPIF_OBJ(self)); */ spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS(SPIF_STRCLASS_VAR(str))); self->size = buff_inc; self->len = 0; self->s = (spif_charptr_t) MALLOC(self->size); for (p = self->s; ((n = read(fd, p, buff_inc)) > 0) || (errno == EINTR);) { self->size += n; self->s = (spif_charptr_t) REALLOC(self->s, self->size); p += n; } self->len = self->size - buff_inc; self->size = self->len + 1; self->s = (spif_charptr_t) REALLOC(self->s, self->size); self->s[self->len] = 0; return TRUE; }
static spif_bool_t spif_url_init_from_ipaddr(spif_url_t self, spif_ipsockaddr_t ipaddr) { spif_uint8_t tries; spif_hostinfo_t hinfo; ASSERT_RVAL(!SPIF_URL_ISNULL(self), FALSE); spif_str_init(SPIF_STR(self)); spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(url)); self->proto = (spif_str_t) NULL; self->user = (spif_str_t) NULL; self->passwd = (spif_str_t) NULL; self->path = (spif_str_t) NULL; self->query = (spif_str_t) NULL; /* Try up to 3 times to resolve the hostname. */ h_errno = 0; tries = 0; do { tries++; hinfo = gethostbyaddr((const char *) &(ipaddr->sin_addr), sizeof(ipaddr->sin_addr), AF_INET); } while ((tries <= 3) && (!hinfo) && (h_errno == TRY_AGAIN)); if (!hinfo || !hinfo->h_name) { spif_charptr_t buff; buff = SPIF_CHARPTR(inet_ntoa(ipaddr->sin_addr)); self->host = spif_str_new_from_ptr(buff); } else { self->host = spif_str_new_from_ptr(SPIF_CHARPTR(hinfo->h_name)); } self->port = spif_str_new_from_num(ntohs(ipaddr->sin_port)); return TRUE; }
spif_bool_t spif_str_init_from_fp(spif_str_t self, FILE *fp) { spif_charptr_t p, end = NULL; ASSERT_RVAL(!SPIF_STR_ISNULL(self), FALSE); ASSERT_RVAL((fp != (FILE *) NULL), FALSE); /* ***NOT NEEDED*** spif_obj_init(SPIF_OBJ(self)); */ spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS(SPIF_STRCLASS_VAR(str))); self->size = buff_inc; self->len = 0; self->s = (spif_charptr_t) MALLOC(self->size); for (p = self->s; fgets((char *)p, buff_inc, fp); p += buff_inc) { if (!(end = (spif_charptr_t)strchr((const char *)p, '\n'))) { self->size += buff_inc; self->s = (spif_charptr_t) REALLOC(self->s, self->size); } else { *end = 0; break; } } self->len = (spif_stridx_t) ((end) ? (end - self->s) : ((int) strlen((const char *)self->s))); self->size = self->len + 1; self->s = (spif_charptr_t) REALLOC(self->s, self->size); return TRUE; }
spif_bool_t spif_str_init(spif_str_t self) { ASSERT_RVAL(!SPIF_STR_ISNULL(self), FALSE); /* ***NOT NEEDED*** spif_obj_init(SPIF_OBJ(self)); */ spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS(SPIF_STRCLASS_VAR(str))); self->s = (spif_charptr_t) NULL; self->len = 0; self->size = 0; return TRUE; }
spif_bool_t spif_eterm_action_init(spif_eterm_action_t self) { spif_obj_init(SPIF_OBJ(self)); spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(eterm_action)); self->type = ETERM_ACTION_NONE; self->modifiers = ETERM_MOD_NONE; self->button = ETERM_BUTTON_NONE; self->keysym = ETERM_KEYSYM_NONE; self->handler = (spif_eterm_action_handler_t) NULL; self->parameter = (spif_eterm_action_parameter_t) NULL; return TRUE; }
spif_bool_t spif_str_init_from_ptr(spif_str_t self, spif_charptr_t old) { ASSERT_RVAL(!SPIF_STR_ISNULL(self), FALSE); REQUIRE_RVAL((old != (spif_charptr_t) NULL), spif_str_init(self)); /* ***NOT NEEDED*** spif_obj_init(SPIF_OBJ(self)); */ spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS(SPIF_STRCLASS_VAR(str))); self->len = strlen((const char *) old); self->size = self->len + 1; self->s = (spif_charptr_t) MALLOC(self->size); memcpy(self->s, old, self->size); return TRUE; }
spif_bool_t spif_socket_init(spif_socket_t self) { ASSERT_RVAL(!SPIF_SOCKET_ISNULL(self), FALSE); /* ***NOT NEEDED*** spif_obj_init(SPIF_OBJ(self)); */ spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(socket)); self->fd = -1; self->fam = AF_INET; self->type = SOCK_STREAM; self->proto = 0; self->addr = (spif_sockaddr_t) NULL; self->len = 0; self->flags = 0; self->local_url = (spif_url_t) NULL; self->remote_url = (spif_url_t) NULL; return TRUE; }
spif_bool_t spif_tok_init_from_fd(spif_tok_t self, int fd) { ASSERT_RVAL(!SPIF_TOK_ISNULL(self), FALSE); if (!spif_obj_init(SPIF_OBJ(self))) { return FALSE; } else if (!spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(tok))) { return FALSE; } self->src = spif_str_new_from_fd(fd); self->quote = '\''; self->dquote = '\"'; self->escape = '\\'; self->tokens = (spif_list_t) NULL; self->sep = (spif_str_t) NULL; return ((SPIF_STR_ISNULL(self->src)) ? (FALSE) : (TRUE)); }
spif_bool_t spif_tok_init(spif_tok_t self) { ASSERT_RVAL(!SPIF_TOK_ISNULL(self), FALSE); if (!spif_obj_init(SPIF_OBJ(self))) { return FALSE; } else if (!spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(tok))) { return FALSE; } self->src = (spif_str_t) NULL; self->quote = '\''; self->dquote = '\"'; self->escape = '\\'; self->tokens = (spif_list_t) NULL; self->sep = (spif_str_t) NULL; return TRUE; }
spif_bool_t spif_url_init(spif_url_t self) { ASSERT_RVAL(!SPIF_URL_ISNULL(self), FALSE); if (!spif_str_init(SPIF_STR(self))) { return FALSE; } spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(url)); self->proto = (spif_str_t) NULL; self->user = (spif_str_t) NULL; self->passwd = (spif_str_t) NULL; self->host = (spif_str_t) NULL; self->port = (spif_str_t) NULL; self->path = (spif_str_t) NULL; self->query = (spif_str_t) NULL; return TRUE; }
spif_bool_t spif_str_init_from_num(spif_str_t self, long num) { spif_char_t buff[28]; ASSERT_RVAL(!SPIF_STR_ISNULL(self), FALSE); /* ***NOT NEEDED*** spif_obj_init(SPIF_OBJ(self)); */ spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS(SPIF_STRCLASS_VAR(str))); snprintf((char *) buff, sizeof(buff), "%ld", num); self->len = strlen((char *) buff); self->size = self->len + 1; self->s = (spif_charptr_t) MALLOC(self->size); strcpy((char *) self->s, (char *) buff); return TRUE; }
spif_bool_t spif_url_init_from_ptr(spif_url_t self, spif_charptr_t other) { ASSERT_RVAL(!SPIF_URL_ISNULL(self), FALSE); if (!spif_str_init_from_ptr(SPIF_STR(self), other)) { return FALSE; } spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(url)); self->proto = (spif_str_t) NULL; self->user = (spif_str_t) NULL; self->passwd = (spif_str_t) NULL; self->host = (spif_str_t) NULL; self->port = (spif_str_t) NULL; self->path = (spif_str_t) NULL; self->query = (spif_str_t) NULL; spif_url_parse(self); return TRUE; }
static spif_bool_t spif_url_init_from_unixaddr(spif_url_t self, spif_unixsockaddr_t unixaddr) { ASSERT_RVAL(!SPIF_URL_ISNULL(self), FALSE); spif_str_init(SPIF_STR(self)); spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(url)); self->proto = (spif_str_t) NULL; self->user = (spif_str_t) NULL; self->passwd = (spif_str_t) NULL; self->host = (spif_str_t) NULL; self->port = (spif_str_t) NULL; self->query = (spif_str_t) NULL; if (unixaddr->sun_path) { self->path = spif_str_new_from_ptr(SPIF_CHARPTR(unixaddr->sun_path)); } else { self->path = (spif_str_t) NULL; } return TRUE; }
spif_bool_t spif_str_init_from_buff(spif_str_t self, spif_charptr_t buff, spif_stridx_t size) { ASSERT_RVAL(!SPIF_STR_ISNULL(self), FALSE); /* ***NOT NEEDED*** spif_obj_init(SPIF_OBJ(self)); */ spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS(SPIF_STRCLASS_VAR(str))); self->size = size; if (buff != (spif_charptr_t) NULL) { self->len = strnlen((const char *) buff, size); } else { self->len = 0; } if (self->size == self->len) { self->size++; } self->s = (spif_charptr_t) MALLOC(self->size); if (buff != (spif_charptr_t) NULL) { memcpy(self->s, buff, self->len); } self->s[self->len] = 0; return TRUE; }
spif_bool_t spif_eterm_action_init_from_data(spif_eterm_action_t self, spif_eterm_action_type_t type, spif_ushort_t modifiers, spif_uchar_t button, KeySym keysym, spif_ptr_t param) { spif_obj_init(SPIF_OBJ(self)); spif_obj_set_class(SPIF_OBJ(self), SPIF_CLASS_VAR(eterm_action)); self->type = type; self->modifiers = modifiers; self->button = button; self->keysym = keysym; switch (type) { case ETERM_ACTION_STRING: self->handler = (spif_eterm_action_handler_t) action_handle_string; self->parameter = (spif_obj_t) spif_str_new_from_ptr(param); /*parse_escaped_string(self->parameter.string); */ break; case ETERM_ACTION_ECHO: self->handler = (spif_eterm_action_handler_t) action_handle_echo; self->parameter = (spif_obj_t) spif_str_new_from_ptr(param); /*parse_escaped_string(self->parameter.string); */ break; case ETERM_ACTION_SCRIPT: self->handler = (spif_eterm_action_handler_t) action_handle_script; self->parameter = (spif_obj_t) spif_str_new_from_ptr(param); break; case ETERM_ACTION_MENU: self->handler = (spif_eterm_action_handler_t) action_handle_menu; /*self->parameter.menu = (menu_t *) param; */ break; default: break; } D_ACTIONS(("Added action. modifiers == 0x%08x, button == %d, keysym == 0x%08x\n", self->modifiers, self->button, (unsigned) self->keysym)); return TRUE; }