VirtualBox

source: kBuild/trunk/src/ash/win/mscfakes.c@ 633

最後變更 在這個檔案從633是 632,由 bird 提交於 18 年 前

MSC hacking.

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 3.1 KB
 
1/* $Id: mscfakes.c 632 2006-11-26 13:46:21Z bird $ */
2/** @file
3 *
4 * Fake Unix stuff for MSC.
5 *
6 * Copyright (c) 2005 knut st. osmundsen <[email protected]>
7 *
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with This program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 *
23 */
24
25
26#include <stdarg.h>
27#include <stdio.h>
28#include <stdlib.h>
29#include <string.h>
30#include <errno.h>
31#include <io.h>
32#include <fcntl.h>
33#include "err.h"
34#include "mscfakes.h"
35#undef mkdir
36
37
38char *dirname(char *path)
39{
40 /** @todo later */
41 return path;
42}
43
44
45int link(const char *pszDst, const char *pszLink)
46{
47 errno = ENOSYS;
48 err(1, "link() is not implemented on windows!");
49 return -1;
50}
51
52
53int mkdir_msc(const char *path, mode_t mode)
54{
55 int rc = mkdir(path);
56 if (rc)
57 {
58 int len = strlen(path);
59 if (len > 0 && (path[len - 1] == '/' || path[len - 1] == '\\'))
60 {
61 char *str = strdup(path);
62 while (len > 0 && (str[len - 1] == '/' || str[len - 1] == '\\'))
63 str[--len] = '\0';
64 rc = mkdir(str);
65 free(str);
66 }
67 }
68 return rc;
69}
70
71
72static int doname(char *pszX, char *pszEnd)
73{
74 static char s_szChars[] = "Xabcdefghijklmnopqrstuwvxyz1234567890";
75 int rc = 0;
76 do
77 {
78 char ch;
79
80 pszEnd++;
81 ch = *(strchr(s_szChars, *pszEnd) + 1);
82 if (ch)
83 {
84 *pszEnd = ch;
85 return 0;
86 }
87 *pszEnd = 'a';
88 } while (pszEnd != pszX);
89 return 1;
90}
91
92
93int mkstemp(char *temp)
94{
95 char *pszX = strchr(temp, 'X');
96 char *pszEnd = strchr(pszX, '\0');
97 int cTries = 1000;
98 while (--cTries > 0)
99 {
100 int fd;
101 if (doname(pszX, pszEnd))
102 return -1;
103 fd = open(temp, _O_EXCL | _O_CREAT | _O_BINARY | _O_RDWR, 0777);
104 if (fd >= 0)
105 return fd;
106 }
107 return -1;
108}
109
110
111int symlink(const char *pszDst, const char *pszLink)
112{
113 errno = ENOSYS;
114 err(1, "symlink() is not implemented on windows!");
115 return -1;
116}
117
118
119#if _MSC_VER < 1400
120int snprintf(char *buf, size_t size, const char *fmt, ...)
121{
122 int cch;
123 va_list args;
124 va_start(args, fmt);
125 cch = vsprintf(buf, fmt, args);
126 va_end(args);
127 return cch;
128}
129#endif
130
131
132int utimes(const char *pszPath, const struct timeval *paTimes)
133{
134 /** @todo implement me! */
135 return 0;
136}
137
138
139int writev(int fd, const struct iovec *vector, int count)
140{
141 int size = 0;
142 int i;
143 for (i = 0; i < count; i++)
144 {
145 int cb = write(fd, vector[i].iov_base, vector[i].iov_len);
146 if (cb < 0)
147 return -1;
148 size += cb;
149 }
150 return size;
151}
152
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette