earlybrowserreborn - Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 roytam 1 /*
2  * file.c
3  */
4 /*
5  * Copyright 1991 Pei-Yuan Wei.  All rights reserved.
6  *
7  * Permission to use, copy, and/or distribute for any purpose and
8  * without fee is hereby granted, provided that both the above copyright
9  * notice and this permission notice appear in all copies and derived works.
10  * Fees for distribution or use of this software or derived works may only
11  * be charged with express written permission of the copyright holder.
12  * This software is provided ``as is'' without express or implied warranty.
13  */
14 #include <stdio.h>
15 #include <pwd.h>
16 #include "utils.h"
17 #include "mystrings.h"
18 #include "file.h"
19 #include <sys/types.h>
20 #include <unistd.h>
21 #include <fcntl.h>
22  
23 int io_stat;
24  
25 char *vl_expandPath(path, buffer)
26         char *path;
27         char *buffer;
28 {
29         if (!path) return NULL;
30         if (path[0] == '~') {
31 /*              extern char *cuserid();*/ /* Bede McCall <bede@mitre.org> */
32                 struct passwd *info;
33                 char userName[256];
34                 int i = 0;
35  
36                 if (path[1] == '\0' || path[1] == '/') {
37                         char *cp = getlogin();
38  
39                         /* assume path looks like: "~" "~/viola" */
40                         if (cp) {
41                                 strcpy(userName, cp);
42                         } else {
43                                 struct passwd *pwds;
44  
45                                 pwds = getpwuid(getuid());
46                                 strcpy(userName, pwds->pw_name);
47  
48                                 while (userName[i++] != ':');
49                                 userName[i] = '\0';
50                         }
51                 } else {
52                         char c;
53                         /* ie: "~wei/viola" */
54  
55                         /* get user's name */
56                         for (; c = path[i + 1]; i++) {
57                                 if (isalpha(c)) userName[i] = c;
58                                 else break;
59                         }
60                         userName[i] = '\0';
61                 }
62                 if (info = getpwnam(userName)) {
63                         strcpy(buffer, info->pw_dir);
64                         strcat(buffer, &path[i + 1]);
65                         return buffer;
66                 }
67         } else {
68                 strcpy(buffer, path);
69                 return buffer;
70         }
71         fprintf(stderr, "failed to expand ~ for \"%s\"\n", path);
72         return NULL;
73 }
74  
75 /*
76  * enter environment variables into the resource's variable list.
77  *
78  */
79 char *getEnvironVars(argv, name, content)
80         char *argv[];
81         char *name;
82         char *content;
83 {
84         if (argv) {
85                 int ai = 0, i;
86                 char label[100];
87  
88                 while (argv[ai]) {
89 /*                      fprintf(stderr, "argv[%d] = [%s]\n",ai,argv[ai]);*/
90                         for (i = 0; (label[i] = argv[ai][i]) != '='; i++);
91                         label[i] = '\0';
92                         if (!STRCMP(name, label)) {
93                                 strcpy(content, &argv[ai][++i]);
94 /*                              fprintf(stderr, "name=[%s] content= [%s]\n", name, content);*/
95                                 return content;
96                         }
97                         ++ai;
98                 }
99         }
100         return NULL;
101 }
102  
103 /*
104  * loads a file from disk, and puts it in str.
105  *
106  * return: -1 if unable to open file.
107  */
108 int loadFile(fileName, strp)
109         char *fileName;
110         char **strp;
111 {
112         int fd;
113         FILE *fp;
114         int i = 0, c;
115         long size;
116  
117         /* printf("loading file '%s'\n",fileName); */
118  
119         fd = open(fileName, O_RDONLY);
120         if (!fd) {
121                 io_stat = -1;
122                 return -1;
123         }
124         fp = fdopen(fd, "r");
125         if (!fp) {
126                 io_stat = -1;
127                 return -1;
128         }
129  
130         /* determine size of file */
131         size = lseek(fd, 0, SEEK_END);
132  
133         *strp = (char*)malloc(sizeof(char) * (int)size + 1);
134  
135         rewind(fp);
136         fread(*strp, size, 1, fp);
137  
138         (*strp)[size] = '\0';
139  
140         fclose(fp);
141         close(fd);
142  
143         io_stat = i;
144  
145         return i;
146 }
147  
148 /*
149  * saves a str to a file
150  *
151  * return: -1 if unable to open file.
152  */
153 int saveFile(fileName, str)
154         char *fileName;
155         char *str;
156 {
157         FILE *fp;
158  
159         /*printf("save: name='%s'        content='%s'\n",fileName,str);*/
160         fp = fopen(fileName, "w");
161  
162         if (!fp) {
163                 fprintf(stderr,
164                         "Unable to open file '%s'. aborted.\n", fileName);
165                 return -1;
166         }
167         fputs(str, fp);
168  
169         fclose(fp);
170  
171         return 0;
172 }