defaults.c
上传用户:xiejiait
上传日期:2007-01-06
资源大小:881k
文件大小:3k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)defaults.c 1.2 00/01/13 Copyright 1998 J. Schilling */
  2. #ifndef lint
  3. static char sccsid[] =
  4. "@(#)defaults.c 1.2 00/01/13 Copyright 1998 J. Schilling";
  5. #endif
  6. /*
  7.  * Copyright (c) 1998 J. Schilling
  8.  */
  9. /*
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2, or (at your option)
  13.  * any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; see the file COPYING.  If not, write to
  22.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  23.  */
  24. #include <mconfig.h>
  25. #include <stdxlib.h>
  26. #include <strdefs.h>
  27. #include <stdio.h>
  28. #include <standard.h>
  29. #include <deflts.h>
  30. #include <utypes.h>
  31. #include "cdrecord.h"
  32. EXPORT void cdr_defaults __PR((char **devp, int *speedp, long *fsp));
  33. LOCAL void cdr_xdefaults __PR((char **devp, int *speedp, long *fsp));
  34. LOCAL char * strsv __PR((char* s));
  35. EXPORT void
  36. cdr_defaults(devp, speedp, fsp)
  37. char **devp;
  38. int *speedp;
  39. long *fsp;
  40. {
  41. char *dev = *devp;
  42. int speed = *speedp;
  43. long fs = *fsp;
  44. if (!dev) {
  45. *devp = getenv("CDR_DEVICE");
  46. if (!*devp && defltopen("/etc/default/cdrecord") == 0) {
  47. dev = defltread("CDR_DEVICE=");
  48. if (dev != NULL)
  49. *devp = strsv(dev);
  50. }
  51. }
  52. if (*devp)
  53. cdr_xdefaults(devp, &speed, &fs);
  54. if (speed < 0) {
  55. char *p = getenv("CDR_SPEED");
  56. if (!p) {
  57. if (defltopen("/etc/default/cdrecord") == 0) {
  58. p = defltread("CDR_SPEED=");
  59. }
  60. }
  61. if (p) {
  62. speed = atoi(p);
  63. if (speed < 0)
  64. comerrno(EX_BAD, "Bad speed environment.n");
  65. }
  66. }
  67. if (speed >= 0)
  68. *speedp = speed;
  69. if (fs < 0L) {
  70. char *p = getenv("CDR_FIFOSIZE");
  71. if (!p) {
  72. if (defltopen("/etc/default/cdrecord") == 0) {
  73. p = defltread("CDR_FIFOSIZE=");
  74. }
  75. }
  76. if (p) {
  77. if (getnum(p, &fs) != 1)
  78. comerrno(EX_BAD, "Bad fifo size environment.n");
  79. }
  80. }
  81. if (fs > 0L)
  82. *fsp = fs;
  83. defltclose();
  84. }
  85. LOCAL void
  86. cdr_xdefaults(devp, speedp, fsp)
  87. char **devp;
  88. int *speedp;
  89. long *fsp;
  90. {
  91. char dname[64];
  92. char *p = *devp;
  93. char *x = ",:/@";
  94. while (*x) {
  95. if (strchr(p, *x))
  96. return;
  97. x++;
  98. }
  99. sprintf(dname, "%s=", p);
  100. if (defltopen("/etc/default/cdrecord") != 0)
  101. return;
  102. p = defltread(dname);
  103. if (p != NULL) {
  104. while (*p == 't')
  105. p++;
  106. if ((x = strchr(p, 't')) != NULL)
  107. *x = '';
  108. *devp = strsv(p);
  109. if (x) {
  110. p = ++x;
  111. while (*p == 't')
  112. p++;
  113. if ((x = strchr(p, 't')) != NULL)
  114. *x = '';
  115. if (*speedp < 0)
  116. *speedp = atoi(p);
  117. }
  118. if (x) {
  119. p = ++x;
  120. while (*p == 't')
  121. p++;
  122. if ((x = strchr(p, 't')) != NULL)
  123. *x = '';
  124. if (*fsp < 0L) {
  125. if (getnum(p, fsp) != 1)
  126. comerrno(EX_BAD,
  127. "Bad fifo size in defaults.n");
  128. }
  129. }
  130. }
  131. }
  132. LOCAL char *
  133. strsv(s)
  134. char *s;
  135. {
  136. char *p;
  137. int len = strlen(s);
  138. p = malloc(len+1);
  139. if (p)
  140. strcpy(p, s);
  141. return (p);
  142. }