- Timestamp:
- Jan 19, 2007, 6:57:42 AM (19 years ago)
- Location:
- trunk/src/gmake
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gmake/Makefile.kmk
r763 r775 109 109 kmkbuiltin/mv.c \ 110 110 kmkbuiltin/ln.c \ 111 kmkbuiltin/printf.c \ 111 112 kmkbuiltin/rm.c \ 112 113 kmkbuiltin/rmdir.c \ … … 130 131 # Standalone kmkbuiltin commands. 131 132 # 132 PROGRAMS += kmk_append kmk_cat kmk_cp kmk_echo kmk_mkdir kmk_mv kmk_install kmk_ln kmk_ rm kmk_rmdir133 PROGRAMS += kmk_append kmk_cat kmk_cp kmk_echo kmk_mkdir kmk_mv kmk_install kmk_ln kmk_printf kmk_rm kmk_rmdir 133 134 134 135 kmk_append_TEMPLATE = BIN … … 238 239 kmk_mv_DEFS += HAVE_CONFIG_H 239 240 kmk_mv_SOURCES += \ 241 kmkbuiltin/mscfakes.c \ 242 getopt.c \ 243 getopt1.c 244 endif 245 246 kmk_printf_TEMPLATE = BIN 247 kmk_printf_DEFS = kmk_builtin_printf=main 248 kmk_printf_SOURCES = \ 249 kmkbuiltin/printf.c \ 250 kmkbuiltin/err.c 251 ifeq ($(filter-out win32 win64 win nt,$(BUILD_TARGET)),) 252 kmk_printf_INCS += $(PATH_TARGET) . 253 kmk_printf_DEFS += HAVE_CONFIG_H 254 kmk_printf_SOURCES += \ 240 255 kmkbuiltin/mscfakes.c \ 241 256 getopt.c \ -
trunk/src/gmake/kmkbuiltin.c
r613 r775 31 31 #ifdef _MSC_VER 32 32 # include <io.h> 33 #endif 33 #endif 34 34 #include "kmkbuiltin/err.h" 35 35 #include "kmkbuiltin.h" … … 184 184 if (!strcmp(pszCmd, "append")) 185 185 rc = kmk_builtin_append(argc, argv, environ); 186 else if (!strcmp(pszCmd, "printf")) 187 rc = kmk_builtin_printf(argc, argv, environ); 186 188 else if (!strcmp(pszCmd, "echo")) 187 189 rc = kmk_builtin_echo(argc, argv, environ); -
trunk/src/gmake/kmkbuiltin.h
r611 r775 36 36 extern int kmk_builtin_mkdir(int argc, char **argv, char **envp); 37 37 extern int kmk_builtin_mv(int argc, char **argv, char **envp); 38 extern int kmk_builtin_printf(int argc, char **argv, char **envp); 38 39 extern int kmk_builtin_rm(int argc, char **argv, char **envp); 39 40 extern int kmk_builtin_rmdir(int argc, char **argv, char **envp); -
trunk/src/gmake/kmkbuiltin/mscfakes.c
r370 r775 37 37 38 38 char *dirname(char *path) 39 { 39 { 40 40 /** @todo later */ 41 41 return path; … … 127 127 return cch; 128 128 } 129 #endif 129 #endif 130 130 131 131 … … 151 151 } 152 152 153 154 intmax_t strtoimax(const char *nptr, char **endptr, int base) 155 { 156 return strtol(nptr, endptr, base); /** @todo fix this. */ 157 } 158 159 160 uintmax_t strtoumax(const char *nptr, char **endptr, int base) 161 { 162 return strtoul(nptr, endptr, base); /** @todo fix this. */ 163 } 164 165 166 int asprintf(char **strp, const char *fmt, ...) 167 { 168 int rc; 169 va_list va; 170 va_start(va, fmt); 171 rc = vasprintf(strp, fmt, va); 172 va_end(va); 173 return rc; 174 } 175 176 177 int vasprintf(char **strp, const char *fmt, va_list va) 178 { 179 int rc; 180 char *psz; 181 size_t cb = 1024; 182 183 *strp = NULL; 184 for (;;) 185 { 186 va_list va2; 187 188 psz = malloc(cb); 189 if (!psz) 190 return -1; 191 192 #ifdef va_copy 193 va_copy(va2, va); 194 rc = snprintf(psz, cb, fmt, va2); 195 va_end(vaCopy); 196 #else 197 va2 = va; 198 rc = snprintf(psz, cb, fmt, va2); 199 #endif 200 if (rc < 0 || (size_t)rc < cb) 201 break; 202 cb *= 2; 203 free(psz); 204 } 205 206 *strp = psz; 207 return rc; 208 } 209 -
trunk/src/gmake/kmkbuiltin/mscfakes.h
r526 r775 31 31 #include <direct.h> 32 32 #include <time.h> 33 #include <stdarg.h> 33 34 #undef setmode 34 35 #include "getopt.h" … … 86 87 87 88 #ifndef timerisset 88 struct timeval 89 struct timeval 89 90 { 90 91 long tv_sec; 91 92 long tv_usec; 92 93 }; 93 #endif 94 #endif 94 95 95 struct iovec 96 struct iovec 96 97 { 97 98 char *iov_base; … … 99 100 }; 100 101 102 typedef __int64 intmax_t; 103 typedef unsigned __int64 uintmax_t; 101 104 102 105 #define chown(path, uid, gid) 0 /** @todo implement fchmod! */ … … 118 121 #define readlink(link, buf, size) -1 119 122 #define reallocf(old, size) realloc(old, size) 123 intmax_t strtoimax(const char *nptr, char **endptr, int base); 124 int asprintf(char **strp, const char *fmt, ...); 125 int vasprintf(char **strp, const char *fmt, va_list ap); 120 126 #if _MSC_VER < 1400 121 127 int snprintf(char *buf, size_t size, const char *fmt, ...); 122 128 #else 123 129 #define snprintf _snprintf 124 #endif 130 #endif 125 131 size_t strlcpy(char *, const char *, size_t); 126 132 int symlink(const char *pszDst, const char *pszLink); … … 129 135 130 136 #endif /* _MSC_VER */ 131 #endif 137 #endif 132 138 -
trunk/src/gmake/kmkbuiltin/printf.c
r774 r775 30 30 */ 31 31 32 #include <sys/cdefs.h>32 /*#include <sys/cdefs.h> 33 33 #ifndef lint 34 34 #if !defined(BUILTIN) && !defined(SHELL) … … 44 44 __RCSID("$NetBSD: printf.c,v 1.31 2005/03/22 23:55:46 dsl Exp $"); 45 45 #endif 46 #endif /* not lint */46 #endif*/ /* not lint */ 47 47 48 48 #include <sys/types.h> 49 49 50 50 #include <ctype.h> 51 #include <err.h>51 #include "err.h" 52 52 #include <errno.h> 53 #ifndef _MSC_VER 53 54 #include <inttypes.h> 55 #endif 54 56 #include <limits.h> 55 57 #include <locale.h> … … 58 60 #include <stdlib.h> 59 61 #include <string.h> 62 #ifndef _MSC_VER 60 63 #include <unistd.h> 64 #else 65 #include "mscfakes.h" 66 #endif 61 67 62 68 #ifdef __GNUC__ … … 77 83 static char *mklong(const char *, int); 78 84 static void check_conversion(const char *, const char *); 79 static void usage(void); 85 static void usage(void); 80 86 81 87 static void b_count(int); … … 88 94 89 95 #ifdef BUILTIN /* csh builtin */ 90 #define mainprogprintf96 #define kmk_builtin_printf progprintf 91 97 #endif 92 98 93 99 #ifdef SHELL /* sh (aka ash) builtin */ 94 #define mainprintfcmd100 #define kmk_builtin_printf printfcmd 95 101 #include "../../bin/sh/bltin/bltin.h" 96 102 #endif /* SHELL */ … … 120 126 } 121 127 122 int main(int, char **); 123 int main(int argc, char *argv[]) 128 int kmk_builtin_printf(int argc, char *argv[]) 124 129 { 125 130 char *fmt, *start; … … 129 134 int ch; 130 135 131 #if !defined(SHELL) && !defined(BUILTIN) 136 /* kmk: reinitialize globals */ 137 b_length = 0; 138 b_fmt = NULL; 139 rval = 0; 140 gargv = NULL; 141 142 /* kmk: reset getopt and set progname */ 143 g_progname = argv[0]; 144 opterr = 1; 145 optarg = NULL; 146 optopt = 0; 147 #if defined(__FreeBSD__) || defined(__EMX__) || defined(__APPLE__) 148 optreset = 1; 149 optind = 1; 150 #else 151 optind = 0; /* init */ 152 #endif 153 154 #if !defined(SHELL) && !defined(BUILTIN) && !defined(kmk_builtin_printf) /* kmk did this already. */ 132 155 (void)setlocale (LC_ALL, ""); 133 156 #endif … … 158 181 * Basic algorithm is to scan the format string for conversion 159 182 * specifications -- once one is found, find out if the field 160 * width or precision is a '*'; if it is, gather up value. 183 * width or precision is a '*'; if it is, gather up value. 161 184 * Note, format strings are reused as necessary to use up the 162 * provided arguments, arguments of zero/null string are 185 * provided arguments, arguments of zero/null string are 163 186 * provided to use up the format string. 164 187 */ … … 322 345 323 346 /* 324 * Print SysV echo(1) style escape string 347 * Print SysV echo(1) style escape string 325 348 * Halts processing string if a \c escape is encountered. 326 349 */ … … 345 368 } 346 369 347 /* 370 /* 348 371 * %b string octal constants are not like those in C. 349 * They start with a \0, and are followed by 0, 1, 2, 350 * or 3 octal digits. 372 * They start with a \0, and are followed by 0, 1, 2, 373 * or 3 octal digits. 351 374 */ 352 375 if (ch == '0') { … … 390 413 391 414 /* 392 * Print "standard" escape characters 415 * Print "standard" escape characters 393 416 */ 394 417 static char * … … 519 542 { 520 543 static char copy[64]; 521 size_t len; 544 size_t len; 522 545 523 546 len = strlen(str) + 2; … … 530 553 copy[len - 2] = ch; 531 554 copy[len - 1] = '\0'; 532 return copy; 555 return copy; 533 556 } 534 557 … … 659 682 usage(void) 660 683 { 661 (void)fprintf(stderr, "Usage: %s format [arg ...]\n", g etprogname());662 } 684 (void)fprintf(stderr, "Usage: %s format [arg ...]\n", g_progname); 685 }
Note:
See TracChangeset
for help on using the changeset viewer.