rem: DOTSLASH(tmpname);  SLASHDOT(outname);
add: outname = strdup(name); slashdot(outname,'/','.');
context: int ReadSetting(const char *setting) {int rc = 0;char *tmpname, *outname;char inbuf[1025];const char *name = setting;FILE *fp;   if (!setting || !*setting) {      fprintf(stderr, ERR_INVALID_KEY, setting);   } /* endif */   tmpname = (char *)malloc((strlen(name)+strlen(PROC_PATH)+1)*sizeof(char));   outname = (char *)malloc((strlen(name)+1)*sizeof(char));   strcpy(tmpname, PROC_PATH);   strcat(tmpname, name);    strcpy(outname, name);     DOTSLASH(tmpname); /* change . to / */   SLASHDOT(outname); /* change / to . */   fp = fopen(tmpname, "r");   if (!fp) {      switch(errno) {      case ENOENT:         fprintf(stderr, ERR_INVALID_KEY, outname);        break;      case EACCES:         fprintf(stderr, ERR_PERMISSION_DENIED, outname);        break;      default:         fprintf(stderr, ERR_UNKNOWN_READING, errno, outname);        break;      } /* end switch */      rc = -1;   } else {      while(fgets(inbuf, 1024, fp)) {         /* already has the \n in it */         if (PrintName) {            fprintf(stdout, "%s = %s", outname, inbuf);         } else {            if (!PrintNewline) {              char *nlptr = strchr(inbuf,'\n');              if(nlptr) *nlptr='\0';            }            fprintf(stdout, "%s", inbuf);         }      } /* endwhile */      fclose(fp);   } /* endif */   free(tmpname);   free(outname);return rc;} /* end ReadSetting() */