pastebin - collaborative debugging tool
rovema.kpaste.net RSS


msnfs41client: Patches for Win10 32bit, FileAllocationInformation, debug+misc, 2024-05-17
Posted by Anonymous on Fri 17th May 2024 14:27
raw | new post

  1. From 97fb1e691d0d9796c91d409d32ea4ae096e37294 Mon Sep 17 00:00:00 2001
  2. From: Roland Mainz <roland.mainz@nrubsig.org>
  3. Date: Thu, 16 May 2024 15:26:16 +0200
  4. Subject: [PATCH 1/5] cygwin: Allow make -j to be used for "build" target
  5.  
  6. Allow make -j to be used for "build" target
  7.  
  8. Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
  9. ---
  10. cygwin/Makefile | 10 +++++++++-
  11.  1 file changed, 9 insertions(+), 1 deletion(-)
  12.  
  13. diff --git a/cygwin/Makefile b/cygwin/Makefile
  14. index ea16bfa..78b8ad6 100644
  15. --- a/cygwin/Makefile
  16. +++ b/cygwin/Makefile
  17. @@ -26,12 +26,20 @@ $(VS_BUILD_DIR)/nfsd.exe \
  18.  #
  19.  # build the code
  20.  #
  21. -build:
  22. +build_64bit_release:
  23.         @printf '#\n# PATH is %q\n#\n' '$(PATH)'
  24.         which MSBuild.exe
  25.         MSBuild.exe '$(shell cygpath -w "$(PROJECT_BASEDIR_DIR)/build.vc19/nfs41-client.sln")' -t:Build  -p:Configuration=Release -p:Platform=x64
  26. +
  27. +build_64bit_debug:
  28. +       @printf '#\n# PATH is %q\n#\n' '$(PATH)'
  29. +       which MSBuild.exe
  30.         MSBuild.exe '$(shell cygpath -w "$(PROJECT_BASEDIR_DIR)/build.vc19/nfs41-client.sln")' -t:Build  -p:Configuration=Debug -p:Platform=x64
  31. +
  32. +build_testutils:
  33.         (cd "$(PROJECT_BASEDIR_DIR)/tests/winfsinfo1" && make all)
  34. +
  35. +build: build_64bit_release build_64bit_debug build_testutils
  36.         sync
  37.  
  38.  #
  39. --
  40. 2.43.0
  41.  
  42. From 86cc8e433ac8fcf014b6dc745e8a95904ac6a71d Mon Sep 17 00:00:00 2001
  43. From: Roland Mainz <roland.mainz@nrubsig.org>
  44. Date: Thu, 16 May 2024 15:35:47 +0200
  45. Subject: [PATCH 2/5] daemon,sys: Info+debug code for
  46.  |FileAllocationInformation| limbo status
  47.  
  48. Add comment about |FileAllocationInformation|'s limbo status, plus
  49. debug code to debug it easier.
  50.  
  51. Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
  52. ---
  53. daemon/setattr.c   | 8 +++++++-
  54.  sys/nfs41_driver.c | 8 ++++++++
  55.  2 files changed, 15 insertions(+), 1 deletion(-)
  56.  
  57. diff --git a/daemon/setattr.c b/daemon/setattr.c
  58. index 540dac8..b700a07 100644
  59. --- a/daemon/setattr.c
  60. +++ b/daemon/setattr.c
  61. @@ -353,6 +353,13 @@ static int handle_nfs41_set_size(void *daemon_context, setattr_upcall_args *args
  62.      nfs41_open_state *state = args->state;
  63.      int status;
  64.  
  65. +    EASSERT_MSG(args->buf_len == sizeof(size->QuadPart),
  66. +        ("args->buf_len=%ld\n", (long)args->buf_len));
  67. +
  68. +    DPRINTF(2,
  69. +        ("handle_nfs41_set_size: args->set_class=%d, new_file=%lld\n",
  70. +            (int)args->set_class, (long long)size->QuadPart));
  71. +
  72.      /* break read delegations before SETATTR */
  73.      nfs41_delegation_return(state->session, &state->file,
  74.          OPEN_DELEGATE_READ, FALSE);
  75. @@ -363,7 +370,6 @@ static int handle_nfs41_set_size(void *daemon_context, setattr_upcall_args *args
  76.      info.attrmask.count = 1;
  77.      info.attrmask.arr[0] = FATTR4_WORD0_SIZE;
  78.  
  79. -    DPRINTF(2, ("calling setattr() with size=%lld\n", info.size));
  80.      status = nfs41_setattr(state->session, &state->file, &stateid, &info);
  81.      if (status) {
  82.          DPRINTF(1, ("nfs41_setattr() failed with error '%s'.\n",
  83. diff --git a/sys/nfs41_driver.c b/sys/nfs41_driver.c
  84. index fd2a0ca..bcd9a69 100644
  85. --- a/sys/nfs41_driver.c
  86. +++ b/sys/nfs41_driver.c
  87. @@ -5896,6 +5896,14 @@ NTSTATUS nfs41_SetFileInformation(
  88.              status = STATUS_SUCCESS;
  89.              goto out;
  90.          }
  91. +    case FileAllocationInformation:
  92. +        /*
  93. +         * Fixme: What is the correct way to handle
  94. +         * |FileAllocationInformation| ? NFSv4 does not have the
  95. +         * concept of a difference between "allocation size" and
  96. +         * "end-of-file" position
  97. +         */
  98. +        break;
  99.      case FileEndOfFileInformation:
  100.          {
  101.              PFILE_END_OF_FILE_INFORMATION info =
  102. --
  103. 2.43.0
  104.  
  105. From a1d09b689a995cd8a3241268d2450b1746b96df6 Mon Sep 17 00:00:00 2001
  106. From: Roland Mainz <roland.mainz@nrubsig.org>
  107. Date: Thu, 16 May 2024 16:30:53 +0200
  108. Subject: [PATCH 3/5] daemon: Add debug infratructure for
  109.  |FILE_INFORMATION_CLASS|
  110.  
  111. Add debug infratructure for |FILE_INFORMATION_CLASS|
  112.  
  113. Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
  114. ---
  115. daemon/daemon_debug.c | 58 +++++++++++++++++++++++++++++++++++++++++++
  116.  daemon/daemon_debug.h |  1 +
  117.  daemon/setattr.c      |  5 ++--
  118.  3 files changed, 62 insertions(+), 2 deletions(-)
  119.  
  120. diff --git a/daemon/daemon_debug.c b/daemon/daemon_debug.c
  121. index 8f8b22e..a75736f 100644
  122. --- a/daemon/daemon_debug.c
  123. +++ b/daemon/daemon_debug.c
  124. @@ -659,6 +659,64 @@ const char* gssauth_string(int type) {
  125.      return "<invalid RPCSEC_SSPI_* gss auth type>";
  126.  }
  127.  
  128. +const char *FILE_INFORMATION_CLASS2string(int fic)
  129. +{
  130. +    switch(fic) {
  131. +#define FIC_TO_STRLITERAL(e) case e: return #e;
  132. +        FIC_TO_STRLITERAL(FileDirectoryInformation)
  133. +        FIC_TO_STRLITERAL(FileFullDirectoryInformation)
  134. +        FIC_TO_STRLITERAL(FileBothDirectoryInformation)
  135. +        FIC_TO_STRLITERAL(FileBasicInformation)
  136. +        FIC_TO_STRLITERAL(FileStandardInformation)
  137. +        FIC_TO_STRLITERAL(FileInternalInformation)
  138. +        FIC_TO_STRLITERAL(FileEaInformation)
  139. +        FIC_TO_STRLITERAL(FileAccessInformation)
  140. +        FIC_TO_STRLITERAL(FileNameInformation)
  141. +        FIC_TO_STRLITERAL(FileRenameInformation)
  142. +        FIC_TO_STRLITERAL(FileLinkInformation)
  143. +        FIC_TO_STRLITERAL(FileNamesInformation)
  144. +        FIC_TO_STRLITERAL(FileDispositionInformation)
  145. +        FIC_TO_STRLITERAL(FilePositionInformation)
  146. +        FIC_TO_STRLITERAL(FileFullEaInformation)
  147. +        FIC_TO_STRLITERAL(FileModeInformation)
  148. +        FIC_TO_STRLITERAL(FileAlignmentInformation)
  149. +        FIC_TO_STRLITERAL(FileAllInformation)
  150. +        FIC_TO_STRLITERAL(FileAllocationInformation)
  151. +        FIC_TO_STRLITERAL(FileEndOfFileInformation)
  152. +        FIC_TO_STRLITERAL(FileAlternateNameInformation)
  153. +        FIC_TO_STRLITERAL(FileStreamInformation)
  154. +        FIC_TO_STRLITERAL(FilePipeInformation)
  155. +        FIC_TO_STRLITERAL(FilePipeLocalInformation)
  156. +        FIC_TO_STRLITERAL(FilePipeRemoteInformation)
  157. +        FIC_TO_STRLITERAL(FileMailslotQueryInformation)
  158. +        FIC_TO_STRLITERAL(FileMailslotSetInformation)
  159. +        FIC_TO_STRLITERAL(FileCompressionInformation)
  160. +        FIC_TO_STRLITERAL(FileObjectIdInformation)
  161. +        FIC_TO_STRLITERAL(FileCompletionInformation)
  162. +        FIC_TO_STRLITERAL(FileMoveClusterInformation)
  163. +        FIC_TO_STRLITERAL(FileQuotaInformation)
  164. +        FIC_TO_STRLITERAL(FileReparsePointInformation)
  165. +        FIC_TO_STRLITERAL(FileNetworkOpenInformation)
  166. +        FIC_TO_STRLITERAL(FileAttributeTagInformation)
  167. +        FIC_TO_STRLITERAL(FileTrackingInformation)
  168. +        FIC_TO_STRLITERAL(FileIdBothDirectoryInformation)
  169. +        FIC_TO_STRLITERAL(FileIdFullDirectoryInformation)
  170. +        FIC_TO_STRLITERAL(FileValidDataLengthInformation)
  171. +        FIC_TO_STRLITERAL(FileShortNameInformation)
  172. +        FIC_TO_STRLITERAL(FileIoCompletionNotificationInformation)
  173. +        FIC_TO_STRLITERAL(FileIoStatusBlockRangeInformation)
  174. +        FIC_TO_STRLITERAL(FileIoPriorityHintInformation)
  175. +        FIC_TO_STRLITERAL(FileSfioReserveInformation)
  176. +        FIC_TO_STRLITERAL(FileSfioVolumeInformation)
  177. +        FIC_TO_STRLITERAL(FileHardLinkInformation)
  178. +        FIC_TO_STRLITERAL(FileProcessIdsUsingFileInformation)
  179. +        FIC_TO_STRLITERAL(FileNormalizedNameInformation)
  180. +        FIC_TO_STRLITERAL(FileNetworkPhysicalNameInformation)
  181. +        FIC_TO_STRLITERAL(FileIdGlobalTxDirectoryInformation)
  182. +    }
  183. +    return "<unknown FILE_INFORMATION_CLASS>";
  184. +}
  185. +
  186.  void print_condwait_status(int level, int status)
  187.  {
  188.      if (level > g_debug_level) return;
  189. diff --git a/daemon/daemon_debug.h b/daemon/daemon_debug.h
  190. index 6d801bb..043ff79 100644
  191. --- a/daemon/daemon_debug.h
  192. +++ b/daemon/daemon_debug.h
  193. @@ -110,6 +110,7 @@ const char* nfs_opnum_to_string(int opnum);
  194.  const char* nfs_error_string(int status);
  195.  const char* rpc_error_string(int status);
  196.  const char* gssauth_string(int type);
  197. +const char *FILE_INFORMATION_CLASS2string(int fic);
  198.  void print_condwait_status(int level, int status);
  199.  void print_sr_status_flags(int level, int flags);
  200.  void open_log_files();
  201. diff --git a/daemon/setattr.c b/daemon/setattr.c
  202. index b700a07..30a262d 100644
  203. --- a/daemon/setattr.c
  204. +++ b/daemon/setattr.c
  205. @@ -357,8 +357,9 @@ static int handle_nfs41_set_size(void *daemon_context, setattr_upcall_args *args
  206.          ("args->buf_len=%ld\n", (long)args->buf_len));
  207.  
  208.      DPRINTF(2,
  209. -        ("handle_nfs41_set_size: args->set_class=%d, new_file=%lld\n",
  210. -            (int)args->set_class, (long long)size->QuadPart));
  211. +        ("handle_nfs41_set_size: set_class='%s', new_file=%lld\n",
  212. +            FILE_INFORMATION_CLASS2string(args->set_class),
  213. +            (long long)size->QuadPart));
  214.  
  215.      /* break read delegations before SETATTR */
  216.      nfs41_delegation_return(state->session, &state->file,
  217. --
  218. 2.43.0
  219.  
  220. From 6d4412f46f0c00246892fd6294a401e8e5b84923 Mon Sep 17 00:00:00 2001
  221. From: Roland Mainz <roland.mainz@nrubsig.org>
  222. Date: Fri, 17 May 2024 13:17:25 +0200
  223. Subject: [PATCH 4/5] cygwin: Factor out installdest target to Makefile.install
  224.  
  225. Factor out installdest target to Makefile.install for
  226. multi-arch support.
  227.  
  228. Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
  229. ---
  230. cygwin/Makefile         | 98 ++++++++---------------------------------
  231.  cygwin/Makefile.install | 90 +++++++++++++++++++++++++++++++++++++
  232.  2 files changed, 108 insertions(+), 80 deletions(-)
  233.  create mode 100644 cygwin/Makefile.install
  234.  
  235. diff --git a/cygwin/Makefile b/cygwin/Makefile
  236. index 78b8ad6..b40d6c7 100644
  237. --- a/cygwin/Makefile
  238. +++ b/cygwin/Makefile
  239. @@ -13,15 +13,15 @@ PROJECT_BASEDIR_DIR := $(shell dirname $(realpath $(CYGWIN_MAKEFILE_DIR)/))
  240.  
  241.  DESTDIR:=$(PROJECT_BASEDIR_DIR)/destdir
  242.  
  243. -VS_BUILD_DIR:=$(PROJECT_BASEDIR_DIR)/build.vc19/x64/Debug/
  244. +VS_BUILD_DIR64:=$(PROJECT_BASEDIR_DIR)/build.vc19/x64/Debug/
  245.  
  246.  # trigger "build" target when these binaries are needed
  247. -$(VS_BUILD_DIR)/nfsd.exe \
  248. -       $(VS_BUILD_DIR)/nfs_mount.exe \
  249. -       $(VS_BUILD_DIR)/nfs_install.exe \
  250. -       $(VS_BUILD_DIR)/nfs_mount.exe \
  251. -       $(VS_BUILD_DIR)/nfs41_driver.sys \
  252. -       $(VS_BUILD_DIR)/libtirpc.dll: build
  253. +$(VS_BUILD_DIR64)/nfsd.exe \
  254. +       $(VS_BUILD_DIR64)/nfs_mount.exe \
  255. +       $(VS_BUILD_DIR64)/nfs_install.exe \
  256. +       $(VS_BUILD_DIR64)/nfs_mount.exe \
  257. +       $(VS_BUILD_DIR64)/nfs41_driver.sys \
  258. +       $(VS_BUILD_DIR64)/libtirpc.dll: build
  259.  
  260.  #
  261.  # build the code
  262. @@ -49,83 +49,21 @@ clean:
  263.         rm -vRf $$(find "$(PROJECT_BASEDIR_DIR)/build.vc19" -name Debug -o -name Release)
  264.         (cd "$(PROJECT_BASEDIR_DIR)/tests/winfsinfo1" && make clean)
  265.  
  266. -# install in DESTDIR
  267. -installdest: $(VS_BUILD_DIR)/nfsd.exe \
  268. -       $(VS_BUILD_DIR)/nfs_mount.exe \
  269. -       $(VS_BUILD_DIR)/nfs_install.exe \
  270. -       $(VS_BUILD_DIR)/nfs_mount.exe \
  271. -       $(VS_BUILD_DIR)/nfs41_driver.sys \
  272. -       $(VS_BUILD_DIR)/libtirpc.dll \
  273. +installdest: $(VS_BUILD_DIR64)/nfsd.exe \
  274. +       $(VS_BUILD_DIR64)/nfs_mount.exe \
  275. +       $(VS_BUILD_DIR64)/nfs_install.exe \
  276. +       $(VS_BUILD_DIR64)/nfs_mount.exe \
  277. +       $(VS_BUILD_DIR64)/nfs41_driver.sys \
  278. +       $(VS_BUILD_DIR64)/libtirpc.dll \
  279.         $(PROJECT_BASEDIR_DIR)/nfs41rdr.inf \
  280.         $(PROJECT_BASEDIR_DIR)/etc_netconfig \
  281.         $(PROJECT_BASEDIR_DIR)/ms-nfs41-idmap.conf \
  282.         $(CYGWIN_MAKEFILE_DIR)/devel/msnfs41client.bash
  283. -       @if [[ "$$(ps -ef | grep -v -E "[[:space:]]+$${BASH_PID}[[:space:]]+")" =~ "$(DESTDIR)" ]] ; then \
  284. -               printf 'DIR %q is in use by a process\n' "$DESTDIR" 1>&2 ; \
  285. -               exit 1 ; \
  286. -       fi
  287. -       mkdir -p $(DESTDIR)
  288. -       mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/sbin/
  289. -       # /usr/bin is a bind mount to C:/cygwin64/bin, so copy binaries to /cygdrive/c/cygwin64/bin
  290. -       mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/bin
  291. -       # /usr/lib is a bind mount to C:/cygwin64/lib, so copy library data to /cygdrive/c/cygwin64/lib
  292. -       mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/lib
  293. -       mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client
  294. -       mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/etc
  295. -       mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/usr/src/msnfs41client
  296. -       mkdir -p $(DESTDIR)/cygdrive/c/cygwin64/usr/share/man/man1
  297. -       cp -r $(VS_BUILD_DIR)/nfsd.exe          $(DESTDIR)/cygdrive/c/cygwin64/sbin/nfsd_debug.exe
  298. -       cp -r $(VS_BUILD_DIR)/nfsd.pdb          $(DESTDIR)/cygdrive/c/cygwin64/sbin/nfsd_debug.pdb
  299. -       cp -r $(VS_BUILD_DIR)/nfs_mount.*       $(DESTDIR)/cygdrive/c/cygwin64/sbin/.
  300. -       cp -r $(VS_BUILD_DIR)/nfsd.*            $(DESTDIR)/cygdrive/c/cygwin64/sbin/.
  301. -       cp -r $(VS_BUILD_DIR)/nfs_install.*     $(DESTDIR)/cygdrive/c/cygwin64/sbin/.
  302. -       cp -r $(VS_BUILD_DIR)/libtirpc.*        $(DESTDIR)/cygdrive/c/cygwin64/sbin/.
  303. -       cp -r $(VS_BUILD_DIR)/nfs41_np.*        $(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client/.
  304. -       cp -r $(VS_BUILD_DIR)/nfs41_driver.*    $(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client/.
  305. -       cp $(PROJECT_BASEDIR_DIR)/nfs41rdr.inf  $(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client/.
  306. -       cp $(PROJECT_BASEDIR_DIR)/etc_netconfig $(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client/.
  307. -       cp $(PROJECT_BASEDIR_DIR)/ms-nfs41-idmap.conf           $(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client/.
  308. -       cp $(CYGWIN_MAKEFILE_DIR)/devel/msnfs41client.bash      $(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client/msnfs41client
  309. -       chmod a+x "$(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client/msnfs41client"
  310. -       (cd "$(DESTDIR)/cygdrive/c/cygwin64/sbin/" && ln -sf ../lib/msnfs41client/msnfs41client .)
  311. -       cp $(PROJECT_BASEDIR_DIR)/cygwin_idmapper.ksh           $(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client/.
  312. -       @ printf "# Package sources and diffs\n"
  313. -       git bundle create "$(DESTDIR)/cygdrive/c/cygwin64/usr/src/msnfs41client/msnfs41client_git.bundle" HEAD
  314. -       git diff -w     >"$(DESTDIR)/cygdrive/c/cygwin64/usr/src/msnfs41client/msnfs41client_diff_w.diff"
  315. -       git diff        >"$(DESTDIR)/cygdrive/c/cygwin64/usr/src/msnfs41client/msnfs41client_diff.diff"
  316. -       @ printf "# Package utilties\n"
  317. -       cp $(CYGWIN_MAKEFILE_DIR)/utils/mount_sshnfs/mount_sshnfs.ksh $(DESTDIR)/cygdrive/c/cygwin64/sbin/mount_sshnfs
  318. -       chmod a+x $(DESTDIR)/cygdrive/c/cygwin64/sbin/mount_sshnfs
  319. -       PATH+=":$(DESTDIR)/cygdrive/c/cygwin64/sbin/" \
  320. -               /usr/bin/ksh93 $(CYGWIN_MAKEFILE_DIR)/utils/mount_sshnfs/mount_sshnfs.ksh --nroff 2>"$(DESTDIR)/cygdrive/c/cygwin64/usr/share/man/man1/mount_sshnfs.1" || true
  321. -       cp $(CYGWIN_MAKEFILE_DIR)/utils/sshnfs/sshnfs.ksh $(DESTDIR)/cygdrive/c/cygwin64/sbin/sshnfs
  322. -       chmod a+x $(DESTDIR)/cygdrive/c/cygwin64/sbin/sshnfs
  323. -       cp $(CYGWIN_MAKEFILE_DIR)/utils/nfsurlconv/nfsurlconv.ksh $(DESTDIR)/cygdrive/c/cygwin64/bin/nfsurlconv
  324. -       chmod a+x $(DESTDIR)/cygdrive/c/cygwin64/bin/nfsurlconv
  325. -       /usr/bin/ksh93 $(CYGWIN_MAKEFILE_DIR)/utils/nfsurlconv/nfsurlconv.ksh --nroff 2>"$(DESTDIR)/cygdrive/c/cygwin64/usr/share/man/man1/nfsurlconv.1" || true
  326. -       @ printf "# Package tests\n"
  327. -       cp "$(PROJECT_BASEDIR_DIR)/tests/winfsinfo1/winfsinfo.exe" $(DESTDIR)/cygdrive/c/cygwin64/bin/winfsinfo.exe
  328. -       @ printf "# Package ksh93&co (if available) since Cygwin does not ship with it yet\n"
  329. -       [[ -x /usr/bin/ksh93.exe ]] && cp /usr/bin/ksh93.exe $(DESTDIR)/cygdrive/c/cygwin64/bin/ksh93.exe
  330. -       [[ -x /usr/bin/shcomp.exe ]] && cp /usr/bin/shcomp.exe $(DESTDIR)/cygdrive/c/cygwin64/bin/shcomp.exe
  331. -       cp $(PROJECT_BASEDIR_DIR)/cygwin/cygwin_ksh93/ksh.kshrc $(DESTDIR)/cygdrive/c/cygwin64/etc/ksh.kshrc
  332. -       @ printf '# Packaging libs\n'
  333. -       ldd $$(find $(DESTDIR)/cygdrive/c/cygwin64/sbin/ -iname \*.exe -o -iname \*.dll) | \
  334. -               while read dummy1 dummy2 dllfile dummy3 ; do \
  335. -                       printf "%s\n" "$$dllfile" ; \
  336. -               done | \
  337. -               sort -f -u | grep -E -i '/cygdrive/c/Windows/.*(ucrt|vcrun)' | \
  338. -               while read i ; do \
  339. -                       cp "$$i" $(DESTDIR)/cygdrive/c/cygwin64/sbin/. ; \
  340. -               done
  341. -       @ printf "# Set file flags\n"
  342. -       (cd $(DESTDIR)/cygdrive/c/cygwin64/sbin/ && chmod a+rx *.exe *.dll)
  343. -       (cd $(DESTDIR)/cygdrive/c/cygwin64/lib/msnfs41client/ && chmod a+rx *.dll)
  344. -       @printf "\n#\n# TEST sbin dir is %s\n#\n" "$(DESTDIR)/cygdrive/c/cygwin64/sbin/"
  345. -       @printf '\n'
  346. -       @printf "\n#\n# Now use\n# $$ cd '%s' && ./msnfs41client install #\n# to install the kernel driver as Admin\n#\n" \
  347. -               "$(DESTDIR)/cygdrive/c/cygwin64/sbin/"
  348. -       sync
  349. +       # installdest 64bit Windows
  350. +       make -f $(CYGWIN_MAKEFILE_DIR)/Makefile.install \
  351. +               installdest \
  352. +               VS_BUILD_DIR="$(PROJECT_BASEDIR_DIR)/build.vc19/x64/Debug/" \
  353. +               CYGWIN_BASEPATH=/cygdrive/c/cygwin64/
  354.  
  355.  bintarball: installdest
  356.         set -o errexit ; set -o xtrace ; \
  357. diff --git a/cygwin/Makefile.install b/cygwin/Makefile.install
  358. new file mode 100644
  359. index 0000000..8496757
  360. --- /dev/null
  361. +++ b/cygwin/Makefile.install
  362. @@ -0,0 +1,90 @@
  363. +#
  364. +# ms-nfs41-client/cygwin/Makefile.install
  365. +#
  366. +# Simple (Cygwin) Makfile for quick&dirty nfsd_debug.exe testing
  367. +#
  368. +# Written by Roland Mainz <roland.mainz@nrubsig.org>
  369. +#
  370. +
  371. +SHELL := /bin/bash
  372. +
  373. +CYGWIN_MAKEFILE_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
  374. +PROJECT_BASEDIR_DIR := $(shell dirname $(realpath $(CYGWIN_MAKEFILE_DIR)/))
  375. +
  376. +DESTDIR := $(PROJECT_BASEDIR_DIR)/destdir
  377. +
  378. +
  379. +# install in DESTDIR
  380. +installdest:
  381. +       #
  382. +       # installing into destdir
  383. +       #
  384. +       @if [[ "$$(ps -ef | grep -v -E "[[:space:]]+$${BASH_PID}[[:space:]]+")" =~ "$(DESTDIR)" ]] ; then \
  385. +               printf 'DIR %q is in use by a process\n' "$DESTDIR" 1>&2 ; \
  386. +               exit 1 ; \
  387. +       fi
  388. +       mkdir -p $(DESTDIR)
  389. +       mkdir -p $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/
  390. +       # /usr/bin is a bind mount to C:/cygwin64/bin, so copy binaries to /$(CYGWIN_BASEPATH)/bin
  391. +       mkdir -p $(DESTDIR)/$(CYGWIN_BASEPATH)/bin
  392. +       # /usr/lib is a bind mount to C:/cygwin64/lib, so copy library data to /$(CYGWIN_BASEPATH)/lib
  393. +       mkdir -p $(DESTDIR)/$(CYGWIN_BASEPATH)/lib
  394. +       mkdir -p $(DESTDIR)/$(CYGWIN_BASEPATH)/lib/msnfs41client
  395. +       mkdir -p $(DESTDIR)/$(CYGWIN_BASEPATH)/etc
  396. +       mkdir -p $(DESTDIR)/$(CYGWIN_BASEPATH)/usr/src/msnfs41client
  397. +       mkdir -p $(DESTDIR)/$(CYGWIN_BASEPATH)/usr/share/man/man1
  398. +       cp -r $(VS_BUILD_DIR)/nfsd.exe          $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/nfsd_debug.exe
  399. +       cp -r $(VS_BUILD_DIR)/nfsd.pdb          $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/nfsd_debug.pdb
  400. +       cp -r $(VS_BUILD_DIR)/nfs_mount.*       $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/.
  401. +       cp -r $(VS_BUILD_DIR)/nfsd.*            $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/.
  402. +       cp -r $(VS_BUILD_DIR)/nfs_install.*     $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/.
  403. +       cp -r $(VS_BUILD_DIR)/libtirpc.*        $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/.
  404. +       cp -r $(VS_BUILD_DIR)/nfs41_np.*        $(DESTDIR)/$(CYGWIN_BASEPATH)/lib/msnfs41client/.
  405. +       cp -r $(VS_BUILD_DIR)/nfs41_driver.*    $(DESTDIR)/$(CYGWIN_BASEPATH)/lib/msnfs41client/.
  406. +       cp $(PROJECT_BASEDIR_DIR)/nfs41rdr.inf  $(DESTDIR)/$(CYGWIN_BASEPATH)/lib/msnfs41client/.
  407. +       cp $(PROJECT_BASEDIR_DIR)/etc_netconfig $(DESTDIR)/$(CYGWIN_BASEPATH)/lib/msnfs41client/.
  408. +       cp $(PROJECT_BASEDIR_DIR)/ms-nfs41-idmap.conf           $(DESTDIR)/$(CYGWIN_BASEPATH)/lib/msnfs41client/.
  409. +       cp $(CYGWIN_MAKEFILE_DIR)/devel/msnfs41client.bash      $(DESTDIR)/$(CYGWIN_BASEPATH)/lib/msnfs41client/msnfs41client
  410. +       chmod a+x "$(DESTDIR)/$(CYGWIN_BASEPATH)/lib/msnfs41client/msnfs41client"
  411. +       (cd "$(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/" && ln -sf ../lib/msnfs41client/msnfs41client .)
  412. +       cp $(PROJECT_BASEDIR_DIR)/cygwin_idmapper.ksh           $(DESTDIR)/$(CYGWIN_BASEPATH)/lib/msnfs41client/.
  413. +       @ printf "# Package sources and diffs\n"
  414. +       git bundle create "$(DESTDIR)/$(CYGWIN_BASEPATH)/usr/src/msnfs41client/msnfs41client_git.bundle" HEAD
  415. +       git diff -w     >"$(DESTDIR)/$(CYGWIN_BASEPATH)/usr/src/msnfs41client/msnfs41client_diff_w.diff"
  416. +       git diff        >"$(DESTDIR)/$(CYGWIN_BASEPATH)/usr/src/msnfs41client/msnfs41client_diff.diff"
  417. +       @ printf "# Package utilties\n"
  418. +       cp $(CYGWIN_MAKEFILE_DIR)/utils/mount_sshnfs/mount_sshnfs.ksh $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/mount_sshnfs
  419. +       chmod a+x $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/mount_sshnfs
  420. +       PATH+=":$(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/" \
  421. +               /usr/bin/ksh93 $(CYGWIN_MAKEFILE_DIR)/utils/mount_sshnfs/mount_sshnfs.ksh --nroff 2>"$(DESTDIR)/$(CYGWIN_BASEPATH)/usr/share/man/man1/mount_sshnfs.1" || true
  422. +       cp $(CYGWIN_MAKEFILE_DIR)/utils/sshnfs/sshnfs.ksh $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/sshnfs
  423. +       chmod a+x $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/sshnfs
  424. +       cp $(CYGWIN_MAKEFILE_DIR)/utils/nfsurlconv/nfsurlconv.ksh $(DESTDIR)/$(CYGWIN_BASEPATH)/bin/nfsurlconv
  425. +       chmod a+x $(DESTDIR)/$(CYGWIN_BASEPATH)/bin/nfsurlconv
  426. +       /usr/bin/ksh93 $(CYGWIN_MAKEFILE_DIR)/utils/nfsurlconv/nfsurlconv.ksh --nroff 2>"$(DESTDIR)/$(CYGWIN_BASEPATH)/usr/share/man/man1/nfsurlconv.1" || true
  427. +       @ printf "# Package tests\n"
  428. +       cp "$(PROJECT_BASEDIR_DIR)/tests/winfsinfo1/winfsinfo.exe" $(DESTDIR)/$(CYGWIN_BASEPATH)/bin/winfsinfo.exe
  429. +       @ printf "# Package ksh93&co (if available) since Cygwin does not ship with it yet\n"
  430. +       [[ -x $(CYGWIN_BASEPATH)/bin/ksh93.exe ]] && cp $(CYGWIN_BASEPATH)/bin/ksh93.exe $(DESTDIR)/$(CYGWIN_BASEPATH)/bin/ksh93.exe
  431. +       [[ -x $(CYGWIN_BASEPATH)/bin/shcomp.exe ]] && cp $(CYGWIN_BASEPATH)/bin/shcomp.exe $(DESTDIR)/$(CYGWIN_BASEPATH)/bin/shcomp.exe
  432. +       cp $(PROJECT_BASEDIR_DIR)/cygwin/cygwin_ksh93/ksh.kshrc $(DESTDIR)/$(CYGWIN_BASEPATH)/etc/ksh.kshrc
  433. +       @ printf '# Packaging libs\n'
  434. +       ldd $$(find $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/ -iname \*.exe -o -iname \*.dll) | \
  435. +               while read dummy1 dummy2 dllfile dummy3 ; do \
  436. +                       printf "%s\n" "$$dllfile" ; \
  437. +               done | \
  438. +               sort -f -u | grep -E -i '/cygdrive/c/Windows/.*(ucrt|vcrun)' | \
  439. +               while read i ; do \
  440. +                       cp "$$i" $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/. ; \
  441. +               done
  442. +       @ printf "# Set file flags\n"
  443. +       (cd $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/ && chmod a+rx *.exe *.dll)
  444. +       (cd $(DESTDIR)/$(CYGWIN_BASEPATH)/lib/msnfs41client/ && chmod a+rx *.dll)
  445. +       @printf "\n#\n# TEST sbin dir is %s\n#\n" "$(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/"
  446. +       @printf '\n'
  447. +       @printf "\n#\n# Now use\n# $$ cd '%s' && ./msnfs41client install #\n# to install the kernel driver as Admin\n#\n" \
  448. +               "$(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/"
  449. +       sync
  450. +
  451. +
  452. +# EOF.
  453. --
  454. 2.43.0
  455.  
  456. From d20ce970ccc3c1e2fc30a9e87a9852e0596a27bf Mon Sep 17 00:00:00 2001
  457. From: Roland Mainz <roland.mainz@nrubsig.org>
  458. Date: Fri, 17 May 2024 15:19:02 +0200
  459. Subject: [PATCH 5/5] cygwin,daemon: Add Windows 32bit support
  460.  
  461. Add initial support for 32bit Windows 10
  462.  
  463. Signed-off-by: Cedric Blancher <cedric.blancher@gmail.com>
  464. ---
  465. cygwin/Makefile              | 39 ++++++++++++++++++++++++++++++++----
  466.  cygwin/Makefile.install      | 23 ++++++++++++---------
  467.  cygwin/README.bintarball.txt |  7 +++++--
  468.  daemon/idmap_cygwin.c        |  7 ++++++-
  469.  daemon/nfs41_daemon.c        |  7 ++++++-
  470.  5 files changed, 65 insertions(+), 18 deletions(-)
  471.  
  472. diff --git a/cygwin/Makefile b/cygwin/Makefile
  473. index b40d6c7..aaa8864 100644
  474. --- a/cygwin/Makefile
  475. +++ b/cygwin/Makefile
  476. @@ -13,10 +13,17 @@ PROJECT_BASEDIR_DIR := $(shell dirname $(realpath $(CYGWIN_MAKEFILE_DIR)/))
  477.  
  478.  DESTDIR:=$(PROJECT_BASEDIR_DIR)/destdir
  479.  
  480. +VS_BUILD_DIR32:=$(PROJECT_BASEDIR_DIR)/build.vc19/Debug/
  481.  VS_BUILD_DIR64:=$(PROJECT_BASEDIR_DIR)/build.vc19/x64/Debug/
  482.  
  483.  # trigger "build" target when these binaries are needed
  484. -$(VS_BUILD_DIR64)/nfsd.exe \
  485. +$(VS_BUILD_DIR32)/nfsd.exe \
  486. +       $(VS_BUILD_DIR32)/nfs_mount.exe \
  487. +       $(VS_BUILD_DIR32)/nfs_install.exe \
  488. +       $(VS_BUILD_DIR32)/nfs_mount.exe \
  489. +       $(VS_BUILD_DIR32)/nfs41_driver.sys \
  490. +       $(VS_BUILD_DIR32)/libtirpc.dll \
  491. +       $(VS_BUILD_DIR64)/nfsd.exe \
  492.         $(VS_BUILD_DIR64)/nfs_mount.exe \
  493.         $(VS_BUILD_DIR64)/nfs_install.exe \
  494.         $(VS_BUILD_DIR64)/nfs_mount.exe \
  495. @@ -36,10 +43,20 @@ build_64bit_debug:
  496.         which MSBuild.exe
  497.         MSBuild.exe '$(shell cygpath -w "$(PROJECT_BASEDIR_DIR)/build.vc19/nfs41-client.sln")' -t:Build  -p:Configuration=Debug -p:Platform=x64
  498.  
  499. +build_32bit_release:
  500. +       @printf '#\n# PATH is %q\n#\n' '$(PATH)'
  501. +       which MSBuild.exe
  502. +       MSBuild.exe '$(shell cygpath -w "$(PROJECT_BASEDIR_DIR)/build.vc19/nfs41-client.sln")' -t:Build  -p:Configuration=Release -p:Platform=x86
  503. +
  504. +build_32bit_debug:
  505. +       @printf '#\n# PATH is %q\n#\n' '$(PATH)'
  506. +       which MSBuild.exe
  507. +       MSBuild.exe '$(shell cygpath -w "$(PROJECT_BASEDIR_DIR)/build.vc19/nfs41-client.sln")' -t:Build  -p:Configuration=Debug -p:Platform=x86
  508. +
  509.  build_testutils:
  510.         (cd "$(PROJECT_BASEDIR_DIR)/tests/winfsinfo1" && make all)
  511.  
  512. -build: build_64bit_release build_64bit_debug build_testutils
  513. +build: build_32bit_release build_32bit_debug build_64bit_release build_64bit_debug build_testutils
  514.         sync
  515.  
  516.  #
  517. @@ -49,7 +66,14 @@ clean:
  518.         rm -vRf $$(find "$(PROJECT_BASEDIR_DIR)/build.vc19" -name Debug -o -name Release)
  519.         (cd "$(PROJECT_BASEDIR_DIR)/tests/winfsinfo1" && make clean)
  520.  
  521. -installdest: $(VS_BUILD_DIR64)/nfsd.exe \
  522. +installdest: \
  523. +       $(VS_BUILD_DIR32)/nfsd.exe \
  524. +       $(VS_BUILD_DIR32)/nfs_mount.exe \
  525. +       $(VS_BUILD_DIR32)/nfs_install.exe \
  526. +       $(VS_BUILD_DIR32)/nfs_mount.exe \
  527. +       $(VS_BUILD_DIR32)/nfs41_driver.sys \
  528. +       $(VS_BUILD_DIR32)/libtirpc.dll \
  529. +       $(VS_BUILD_DIR64)/nfsd.exe \
  530.         $(VS_BUILD_DIR64)/nfs_mount.exe \
  531.         $(VS_BUILD_DIR64)/nfs_install.exe \
  532.         $(VS_BUILD_DIR64)/nfs_mount.exe \
  533. @@ -59,6 +83,11 @@ installdest: $(VS_BUILD_DIR64)/nfsd.exe \
  534.         $(PROJECT_BASEDIR_DIR)/etc_netconfig \
  535.         $(PROJECT_BASEDIR_DIR)/ms-nfs41-idmap.conf \
  536.         $(CYGWIN_MAKEFILE_DIR)/devel/msnfs41client.bash
  537. +       # installdest 32bit Windows
  538. +       make -f $(CYGWIN_MAKEFILE_DIR)/Makefile.install \
  539. +               installdest \
  540. +               VS_BUILD_DIR="$(PROJECT_BASEDIR_DIR)/build.vc19/Debug/" \
  541. +               CYGWIN_BASEPATH=/cygdrive/c/cygwin/
  542.         # installdest 64bit Windows
  543.         make -f $(CYGWIN_MAKEFILE_DIR)/Makefile.install \
  544.                 installdest \
  545. @@ -73,7 +102,9 @@ bintarball: installdest
  546.         tar -cvf - \
  547.                 --owner=SYSTEM:18 \
  548.                 --group=SYSTEM:18 \
  549. -               cygdrive/c/cygwin64 | \
  550. +               cygdrive/c/cygwin \
  551. +               cygdrive/c/cygwin64 \
  552. +               | \
  553.                         bzip2 -9 >"$${base_filename}.tar.bz2" ; \
  554.         archive_sha256hash="$$(openssl sha256 -r "$${base_filename}.tar.bz2" | while read a dummy ; do printf "%s\n" "$$a" ; done)" ; \
  555.                 sed -E <"../cygwin/README.bintarball.txt" \
  556. diff --git a/cygwin/Makefile.install b/cygwin/Makefile.install
  557. index 8496757..2af63b4 100644
  558. --- a/cygwin/Makefile.install
  559. +++ b/cygwin/Makefile.install
  560. @@ -65,18 +65,21 @@ installdest:
  561.         @ printf "# Package tests\n"
  562.         cp "$(PROJECT_BASEDIR_DIR)/tests/winfsinfo1/winfsinfo.exe" $(DESTDIR)/$(CYGWIN_BASEPATH)/bin/winfsinfo.exe
  563.         @ printf "# Package ksh93&co (if available) since Cygwin does not ship with it yet\n"
  564. -       [[ -x $(CYGWIN_BASEPATH)/bin/ksh93.exe ]] && cp $(CYGWIN_BASEPATH)/bin/ksh93.exe $(DESTDIR)/$(CYGWIN_BASEPATH)/bin/ksh93.exe
  565. -       [[ -x $(CYGWIN_BASEPATH)/bin/shcomp.exe ]] && cp $(CYGWIN_BASEPATH)/bin/shcomp.exe $(DESTDIR)/$(CYGWIN_BASEPATH)/bin/shcomp.exe
  566. +       [[ -x $(CYGWIN_BASEPATH)/bin/ksh93.exe ]] && cp $(CYGWIN_BASEPATH)/bin/ksh93.exe $(DESTDIR)/$(CYGWIN_BASEPATH)/bin/ksh93.exe || true
  567. +       [[ -x $(CYGWIN_BASEPATH)/bin/shcomp.exe ]] && cp $(CYGWIN_BASEPATH)/bin/shcomp.exe $(DESTDIR)/$(CYGWIN_BASEPATH)/bin/shcomp.exe || true
  568.         cp $(PROJECT_BASEDIR_DIR)/cygwin/cygwin_ksh93/ksh.kshrc $(DESTDIR)/$(CYGWIN_BASEPATH)/etc/ksh.kshrc
  569.         @ printf '# Packaging libs\n'
  570. -       ldd $$(find $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/ -iname \*.exe -o -iname \*.dll) | \
  571. -               while read dummy1 dummy2 dllfile dummy3 ; do \
  572. -                       printf "%s\n" "$$dllfile" ; \
  573. -               done | \
  574. -               sort -f -u | grep -E -i '/cygdrive/c/Windows/.*(ucrt|vcrun)' | \
  575. -               while read i ; do \
  576. -                       cp "$$i" $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/. ; \
  577. -               done
  578. +       if [[ "$(CYGWIN_BASEPATH)" == *64* ]] ; then \
  579. +               cp \
  580. +                       "$$(find '/cygdrive/c/Program Files (x86)/Microsoft Visual Studio/2019/Community' -ipath '*/x64/*/VCRUNTIME140D.dll' | head -n 1)" \
  581. +                       $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/. ; \
  582. +               cp '/cygdrive/c/Program Files (x86)/Windows Kits/10/bin/x64/ucrt/ucrtbased.dll' $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/. ; \
  583. +       else \
  584. +               cp \
  585. +                       "$$(find '/cygdrive/c/Program Files (x86)/Microsoft Visual Studio/2019/Community' -ipath '*/x86/*/VCRUNTIME140D.dll' | head -n 1)" \
  586. +                       $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/. ; \
  587. +               cp '/cygdrive/c/Program Files (x86)/Windows Kits/10/bin/x86/ucrt/ucrtbased.dll' $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/. ; \
  588. +       fi
  589.         @ printf "# Set file flags\n"
  590.         (cd $(DESTDIR)/$(CYGWIN_BASEPATH)/sbin/ && chmod a+rx *.exe *.dll)
  591.         (cd $(DESTDIR)/$(CYGWIN_BASEPATH)/lib/msnfs41client/ && chmod a+rx *.dll)
  592. diff --git a/cygwin/README.bintarball.txt b/cygwin/README.bintarball.txt
  593. index 9e94ddd..5ceb58b 100644
  594. --- a/cygwin/README.bintarball.txt
  595. +++ b/cygwin/README.bintarball.txt
  596. @@ -67,8 +67,11 @@ NFSv4.1 client and filesystem driver for Windows 10/11
  597.  #
  598.  # 3. Requirements:
  599.  #
  600. -- Windows 10 or Windows 11
  601. -- Cygwin 3.5.3 (or 3.6.x-devel)
  602. +- Windows 10 (32bit or 64bit) or Windows 11
  603. +- Cygwin:
  604. +    - Cygwin versions:
  605. +        - 64bit: >= 3.5.3 (or 3.6.x-devel)
  606. +        - 32bit: >= 3.3.6
  607.      - Packages (required):
  608.          cygwin
  609.          cygwin-devel
  610. diff --git a/daemon/idmap_cygwin.c b/daemon/idmap_cygwin.c
  611. index f86d038..5f1b020 100644
  612. --- a/daemon/idmap_cygwin.c
  613. +++ b/daemon/idmap_cygwin.c
  614. @@ -38,10 +38,15 @@
  615.  
  616.  #define VAL_LEN 257
  617.  
  618. +#ifdef _WIN64
  619.  #define CYGWIN_IDMAPPER_SCRIPT \
  620.      ("C:\\cygwin64\\bin\\ksh93.exe " \
  621.      "/cygdrive/c/cygwin64/lib/msnfs41client/cygwin_idmapper.ksh")
  622. -
  623. +#else
  624. +#define CYGWIN_IDMAPPER_SCRIPT \
  625. +    ("C:\\cygwin\\bin\\ksh93.exe " \
  626. +    "/cygdrive/c/cygwin/lib/msnfs41client/cygwin_idmapper.ksh")
  627. +#endif /* _WIN64 */
  628.  
  629.  #ifdef NFS41_DRIVER_FEATURE_IDMAPPER_CYGWIN
  630.  int cygwin_getent_passwd(const char *name, char *res_loginname, uid_t *res_uid, gid_t *res_gid)
  631. diff --git a/daemon/nfs41_daemon.c b/daemon/nfs41_daemon.c
  632. index 56a960e..febca0d 100644
  633. --- a/daemon/nfs41_daemon.c
  634. +++ b/daemon/nfs41_daemon.c
  635. @@ -633,8 +633,13 @@ void init_version_string(void)
  636.      /*
  637.       * Add cygwin version, if Cygwin idmapper is enabled
  638.       */
  639. +#ifdef _WIN64
  640. +#define CYGWIN_UNAME_A_CMD "C:\\cygwin64\\bin\\uname.exe -a"
  641. +#else
  642. +#define CYGWIN_UNAME_A_CMD "C:\\cygwin\\bin\\uname.exe -a"
  643. +#endif /*  _WIN64 */
  644.      subcmd_popen_context *scmd_uname =
  645. -        subcmd_popen("C:\\cygwin64\\bin\\uname.exe -a");
  646. +        subcmd_popen(CYGWIN_UNAME_A_CMD);
  647.      if (scmd_uname) {
  648.          char unamebuf[256];
  649.          char *s;
  650. --
  651. 2.43.0

Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:

To highlight particular lines, prefix each line with {%HIGHLIGHT}




All content is user-submitted.
The administrators of this site (kpaste.net) are not responsible for their content.
Abuse reports should be emailed to us at