Changeset 1695 in kBuild for trunk/src/kmk/kmkbuiltin
- Timestamp:
- Aug 31, 2008 8:24:55 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/kmkbuiltin/append.c
r1442 r1695 42 42 { 43 43 fprintf(pf, 44 "usage: %s [- cnv] file [string ...]\n"44 "usage: %s [-dcntv] file [string ...]\n" 45 45 " or: %s --version\n" 46 " or: %s --help\n", 46 " or: %s --help\n" 47 "\n" 48 "Options:\n" 49 " -d Enclose the output in define ... endef, taking the name from\n" 50 " the first argument following the file name.\n" 51 " -c Output the command for specified target(s). [builtin only]\n" 52 " -n Insert a new line between the strings.\n" 53 " -t Truncate the file instead of appending\n" 54 " -v Output the value(s) for specified variable(s). [builtin only]\n" 55 , 47 56 g_progname, g_progname, g_progname); 48 57 return 1; … … 57 66 int i; 58 67 int fFirst; 68 int iFile; 59 69 FILE *pFile; 60 70 int fNewLine = 0; 61 #ifndef kmk_builtin_append 71 int fTruncate = 0; 72 int fDefine = 0; 62 73 int fVariables = 0; 63 74 int fCommands = 0; 64 #endif65 75 66 76 g_progname = argv[0]; … … 73 83 && argv[i][0] == '-' 74 84 && argv[i][1] != '\0' /* '-' is a file */ 75 && strchr("-c nv", argv[i][1]) /* valid option char */85 && strchr("-cdntv", argv[i][1]) /* valid option char */ 76 86 ) 77 87 { … … 84 94 { 85 95 case 'c': 96 if (fVariables) 97 { 98 errx(1, "Option '-c' clashes with '-v'."); 99 return usage(stderr); 100 } 86 101 #ifndef kmk_builtin_append 87 102 fCommands = 1; … … 91 106 return usage(stderr); 92 107 #endif 108 case 'd': 109 if (fVariables) 110 { 111 errx(1, "Option '-d' must come before '-v'!"); 112 return usage(stderr); 113 } 114 fDefine = 1; 115 break; 93 116 case 'n': 94 117 fNewLine = 1; 95 118 break; 119 case 't': 120 fTruncate = 1; 121 break; 96 122 case 'v': 123 if (fCommands) 124 { 125 errx(1, "Option '-v' clashes with '-c'."); 126 return usage(stderr); 127 } 97 128 #ifndef kmk_builtin_append 98 129 fVariables = 1; … … 120 151 } 121 152 153 if (i + fDefine >= argc) 154 { 155 if (i <= argc) 156 errx(1, "missing filename!"); 157 else 158 errx(1, "missing define name!"); 159 return usage(stderr); 160 } 161 122 162 /* 123 163 * Open the output file. 124 164 */ 125 if (i >= argc) 126 { 127 errx(1, "missing filename!"); 128 return usage(stderr); 129 } 130 pFile = fopen(argv[i], "a"); 165 iFile = i; 166 pFile = fopen(argv[i], fTruncate ? "w" : "a"); 131 167 if (!pFile) 132 168 return err(1, "failed to open '%s'.", argv[i]); 169 170 /* 171 * Start define? 172 */ 173 if (fDefine) 174 { 175 i++; 176 fprintf(pFile, "define %s\n", argv[i]); 177 } 133 178 134 179 /* … … 177 222 } 178 223 179 /* 180 * Add the newline and close the file. 181 */ 182 if ( fputc('\n', pFile) == EOF 224 /* 225 * Add the newline, closing the define if needed, and close the file. 226 */ 227 if ( ( fDefine 228 ? fwrite(fFirst ? "endef\n" : "\nendef\n", 229 1, 230 fFirst ? sizeof("endef\n") - 1 : sizeof("\nendef\n") - 1, 231 pFile) < sizeof("endef\n") 232 : fputc('\n', pFile) == EOF) 183 233 || ferror(pFile)) 184 234 { 185 235 fclose(pFile); 186 return errx(1, "error writing to '%s'!", argv[ 1]);236 return errx(1, "error writing to '%s'!", argv[iFile]); 187 237 } 188 238 if (fclose(pFile)) 189 return err(1, "failed to fclose '%s'!", argv[ 1]);239 return err(1, "failed to fclose '%s'!", argv[iFile]); 190 240 return 0; 191 241 }
Note:
See TracChangeset
for help on using the changeset viewer.