Changeset 1328:9c33a74ef1dc in roaraudio
- Timestamp:
- 03/23/09 02:29:01 (15 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroar/vio_dstr.h
r1325 r1328 60 60 #define ROAR_VIO_DSTR_OBJT_FILE (0x01|ROAR_VIO_DSTR_OBJGT_GEN) 61 61 #define ROAR_VIO_DSTR_OBJT_FH (0x02|ROAR_VIO_DSTR_OBJGT_GEN) 62 #define ROAR_VIO_DSTR_OBJT_FD ROAR_VIO_DSTR_OBJT_FH 62 63 #define ROAR_VIO_DSTR_OBJT_SOCKETFH (0x03|ROAR_VIO_DSTR_OBJGT_GEN) 63 64 /* some space to add memory FHs and the like */ -
libroar/vio_dstr.c
r1325 r1328 47 47 {ROAR_VIO_DSTR_OBJT_FH, "fh", 48 48 {ROAR_VIO_DEF_TYPE_EOL}}, 49 {ROAR_VIO_DSTR_OBJT_FD, "fd", 50 {ROAR_VIO_DEF_TYPE_EOL}}, 49 51 {ROAR_VIO_DSTR_OBJT_SOCKETFH, "socketfh", 50 52 {ROAR_VIO_DEF_TYPE_EOL}}, … … 182 184 int inopts; 183 185 int type; 184 int cc = 0; // current chain element186 int cc = 1; // current chain element 185 187 186 188 if ( calls == NULL || dstr == NULL ) … … 194 196 195 197 memset(chain, 0, sizeof(chain)); 198 199 chain[0].type = ROAR_VIO_DSTR_OBJT_INTERNAL; 196 200 197 201 next = dstr; … … 259 263 chain[cc].type = ROAR_VIO_DSTR_OBJT_EOL; 260 264 265 ROAR_WARN("roar_vio_open_dstr_vio(*): chain=%p", chain); 266 261 267 if ( roar_vio_dstr_parse_opts(chain) == -1 ) { 262 268 _ret(-1); … … 284 290 return 0; 285 291 } 286 287 #define _toggle(x) ((x) = ((x) ? 0 : 1))288 292 289 293 int roar_vio_dstr_set_defaults(struct roar_vio_dstr_chain * chain, int len, struct roar_vio_defaults * def, int dnum) { 290 294 struct roar_vio_dstr_chain * c, * next; 291 295 int i; 296 int tmp[8]; 292 297 293 298 if ( chain == NULL ) … … 309 314 next = &chain[i-1]; 310 315 316 memset(tmp, 0, sizeof(tmp)); 317 311 318 ROAR_WARN("roar_vio_dstr_set_defaults(*): i=%i, c->type=0x%.4x(%s)", i, c->type & 0xFFFF, roar_vio_dstr_get_name(c->type)); 312 319 ROAR_WARN("roar_vio_dstr_set_defaults(*): i=%i, c->type=0x%.4x(%s): c->def=%p, c->def->type=%i", i, c->type & 0xFFFF, … … 316 323 317 324 switch (c->type) { 325 case ROAR_VIO_DSTR_OBJT_INTERNAL: 326 c->need_vio = 0; 327 break; 328 case ROAR_VIO_DSTR_OBJT_EOL: 329 tmp[0] = 1; 318 330 case ROAR_VIO_DSTR_OBJT_PASS: 319 331 case ROAR_VIO_DSTR_OBJT_RE: … … 328 340 case ROAR_VIO_DSTR_OBJT_TLS: 329 341 case ROAR_VIO_DSTR_OBJT_MAGIC: 330 _toggle(c->need_vio);331 case ROAR_VIO_DSTR_OBJT_EOL:332 _toggle(c->need_vio); 342 if ( tmp[0] ) 343 c->need_vio = 0; 344 333 345 next->def = c->def; 334 346 break; … … 351 363 } 352 364 break; 365 case ROAR_VIO_DSTR_OBJT_FH: 366 tmp[0] = 1; 367 case ROAR_VIO_DSTR_OBJT_SOCKETFH: 368 c->need_vio = 0; 369 next->def = &(next->store_def); 370 371 if ( c->def != NULL ) { 372 tmp[2] = c->def->o_flags; 373 tmp[3] = c->def->o_mode; 374 } else { 375 tmp[2] = O_RDONLY; 376 tmp[3] = 0644; 377 } 378 379 if ( !strcasecmp(c->dst, "stdin") ) { 380 tmp[1] = ROAR_STDIN; 381 tmp[2] = O_RDONLY; 382 } else if ( !strcasecmp(c->dst, "stdout") ) { 383 tmp[1] = ROAR_STDOUT; 384 tmp[2] = O_WRONLY; 385 } else if ( !strcasecmp(c->dst, "stderr") ) { 386 tmp[1] = ROAR_STDERR; 387 tmp[2] = O_WRONLY; 388 } else { 389 if ( sscanf(c->dst, "%i", &tmp[1]) != 1 ) 390 return -1; 391 } 392 393 roar_vio_dstr_init_defaults(next->def, tmp[0] ? ROAR_VIO_DEF_TYPE_FH : ROAR_VIO_DEF_TYPE_SOCKETFH, tmp[2], tmp[3]); 394 next->def->d.fh = tmp[1]; 395 break; 353 396 default: 354 397 return -1; … … 360 403 } 361 404 405 ROAR_WARN("roar_vio_dstr_set_defaults(*) = 0"); 406 362 407 return 0; 363 408 } 364 409 365 int roar_vio_dstr_build_chain(struct roar_vio_dstr_chain * chain, struct roar_vio_calls * calls, struct roar_vio_calls * vio) { 410 #define _ret(x) roar_vio_close(calls); ROAR_WARN("roar_vio_dstr_build_chain(*) = %i", (x)); return (x) 411 412 int roar_vio_dstr_build_chain(struct roar_vio_dstr_chain * chain, struct roar_vio_calls * calls, 413 struct roar_vio_calls * vio) { 414 struct roar_vio_dstr_chain * c; 415 struct roar_vio_defaults * def; 416 struct roar_vio_calls * tc, * prev; 417 int i; 418 419 ROAR_WARN("roar_vio_dstr_build_chain(*) = ?"); 420 366 421 if ( chain == NULL || calls == NULL ) 367 422 return -1; 368 423 369 return -1; 370 } 424 if ( roar_vio_open_stack(calls) == -1 ) 425 return -1; 426 427 ROAR_WARN("roar_vio_dstr_build_chain(*): chain=%p", chain); 428 429 if ( (def = chain->def) != NULL ) { 430 if ( (tc = malloc(sizeof(struct roar_vio_calls))) == NULL ) { 431 _ret(-1); 432 } 433 434 if ( roar_vio_stack_add(calls, tc) == -1 ) { 435 _ret(-1); 436 } 437 438 switch (def->type) { 439 case ROAR_VIO_DEF_TYPE_FILE: 440 if ( roar_vio_open_file(tc, def->d.file, def->o_flags, def->o_mode) == -1 ) { 441 _ret(-1); 442 } 443 break; 444 case ROAR_VIO_DEF_TYPE_SOCKET: 445 _ret(-1); 446 break; 447 case ROAR_VIO_DEF_TYPE_FH: 448 if ( roar_vio_open_fh(tc, def->d.fh) == -1 ) { 449 _ret(-1); 450 } 451 break; 452 case ROAR_VIO_DEF_TYPE_SOCKETFH: 453 if ( roar_vio_open_fh_socket(tc, def->d.fh) == -1 ) { 454 _ret(-1); 455 } 456 break; 457 default: 458 _ret(-1); 459 } 460 prev = tc; 461 } else { 462 prev = vio; 463 } 464 465 for (i = 0; (c = &chain[i])->type != ROAR_VIO_DSTR_OBJT_EOL; i++) { 466 if ( c->need_vio ) { 467 if ( (tc = malloc(sizeof(struct roar_vio_calls))) == NULL ) { 468 _ret(-1); 469 } 470 471 if ( roar_vio_stack_add(calls, tc) == -1 ) { 472 _ret(-1); 473 } 474 475 switch (c->type) { 476 case ROAR_VIO_DSTR_OBJT_PASS: 477 if ( roar_vio_open_pass(tc, prev) == -1 ) { 478 _ret(-1); 479 } 480 break; 481 case ROAR_VIO_DSTR_OBJT_RE: 482 if ( roar_vio_open_re(tc, prev) == -1 ) { 483 _ret(-1); 484 } 485 break; 486 case ROAR_VIO_DSTR_OBJT_GZIP: 487 if ( roar_vio_open_gzip(tc, prev, -1) == -1 ) { 488 _ret(-1); 489 } 490 break; 491 case ROAR_VIO_DSTR_OBJT_BZIP2: 492 case ROAR_VIO_DSTR_OBJT_PGP: 493 if ( roar_vio_open_pgp_decrypt(tc, prev, NULL) == -1 ) { 494 _ret(-1); 495 } 496 break; 497 case ROAR_VIO_DSTR_OBJT_PGP_ENC: 498 case ROAR_VIO_DSTR_OBJT_PGP_STORE: 499 if ( roar_vio_open_pgp_store(tc, prev, ROAR_VIO_PGP_OPTS_NONE) == -1 ) { 500 _ret(-1); 501 } 502 break; 503 case ROAR_VIO_DSTR_OBJT_SSL1: 504 case ROAR_VIO_DSTR_OBJT_SSL2: 505 case ROAR_VIO_DSTR_OBJT_SSL3: 506 case ROAR_VIO_DSTR_OBJT_TLS: 507 case ROAR_VIO_DSTR_OBJT_MAGIC: 508 _ret(-1); 509 break; 510 default: 511 _ret(-1); 512 } 513 514 prev = tc; 515 } // else we can skip to the next :) 516 } 517 518 ROAR_WARN("roar_vio_dstr_build_chain(*) = 0"); 519 return 0; 520 } 521 522 #undef _ret 371 523 372 524 //ll
Note: See TracChangeset
for help on using the changeset viewer.