VirtualBox

source: vbox/trunk/src/VBox/Runtime/testcase/tstMove.cpp@ 20744

Last change on this file since 20744 was 14831, checked in by vboxsync, 16 years ago

whole bunch: avoid runtime.h, include individual headers indead.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 4.6 KB
Line 
1/* $Id: tstMove.cpp 14831 2008-11-30 10:31:16Z vboxsync $ */
2/** @file
3 * IPRT - RTFileMove & RTDirMove test program.
4 */
5
6/*
7 * Copyright (C) 2006-2007 Sun Microsystems, Inc.
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * The contents of this file may alternatively be used under the terms
18 * of the Common Development and Distribution License Version 1.0
19 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20 * VirtualBox OSE distribution, in which case the provisions of the
21 * CDDL are applicable instead of those of the GPL.
22 *
23 * You may elect to license modified versions of this file under the
24 * terms and conditions of either the GPL or the CDDL or both.
25 *
26 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
27 * Clara, CA 95054 USA or visit http://www.sun.com if you need
28 * additional information or have any questions.
29 */
30
31/*******************************************************************************
32* Header Files *
33*******************************************************************************/
34#include <iprt/file.h>
35#include <iprt/path.h>
36#include <iprt/dir.h>
37#include <iprt/err.h>
38#include <iprt/initterm.h>
39#include <iprt/stream.h>
40
41
42/**
43 * Checks if there is one of the typical help options in the argument list.
44 */
45static bool HasHelpOption(int argc, char **argv)
46{
47 for (int argi = 1; argi < argc; argi++)
48 if ( argv[argi][0] == '-'
49 && ( argv[argi][1] == 'h'
50 || argv[argi][1] == 'H'
51 || argv[argi][1] == '?'
52 || argv[argi][1] == '-')
53 )
54 return true;
55 return false;
56}
57
58
59int main(int argc, char **argv)
60{
61 RTR3Init();
62
63 /*
64 * Arguments or any -? or --help?
65 */
66 if (argc <= 1 || HasHelpOption(argc, argv))
67 {
68 RTPrintf("usage: tstMove [-efdr] <src> <dst>\n"
69 "\n"
70 " -f File only.\n"
71 " -d Directory only.\n"
72 " -m Use move operation instead of rename. (implies -f)\n"
73 " -r Replace existing destination.\n"
74 );
75 return 1;
76 }
77
78 /*
79 * Parse args.
80 */
81 const char *pszNew = NULL;
82 const char *pszOld = NULL;
83 bool fDir = false;
84 bool fFile = false;
85 bool fReplace = false;
86 bool fMoveFile = false;
87 for (int argi = 1; argi < argc; argi++)
88 {
89 if (argv[argi][0] == '-')
90 {
91 const char *psz = &argv[argi][1];
92 do
93 {
94 switch (*psz)
95 {
96 case 'd':
97 fDir = true;
98 fMoveFile = false;
99 break;
100 case 'f':
101 fFile = true;
102 break;
103 case 'm':
104 fMoveFile = true;
105 fDir = false;
106 fFile = true;
107 break;
108 case 'r':
109 fReplace = true;
110 break;
111 default:
112 RTPrintf("tstRTFileMove: syntax error: Unknown option '%c' in '%s'!\n", *psz, argv[argi]);
113 return 1;
114 }
115 } while (*++psz);
116 }
117 else if (!pszOld)
118 pszOld = argv[argi];
119 else if (!pszNew)
120 pszNew = argv[argi];
121 else
122 {
123 RTPrintf("tstRTFileMove: syntax error: too many filenames!\n");
124 return 1;
125 }
126 }
127 if (!pszNew || !pszOld)
128 {
129 RTPrintf("tstRTFileMove: syntax error: too few filenames!\n");
130 return 1;
131 }
132
133 /*
134 * Do the operation.
135 */
136 int rc;
137 if (!fDir && !fFile)
138 rc = RTPathRename(pszOld, pszNew, fReplace ? RTPATHRENAME_FLAGS_REPLACE : 0);
139 else if (fDir)
140 rc = RTDirRename( pszOld, pszNew, fReplace ? RTPATHRENAME_FLAGS_REPLACE : 0);
141 else if (!fMoveFile)
142 rc = RTFileRename(pszOld, pszNew, fReplace ? RTPATHRENAME_FLAGS_REPLACE : 0);
143 else
144 rc = RTFileMove( pszOld, pszNew, fReplace ? RTFILEMOVE_FLAGS_REPLACE : 0);
145
146 RTPrintf("The API returned %Rrc\n", rc);
147 return !RT_SUCCESS(rc);
148}
149
Note: See TracBrowser for help on using the repository browser.

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